Skip to content

Commit d85b4a5

Browse files
committed
feat(telemetry): collect installs and development progress for founder outreach
1 parent 43cbc21 commit d85b4a5

88 files changed

Lines changed: 5358 additions & 108 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/publish.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ jobs:
5959
env:
6060
RELEASE_TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
6161

62+
- name: Verify installed collectors and development-only bundles
63+
run: |
64+
npx nx build growth --skip-nx-cache
65+
npx nx run telemetry:test-install-pack --skip-nx-cache
66+
npx nx run telemetry:test-development-bundle --skip-nx-cache
67+
6268
# Trusted publishing is configured per-package on npm; no NPM_TOKEN needed.
6369
# The OIDC token from id-token: write authenticates this workflow as a
6470
# trusted publisher for each @threadplane/* package. Provenance attestations are

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ keys/
8181
# Aborted fixture-record runs strand raw recordings under a committed path
8282
**/e2e/fixtures/.staging/
8383

84+
# Shared install collector staged before each library is packaged.
85+
libs/*/.install-collector/
86+
8487
# Growth research generated deployment artifacts
8588
apps/growth-research/.dawn/
8689
apps/growth-research/.deployment/

apps/website/content/AGENTS.md.template

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,29 @@ Supported Angular majors: 20, 21, and 22.
1212
## Install
1313
npm install @threadplane/chat @threadplane/langgraph @langchain/core @langchain/langgraph-sdk marked
1414

15+
The chat, LangGraph, AG-UI, and render packages include automatic install collection
16+
for local and CI execution: package/environment details, a random installation ID,
17+
configured Git name/full email, and repository provider/owner hints when available.
18+
Set `DO_NOT_TRACK=1` or `TPLANE_TELEMETRY_DISABLED=1` before installation to disable
19+
it. Package-manager script controls are respected. A usable install email can qualify
20+
for a short founder welcome sequence after linked development-browser use, capped
21+
at three emails with unsubscribe and reply stops. CI alone does not trigger it.
22+
The package-local correlation token contains no email; copied/cached packages can
23+
retain it, so it does not verify a person. No registration is required.
24+
See https://threadplane.ai/privacy.
25+
26+
27+
Supported runtime/browser collection is automatic only in Angular development mode.
28+
Production builds, SSR, imports, and unused construction are inert. It sends closed
29+
progress milestones with package/version and random browser-origin/session IDs, never
30+
conversation content or private URLs. Adapter `telemetry: false` disables it; a custom
31+
sink replaces the automatic destination, including nested chat JSON rendering. Use
32+
`setDevelopmentCollectionEnabled(false)` from `@threadplane/telemetry/browser`, or set
33+
browser localStorage `THREADPLANE_TELEMETRY_DISABLED=1` and reload. Development console
34+
announcements need no click to acknowledge progress. Linked non-CI install and runtime
35+
evidence can qualify the install email for the founder sequence described above.
36+
Standalone render also accepts `provideRender({ telemetry: false })`.
37+
1538
## Key requirement
1639
`injectAgent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".
1740

apps/website/content/CLAUDE.md.template

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,29 @@ Supported Angular majors: 20, 21, and 22.
1212
## Install
1313
npm install @threadplane/chat @threadplane/langgraph @langchain/core @langchain/langgraph-sdk marked
1414

15+
The chat, LangGraph, AG-UI, and render packages include automatic install collection
16+
for local and CI execution: package/environment details, a random installation ID,
17+
configured Git name/full email, and repository provider/owner hints when available.
18+
Set `DO_NOT_TRACK=1` or `TPLANE_TELEMETRY_DISABLED=1` before installation to disable
19+
it. Package-manager script controls are respected. A usable install email can qualify
20+
for a short founder welcome sequence after linked development-browser use, capped
21+
at three emails with unsubscribe and reply stops. CI alone does not trigger it.
22+
The package-local correlation token contains no email; copied/cached packages can
23+
retain it, so it does not verify a person. No registration is required.
24+
See https://threadplane.ai/privacy.
25+
26+
27+
Supported runtime/browser collection is automatic only in Angular development mode.
28+
Production builds, SSR, imports, and unused construction are inert. It sends closed
29+
progress milestones with package/version and random browser-origin/session IDs, never
30+
conversation content or private URLs. Adapter `telemetry: false` disables it; a custom
31+
sink replaces the automatic destination, including nested chat JSON rendering. Use
32+
`setDevelopmentCollectionEnabled(false)` from `@threadplane/telemetry/browser`, or set
33+
browser localStorage `THREADPLANE_TELEMETRY_DISABLED=1` and reload. Development console
34+
announcements need no click to acknowledge progress. Linked non-CI install and runtime
35+
evidence can qualify the install email for the founder sequence described above.
36+
Standalone render also accepts `provideRender({ telemetry: false })`.
37+
1538
## Key requirement
1639
`injectAgent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".
1740

apps/website/content/docs/ag-ui/api/api-docs.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@
390390
{
391391
"name": "telemetry",
392392
"type": "false | AgentRuntimeTelemetrySink",
393-
"description": "Optional app-owned sink. Supply one to receive runtime lifecycle events.",
393+
"description": "Omit to enable automatic development-only collection. Set `false` to disable.\nAn app-owned sink replaces the automatic destination and receives the\nexisting runtime lifecycle callbacks.",
394394
"optional": true
395395
},
396396
{
@@ -540,7 +540,7 @@
540540
{
541541
"name": "telemetry",
542542
"type": "false | AgentRuntimeTelemetrySink",
543-
"description": "Optional app-owned sink. Supply one to receive runtime lifecycle events.",
543+
"description": "Omit to enable automatic development-only collection. Set `false` to disable.\nAn app-owned sink replaces the automatic destination and receives the\nexisting runtime lifecycle callbacks.",
544544
"optional": true
545545
}
546546
],

apps/website/content/docs/langgraph/api/api-docs.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,7 @@
919919
{
920920
"name": "telemetry",
921921
"type": "false | AgentRuntimeTelemetrySink",
922-
"description": "Optional app-owned sink. Supply one to receive runtime lifecycle events.",
922+
"description": "Omit to enable automatic development-only collection. Set `false` to disable.\nAn app-owned sink replaces the automatic destination and receives the\nexisting runtime lifecycle callbacks.",
923923
"optional": true
924924
},
925925
{
@@ -1061,7 +1061,7 @@
10611061
{
10621062
"name": "telemetry",
10631063
"type": "false | AgentRuntimeTelemetrySink",
1064-
"description": "Optional app-owned sink. Supply one to receive runtime lifecycle events.",
1064+
"description": "Omit to enable automatic development-only collection. Set `false` to disable.\nAn app-owned sink replaces the automatic destination and receives the\nexisting runtime lifecycle callbacks.",
10651065
"optional": true
10661066
},
10671067
{

apps/website/content/docs/render/api/api-docs.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@
171171
"type": "InputSignal<StateStore | undefined>",
172172
"description": "",
173173
"optional": false
174+
},
175+
{
176+
"name": "telemetry",
177+
"type": "InputSignal<boolean | undefined>",
178+
"description": "Disable automatic development collection for this render tree.",
179+
"optional": false
174180
}
175181
],
176182
"methods": [
@@ -276,6 +282,12 @@
276282
"type": "StateStore",
277283
"description": "Backing state store that `$bindState` paths read from and interactive elements write to.",
278284
"optional": true
285+
},
286+
{
287+
"name": "telemetry",
288+
"type": "boolean",
289+
"description": "Set false to disable automatic development browser collection for this render tree.",
290+
"optional": true
279291
}
280292
],
281293
"examples": []

apps/website/public/AGENTS.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,29 @@ Supported Angular majors: 20, 21, and 22.
1212
## Install
1313
npm install @threadplane/chat @threadplane/langgraph @langchain/core @langchain/langgraph-sdk marked
1414

15+
The chat, LangGraph, AG-UI, and render packages include automatic install collection
16+
for local and CI execution: package/environment details, a random installation ID,
17+
configured Git name/full email, and repository provider/owner hints when available.
18+
Set `DO_NOT_TRACK=1` or `TPLANE_TELEMETRY_DISABLED=1` before installation to disable
19+
it. Package-manager script controls are respected. A usable install email can qualify
20+
for a short founder welcome sequence after linked development-browser use, capped
21+
at three emails with unsubscribe and reply stops. CI alone does not trigger it.
22+
The package-local correlation token contains no email; copied/cached packages can
23+
retain it, so it does not verify a person. No registration is required.
24+
See https://threadplane.ai/privacy.
25+
26+
27+
Supported runtime/browser collection is automatic only in Angular development mode.
28+
Production builds, SSR, imports, and unused construction are inert. It sends closed
29+
progress milestones with package/version and random browser-origin/session IDs, never
30+
conversation content or private URLs. Adapter `telemetry: false` disables it; a custom
31+
sink replaces the automatic destination, including nested chat JSON rendering. Use
32+
`setDevelopmentCollectionEnabled(false)` from `@threadplane/telemetry/browser`, or set
33+
browser localStorage `THREADPLANE_TELEMETRY_DISABLED=1` and reload. Development console
34+
announcements need no click to acknowledge progress. Linked non-CI install and runtime
35+
evidence can qualify the install email for the founder sequence described above.
36+
Standalone render also accepts `provideRender({ telemetry: false })`.
37+
1538
## Key requirement
1639
`injectAgent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".
1740

apps/website/public/CLAUDE.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,29 @@ Supported Angular majors: 20, 21, and 22.
1212
## Install
1313
npm install @threadplane/chat @threadplane/langgraph @langchain/core @langchain/langgraph-sdk marked
1414

15+
The chat, LangGraph, AG-UI, and render packages include automatic install collection
16+
for local and CI execution: package/environment details, a random installation ID,
17+
configured Git name/full email, and repository provider/owner hints when available.
18+
Set `DO_NOT_TRACK=1` or `TPLANE_TELEMETRY_DISABLED=1` before installation to disable
19+
it. Package-manager script controls are respected. A usable install email can qualify
20+
for a short founder welcome sequence after linked development-browser use, capped
21+
at three emails with unsubscribe and reply stops. CI alone does not trigger it.
22+
The package-local correlation token contains no email; copied/cached packages can
23+
retain it, so it does not verify a person. No registration is required.
24+
See https://threadplane.ai/privacy.
25+
26+
27+
Supported runtime/browser collection is automatic only in Angular development mode.
28+
Production builds, SSR, imports, and unused construction are inert. It sends closed
29+
progress milestones with package/version and random browser-origin/session IDs, never
30+
conversation content or private URLs. Adapter `telemetry: false` disables it; a custom
31+
sink replaces the automatic destination, including nested chat JSON rendering. Use
32+
`setDevelopmentCollectionEnabled(false)` from `@threadplane/telemetry/browser`, or set
33+
browser localStorage `THREADPLANE_TELEMETRY_DISABLED=1` and reload. Development console
34+
announcements need no click to acknowledge progress. Linked non-CI install and runtime
35+
evidence can qualify the install email for the founder sequence described above.
36+
Standalone render also accepts `provideRender({ telemetry: false })`.
37+
1538
## Key requirement
1639
`injectAgent()` MUST be called within an Angular injection context (component constructor or field initializer). Calling it in ngOnInit or any async context throws "NG0203: inject() must be called from an injection context".
1740

apps/website/src/app/layout.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
SITE_ORIGIN,
1818
} from '../lib/site-metadata';
1919
import { getFormPolicy } from '../lib/growth/form-policy';
20+
import { WebsiteSignals } from '../components/shared/WebsiteSignals';
21+
import { websiteContentCatalog } from '../lib/growth/website-content';
2022

2123
const garamond = EB_Garamond({
2224
subsets: ['latin'],
@@ -78,6 +80,7 @@ export default function RootLayout({
7880
reason — do not mount its component builders individually.
7981
*/}
8082
<JsonLd data={rootJsonLd()} />
83+
<WebsiteSignals catalog={websiteContentCatalog()} />
8184
<Nav />
8285
<div id="site-content">
8386
<main>

0 commit comments

Comments
 (0)