summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-08-05 12:01:48 -0400
committerDax Raad <[email protected]>2025-08-05 12:01:48 -0400
commit3db8e7c2b66bd6efea1457d9a2fcd6c9bbc782a8 (patch)
tree7ba7ee4ae8250cece4ae70a0dd006161e5880f57
parentb459055757636204e8967a91935b94ba89cfa90e (diff)
downloadopencode-3db8e7c2b66bd6efea1457d9a2fcd6c9bbc782a8.tar.gz
opencode-3db8e7c2b66bd6efea1457d9a2fcd6c9bbc782a8.zip
ci: send stats to posthog
-rw-r--r--.github/workflows/stats.yml2
-rw-r--r--AGENTS.md23
-rw-r--r--packages/opencode/AGENTS.md13
-rwxr-xr-xscript/stats.ts55
4 files changed, 51 insertions, 42 deletions
diff --git a/.github/workflows/stats.yml b/.github/workflows/stats.yml
index 8ad02d251..ab7f24e27 100644
--- a/.github/workflows/stats.yml
+++ b/.github/workflows/stats.yml
@@ -30,3 +30,5 @@ jobs:
git add STATS.md
git diff --staged --quiet || git commit -m "ignore: update download stats $(date -I)"
git push
+ env:
+ POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }}
diff --git a/AGENTS.md b/AGENTS.md
index 0852d237a..cca69e4b6 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,13 +1,12 @@
-## Style
+## IMPORTANT
-- prefer single word variable/function names
-- avoid try catch where possible - prefer to let exceptions bubble up
-- avoid else statements where possible
-- do not make useless helper functions - inline functionality unless the
- function is reusable or composable
-- prefer Bun apis
-
-## Workflow
-
-- you can regenerate the golang sdk by calling ./scripts/stainless.ts
-- we use bun for everything
+- Try to keep things in one function unless composable or reusable
+- DO NOT do unnecessary destructuring of variables
+- DO NOT use `else` statements unless necessary
+- DO NOT use `try`/`catch` if it can be avoided
+- AVOID `try`/`catch` where possible
+- AVOID `else` statements
+- AVOID using `any` type
+- AVOID `let` statements
+- PREFER single word variable names where possible
+- Use as many bun apis as possible like Bun.file()
diff --git a/packages/opencode/AGENTS.md b/packages/opencode/AGENTS.md
index 8b3b03dc0..287cbc265 100644
--- a/packages/opencode/AGENTS.md
+++ b/packages/opencode/AGENTS.md
@@ -17,19 +17,6 @@
- **Error handling**: Use Result patterns, avoid throwing exceptions in tools
- **File structure**: Namespace-based organization (e.g., `Tool.define()`, `Session.create()`)
-## IMPORTANT
-
-- Try to keep things in one function unless composable or reusable
-- DO NOT do unnecessary destructuring of variables
-- DO NOT use `else` statements unless necessary
-- DO NOT use `try`/`catch` if it can be avoided
-- AVOID `try`/`catch` where possible
-- AVOID `else` statements
-- AVOID using `any` type
-- AVOID `let` statements
-- PREFER single word variable names where possible
-- Use as many bun apis as possible like Bun.file()
-
## Architecture
- **Tools**: Implement `Tool.Info` interface with `execute()` method
diff --git a/script/stats.ts b/script/stats.ts
index bce211855..d5f6c103f 100755
--- a/script/stats.ts
+++ b/script/stats.ts
@@ -1,5 +1,33 @@
#!/usr/bin/env bun
+async function sendToPostHog(event: string, properties: Record<string, any>) {
+ const key = process.env["POSTHOG_KEY"]
+
+ if (!key) {
+ console.warn("POSTHOG_API_KEY not set, skipping PostHog event")
+ return
+ }
+
+ const response = await fetch("https://us.i.posthog.com/i/v0/e/", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ distinct_id: "download",
+ api_key: key,
+ event,
+ properties: {
+ ...properties,
+ },
+ }),
+ }).catch(() => null)
+
+ if (response && !response.ok) {
+ console.warn(`PostHog API error: ${response.status}`)
+ }
+}
+
interface Asset {
name: string
download_count: number
@@ -173,6 +201,16 @@ console.log(`Fetched npm all-time downloads: ${npmDownloads.toLocaleString()}\n`
await save(githubTotal, npmDownloads)
+await sendToPostHog("download", {
+ count: githubTotal,
+ source: "github",
+})
+
+await sendToPostHog("download", {
+ count: npmDownloads,
+ source: "npm",
+})
+
const totalDownloads = githubTotal + npmDownloads
console.log("=".repeat(60))
@@ -181,23 +219,6 @@ console.log(` GitHub: ${githubTotal.toLocaleString()}`)
console.log(` npm: ${npmDownloads.toLocaleString()}`)
console.log("=".repeat(60))
-console.log("\nDownloads by release:")
-console.log("-".repeat(60))
-
-stats
- .sort((a, b) => b.downloads - a.downloads)
- .forEach((release) => {
- console.log(`${release.tag.padEnd(15)} ${release.downloads.toLocaleString().padStart(10)} downloads`)
-
- if (release.assets.length > 1) {
- release.assets
- .sort((a, b) => b.downloads - a.downloads)
- .forEach((asset) => {
- console.log(` └─ ${asset.name.padEnd(25)} ${asset.downloads.toLocaleString().padStart(8)}`)
- })
- }
- })
-
console.log("-".repeat(60))
console.log(`GitHub Total: ${githubTotal.toLocaleString()} downloads across ${releases.length} releases`)
console.log(`npm Total: ${npmDownloads.toLocaleString()} downloads`)