@wenathlan/cobaia 0.0.0-stage → 2.0.158
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/App.tsx +52 -0
- package/Dockerfile +48 -0
- package/_headers +4 -0
- package/_redirects +1 -0
- package/adsconfig.ts +59 -0
- package/biome.jsonc +134 -0
- package/bun.lock +2451 -0
- package/capacitor.config.ts +51 -0
- package/checkoutlinks.ts +80 -0
- package/cli.ts +114 -0
- package/cobaia.csproj +22 -0
- package/cobaia.gemspec +14 -0
- package/cobaia.java +16 -0
- package/content.ts +425 -0
- package/db.ts +219 -0
- package/devthink.toml +5 -0
- package/docs/features.md +58 -0
- package/docs/monetization.md +61 -0
- package/familyurl.ts +22 -0
- package/favicon.svg +1 -0
- package/icon.svg +1 -0
- package/index.html +26 -0
- package/labels.ts +291 -0
- package/manifest.webmanifest +56 -0
- package/mime.types +12 -0
- package/netlify.toml +2 -0
- package/package.json +207 -4
- package/pnpm-workspace.yaml +101 -0
- package/pnpmboot.package-lock.json +157 -0
- package/pnpmboot.package.json +6 -0
- package/pom.xml +29 -0
- package/posts.ts +54 -0
- package/robots.txt +90 -0
- package/roster.ts +29 -0
- package/sandboxmodality.ts +138 -0
- package/schema.prisma +31 -0
- package/sitemap.xml +42 -0
- package/sol/Sol.tsx +91 -0
- package/sol/apps/apps.tsx +66 -0
- package/sol/blog/blog.tsx +86 -0
- package/sol/home/home.tsx +140 -0
- package/sol/intro/intro.tsx +187 -0
- package/sol/legal/legal.tsx +76 -0
- package/sol/notfound/notfound.tsx +32 -0
- package/sol/pricing/pricing.tsx +98 -0
- package/sol/shell/Shell.tsx +161 -0
- package/sol/sol.css +1951 -0
- package/sol/support/support.tsx +102 -0
- package/sol/wingets/IntroFooter.tsx +69 -0
- package/sol/wingets/IntroPlans.tsx +93 -0
- package/sol/wingets/IntroSplash.tsx +105 -0
- package/sol/wingets/ShellAdsslot.tsx +47 -0
- package/sol/wingets/ShellBrand.tsx +86 -0
- package/sol/wingets/index.ts +18 -0
- package/tests/adsconfig.test.ts +51 -0
- package/tests/checkoutlinks.test.ts +73 -0
- package/tests/familyurl.test.ts +40 -0
- package/tests/posts.test.ts +76 -0
- package/tests/sandboxmodality.test.ts +77 -0
- package/tsconfig.json +22 -0
- package/tsconfig.node.json +22 -0
- package/vercel.json +3 -0
- package/vite.config.ts +44 -0
- package/vitest.config.ts +42 -0
- package/wrangler.toml +7 -0
- package/README.md +0 -3
package/package.json
CHANGED
|
@@ -1,6 +1,209 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wenathlan/cobaia",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"description": "
|
|
6
|
-
|
|
3
|
+
"packageManager": "pnpm@12.3.4",
|
|
4
|
+
"version": "2.0.158",
|
|
5
|
+
"description": "cobaia is the monetization surface of the wenathlan family: the content site that carries the plans, the support rails and the honest advertisement slots while the family apps stay clean; the name is provisional until the owner picks the official one",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cobaia": "./cli.ts"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/wenathlan/devthink"
|
|
13
|
+
},
|
|
14
|
+
"author": "Wenathlan",
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"scripts": {
|
|
17
|
+
"dev": "vite --host",
|
|
18
|
+
"build": "vite build",
|
|
19
|
+
"start": "vite preview --host",
|
|
20
|
+
"preview": "vite preview --host",
|
|
21
|
+
"check": "tsc --noEmit",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"test": "vitest run"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@fluentui/react-icons": "^2.0.345",
|
|
27
|
+
"@fontsource-variable/bricolage-grotesque": "^5.3.0",
|
|
28
|
+
"@fontsource-variable/geist-mono": "^5.3.0",
|
|
29
|
+
"@fontsource-variable/inter": "^5.3.0",
|
|
30
|
+
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
31
|
+
"@fontsource-variable/outfit": "^5.3.0",
|
|
32
|
+
"@hono/node-server": "^2.1.6",
|
|
33
|
+
"@libsql/client": "^0.18.0",
|
|
34
|
+
"@prisma/adapter-libsql": "^7.10.1",
|
|
35
|
+
"@prisma/client": "^7.10.1",
|
|
36
|
+
"@wenathlan/cadria": "~2.0.155",
|
|
37
|
+
"@wenathlan/debonair": "~2.0.155",
|
|
38
|
+
"@wenathlan/devthink": "~2.0.154",
|
|
39
|
+
"@wenathlan/getry": "~2.0.155",
|
|
40
|
+
"@wenathlan/saddle": "~2.0.155",
|
|
41
|
+
"@wenathlan/argan": "~2.0.155",
|
|
42
|
+
"@wenathlan/vault": "~2.0.155",
|
|
43
|
+
"better-sqlite3": "^13.0.3",
|
|
44
|
+
"drizzle-orm": "^0.45.4",
|
|
45
|
+
"gsap": "^3.15.1",
|
|
46
|
+
"hono": "^4.13.16",
|
|
47
|
+
"ink": "^7.1.1",
|
|
48
|
+
"lucide-react": "^1.68.0",
|
|
49
|
+
"motion": "^12.43.0",
|
|
50
|
+
"react": "^19.3.1",
|
|
51
|
+
"react-devtools-core": "^8.0.0",
|
|
52
|
+
"react-dom": "^19.3.1",
|
|
53
|
+
"three": "^0.187.0",
|
|
54
|
+
"wouter": "^3.13.0",
|
|
55
|
+
"z-ai-web-dev-sdk": "^0.0.18"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@biomejs/biome": "^2.6.5",
|
|
59
|
+
"@capacitor/android": "^8.6.0",
|
|
60
|
+
"@capacitor/cli": "^8.6.0",
|
|
61
|
+
"@capacitor/core": "^8.6.0",
|
|
62
|
+
"@capacitor/ios": "^8.6.0",
|
|
63
|
+
"@fluentui/react-icons": "^2.0.345",
|
|
64
|
+
"@hookform/resolvers": "^5.9.2",
|
|
65
|
+
"@libsql/client": "^0.18.0",
|
|
66
|
+
"@opencode-ai/sdk": "^1.19.5",
|
|
67
|
+
"@prisma/client": "^7.10.1",
|
|
68
|
+
"@radix-ui/react-accordion": "^1.3.1",
|
|
69
|
+
"@radix-ui/react-alert-dialog": "^1.2.1",
|
|
70
|
+
"@radix-ui/react-aspect-ratio": "^1.2.0",
|
|
71
|
+
"@radix-ui/react-avatar": "^1.3.1",
|
|
72
|
+
"@radix-ui/react-checkbox": "^1.4.1",
|
|
73
|
+
"@radix-ui/react-collapsible": "^1.2.1",
|
|
74
|
+
"@radix-ui/react-context-menu": "^2.4.1",
|
|
75
|
+
"@radix-ui/react-dialog": "^1.3.1",
|
|
76
|
+
"@radix-ui/react-dropdown-menu": "^2.2.1",
|
|
77
|
+
"@radix-ui/react-hover-card": "^1.2.1",
|
|
78
|
+
"@radix-ui/react-label": "^2.1.17",
|
|
79
|
+
"@radix-ui/react-menubar": "^1.2.1",
|
|
80
|
+
"@radix-ui/react-navigation-menu": "^1.4.1",
|
|
81
|
+
"@radix-ui/react-popover": "^1.3.1",
|
|
82
|
+
"@radix-ui/react-progress": "^1.2.1",
|
|
83
|
+
"@radix-ui/react-radio-group": "^1.5.1",
|
|
84
|
+
"@radix-ui/react-scroll-area": "^1.4.0",
|
|
85
|
+
"@radix-ui/react-select": "^2.4.1",
|
|
86
|
+
"@radix-ui/react-separator": "^1.2.0",
|
|
87
|
+
"@radix-ui/react-slider": "^1.6.1",
|
|
88
|
+
"@radix-ui/react-slot": "^1.5.0",
|
|
89
|
+
"@radix-ui/react-switch": "^1.4.1",
|
|
90
|
+
"@radix-ui/react-tabs": "^1.2.1",
|
|
91
|
+
"@radix-ui/react-toggle": "^1.2.1",
|
|
92
|
+
"@radix-ui/react-toggle-group": "^1.2.1",
|
|
93
|
+
"@radix-ui/react-tooltip": "^1.4.1",
|
|
94
|
+
"@tailwindcss/postcss": "^4.3.4",
|
|
95
|
+
"@tailwindcss/typography": "^0.5.20",
|
|
96
|
+
"@tailwindcss/vite": "^4.3.4",
|
|
97
|
+
"@tsconfig/node26": "^26.0.1",
|
|
98
|
+
"@types/better-sqlite3": "^9.6.0",
|
|
99
|
+
"@types/chrome": "^0.3.7",
|
|
100
|
+
"@types/express": "^5.0.6",
|
|
101
|
+
"@types/google.maps": "^3.66.9",
|
|
102
|
+
"@types/node": "^26.6.6",
|
|
103
|
+
"@types/react": "^19.3.0",
|
|
104
|
+
"@types/react-dom": "^19.3.0",
|
|
105
|
+
"@types/three": "^0.187.0",
|
|
106
|
+
"@vitejs/plugin-react": "^6.2.1",
|
|
107
|
+
"add": "^2.0.9",
|
|
108
|
+
"autoprefixer": "^10.6.2",
|
|
109
|
+
"axios": "^1.21.0",
|
|
110
|
+
"better-sqlite3": "^13.0.3",
|
|
111
|
+
"bun-types": "^1.4.4",
|
|
112
|
+
"cheerio": "^1.2.0",
|
|
113
|
+
"class-variance-authority": "^0.7.1",
|
|
114
|
+
"clsx": "^2.1.1",
|
|
115
|
+
"cmdk": "^1.1.1",
|
|
116
|
+
"drizzle-kit": "^0.31.11",
|
|
117
|
+
"drizzle-orm": "^0.45.4",
|
|
118
|
+
"embla-carousel-react": "^8.6.0",
|
|
119
|
+
"emittery": "^2.2.0",
|
|
120
|
+
"esbuild": "^0.28.2",
|
|
121
|
+
"express": "^5.3.0",
|
|
122
|
+
"fast-check": "^4.10.2",
|
|
123
|
+
"framer-motion": "^13.5.1",
|
|
124
|
+
"hono": "^4.13.16",
|
|
125
|
+
"input-otp": "^1.5.0",
|
|
126
|
+
"jsdom": "26.1.0",
|
|
127
|
+
"lucide-react": "^1.68.0",
|
|
128
|
+
"mysql2": "^3.24.6",
|
|
129
|
+
"nanoid": "^6.0.2",
|
|
130
|
+
"next-themes": "^0.4.6",
|
|
131
|
+
"p-limit": "^7.3.3",
|
|
132
|
+
"p-retry": "^8.0.1",
|
|
133
|
+
"playwright": "^1.64.1",
|
|
134
|
+
"pnpm": "^12.16.1",
|
|
135
|
+
"postcss": "^8.5.32",
|
|
136
|
+
"prettier": "^3.9.10",
|
|
137
|
+
"prisma": "^7.10.1",
|
|
138
|
+
"react": "^19.3.1",
|
|
139
|
+
"react-day-picker": "^10.0.2",
|
|
140
|
+
"react-dom": "^19.3.1",
|
|
141
|
+
"react-hook-form": "^7.91.0",
|
|
142
|
+
"react-resizable-panels": "^4.18.0",
|
|
143
|
+
"recharts": "^3.10.1",
|
|
144
|
+
"sonner": "^2.0.8",
|
|
145
|
+
"streamdown": "^2.7.1",
|
|
146
|
+
"tailwind-merge": "^3.7.0",
|
|
147
|
+
"tailwindcss": "^4.3.4",
|
|
148
|
+
"tailwindcss-animate": "^1.0.7",
|
|
149
|
+
"tsup": "^8.5.1",
|
|
150
|
+
"tsx": "^4.23.15",
|
|
151
|
+
"tw-animate-css": "^1.4.0",
|
|
152
|
+
"typescript": "^7.0.2",
|
|
153
|
+
"vaul": "^1.1.2",
|
|
154
|
+
"vite": "^8.3.5",
|
|
155
|
+
"vite-plugin-manus-runtime": "^0.0.59",
|
|
156
|
+
"vitest": "^5.1.0",
|
|
157
|
+
"webpack": "^5.112.2",
|
|
158
|
+
"webpack-cli": "^6.0.1",
|
|
159
|
+
"wouter": "^3.13.0",
|
|
160
|
+
"yaml": "^2.9.1",
|
|
161
|
+
"zod": "^4.6.7"
|
|
162
|
+
},
|
|
163
|
+
"engines": {
|
|
164
|
+
"bare": "^1.18.0",
|
|
165
|
+
"bun": "^1.4.4",
|
|
166
|
+
"cargo": ">=1.85.0",
|
|
167
|
+
"chrome": "^16.0.912",
|
|
168
|
+
"cnpm": "^9.4.0",
|
|
169
|
+
"corepack": "^0.35.0",
|
|
170
|
+
"deno": "^2.9.5",
|
|
171
|
+
"dotnet": ">=8.0.0",
|
|
172
|
+
"ecmascript": "^5.0.0",
|
|
173
|
+
"firefox": ">=0.8.0",
|
|
174
|
+
"go": ">=1.24.0",
|
|
175
|
+
"iojs": "^1.0.0",
|
|
176
|
+
"java": ">=17",
|
|
177
|
+
"node": ">=26.13.0 <27",
|
|
178
|
+
"npm": "^12.2.1",
|
|
179
|
+
"pnpm": "^12.6.0",
|
|
180
|
+
"python": ">=3.11.0",
|
|
181
|
+
"rust": ">=1.85.0",
|
|
182
|
+
"teleport": ">=0.2.0",
|
|
183
|
+
"typescript": "^5.8.0",
|
|
184
|
+
"v": "^0.5.2",
|
|
185
|
+
"vscode": "^1.118.0",
|
|
186
|
+
"yarn": "^4.17.1"
|
|
187
|
+
},
|
|
188
|
+
"peerDependencies": {
|
|
189
|
+
"playwright": "^1.63.0"
|
|
190
|
+
},
|
|
191
|
+
"overrides": {
|
|
192
|
+
"body-parser": "^2.4.0",
|
|
193
|
+
"fast-uri": "^3.1.9",
|
|
194
|
+
"follow-redirects": "^1.16.2",
|
|
195
|
+
"minimatch": "^11.0.3",
|
|
196
|
+
"glob": "^14.0.3",
|
|
197
|
+
"zod": "^4.6.7",
|
|
198
|
+
"esbuild": "^0.28.2",
|
|
199
|
+
"undici": "^7.30.1",
|
|
200
|
+
"uuid": "^11.1.1",
|
|
201
|
+
"postcss-selector-parser": "^7.1.6",
|
|
202
|
+
"deepmerge-ts": "^8.0.0",
|
|
203
|
+
"katex": "^0.18.2",
|
|
204
|
+
"mysql2": "^3.24.6",
|
|
205
|
+
"proxy-addr": "2.0.8",
|
|
206
|
+
"shell-quote": "^1.11.0",
|
|
207
|
+
"source-map-js": "1.2.2"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# the vulnerability overrides of the family security gate (the devthink
|
|
2
|
+
# override contract): pnpm 12 reads overrides here, the lockfile regenerates
|
|
3
|
+
# against these pins and the OSV scan of the committed lockfile answers clean.
|
|
4
|
+
overrides:
|
|
5
|
+
undici: ^7.30.1
|
|
6
|
+
zod: ^4.6.7
|
|
7
|
+
follow-redirects: ^1.16.2
|
|
8
|
+
glob: ^14.0.2
|
|
9
|
+
minimatch: ^11.0.1
|
|
10
|
+
fast-uri: ^3.1.9
|
|
11
|
+
body-parser: ^2.4.0
|
|
12
|
+
esbuild: ^0.28.2
|
|
13
|
+
deepmerge-ts: ^8.0.0
|
|
14
|
+
mysql2: ^3.23.1
|
|
15
|
+
postcss-selector-parser: ^7.1.6
|
|
16
|
+
|
|
17
|
+
# the freshly published security fixes install before they age: pnpm 12
|
|
18
|
+
# verifies the supply-chain age by default and these four corrections ride
|
|
19
|
+
# the exclusion so the family heals now, not after the waiting window.
|
|
20
|
+
# the native build law (the node 26 v8 gate): ssh2's optional c++ binding
|
|
21
|
+
# speaks the removed v8 context api (GetIsolate), so the gyp lottery dies
|
|
22
|
+
# here in the seat pnpm 12 reads - the pure-js engine answers the lanes
|
|
23
|
+
# and no install ever compiles the broken binding.
|
|
24
|
+
neverBuiltDependencies:
|
|
25
|
+
- ssh2
|
|
26
|
+
|
|
27
|
+
minimumReleaseAgeExclude:
|
|
28
|
+
- body-parser@2.4.0
|
|
29
|
+
- fast-uri@3.1.9
|
|
30
|
+
- follow-redirects@1.16.1
|
|
31
|
+
- zod@4.6.6
|
|
32
|
+
- '@biomejs/biome@2.6.3 || 2.6.4 || 2.6.5'
|
|
33
|
+
- '@biomejs/cli-android-arm64@2.6.3 || 2.6.4 || 2.6.5'
|
|
34
|
+
- '@biomejs/cli-android-x64@2.6.3 || 2.6.4 || 2.6.5'
|
|
35
|
+
- '@biomejs/cli-darwin-arm64@2.6.3 || 2.6.4 || 2.6.5'
|
|
36
|
+
- '@biomejs/cli-darwin-x64@2.6.3 || 2.6.4 || 2.6.5'
|
|
37
|
+
- '@biomejs/cli-linux-arm64-musl@2.6.3 || 2.6.4 || 2.6.5'
|
|
38
|
+
- '@biomejs/cli-linux-arm64@2.6.3 || 2.6.4 || 2.6.5'
|
|
39
|
+
- '@biomejs/cli-linux-x64-musl@2.6.3 || 2.6.4 || 2.6.5'
|
|
40
|
+
- '@biomejs/cli-linux-x64@2.6.3 || 2.6.4 || 2.6.5'
|
|
41
|
+
- '@biomejs/cli-win32-arm64@2.6.3 || 2.6.4 || 2.6.5'
|
|
42
|
+
- '@biomejs/cli-win32-x64@2.6.3 || 2.6.4 || 2.6.5'
|
|
43
|
+
- '@types/node@26.6.6'
|
|
44
|
+
- '@capacitor/android@8.6.0'
|
|
45
|
+
- '@capacitor/cli@8.6.0'
|
|
46
|
+
- '@capacitor/core@8.6.0'
|
|
47
|
+
- '@capacitor/ios@8.6.0'
|
|
48
|
+
- '@opencode-ai/sdk@1.19.5'
|
|
49
|
+
- react-resizable-panels@4.15.1 || 4.15.2 || 4.15.3 || 4.16.0 || 4.16.1 || 4.17.0 || 4.18.0
|
|
50
|
+
- '@types/google.maps@3.66.9'
|
|
51
|
+
- lucide-react@1.64.0 || 1.65.0 || 1.66.0 || 1.67.0 || 1.68.0
|
|
52
|
+
- '@fluentui/react-icons@2.0.345'
|
|
53
|
+
- '@wenathlan/vault@2.0.152 || 2.0.153 || 2.0.154 || 2.0.155 || 2.0.156 || 2.1.8'
|
|
54
|
+
- hono@4.13.16
|
|
55
|
+
- '@wenathlan/cadria@2.0.154 || 2.0.155 || 2.0.156 || 2.1.8'
|
|
56
|
+
- '@wenathlan/debonair@2.0.154 || 2.0.155 || 2.0.156 || 2.1.8'
|
|
57
|
+
- '@wenathlan/getry@2.0.154 || 2.0.155 || 2.0.156'
|
|
58
|
+
- '@tailwindcss/node@4.3.4'
|
|
59
|
+
- '@tailwindcss/oxide-android-arm64@4.3.4'
|
|
60
|
+
- '@tailwindcss/oxide-darwin-arm64@4.3.4'
|
|
61
|
+
- '@tailwindcss/oxide-darwin-x64@4.3.4'
|
|
62
|
+
- '@tailwindcss/oxide-freebsd-x64@4.3.4'
|
|
63
|
+
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.4'
|
|
64
|
+
- '@tailwindcss/oxide-linux-arm64-gnu@4.3.4'
|
|
65
|
+
- '@tailwindcss/oxide-linux-arm64-musl@4.3.4'
|
|
66
|
+
- '@tailwindcss/oxide-linux-x64-gnu@4.3.4'
|
|
67
|
+
- '@tailwindcss/oxide-linux-x64-musl@4.3.4'
|
|
68
|
+
- '@tailwindcss/oxide-wasm32-wasi@4.3.4'
|
|
69
|
+
- '@tailwindcss/oxide-win32-arm64-msvc@4.3.4'
|
|
70
|
+
- '@tailwindcss/oxide-win32-x64-msvc@4.3.4'
|
|
71
|
+
- '@tailwindcss/oxide@4.3.4'
|
|
72
|
+
- '@tailwindcss/postcss@4.3.4'
|
|
73
|
+
- '@tailwindcss/vite@4.3.4'
|
|
74
|
+
- '@vitejs/plugin-react@6.2.1'
|
|
75
|
+
- '@vitest/mocker@5.1.0'
|
|
76
|
+
- '@vitest/spy@5.1.0'
|
|
77
|
+
- tailwindcss@4.3.4
|
|
78
|
+
- vitest@5.1.0
|
|
79
|
+
- '@wenathlan/saddle@2.0.154 || 2.0.155 || 2.0.156 || 2.1.8'
|
|
80
|
+
- '@wenathlan/devthink@2.0.154 || 2.0.155 || 2.0.156 || 2.1.7'
|
|
81
|
+
# the pnpm settings live here since pnpm 12 (the package.json pnpm field is
|
|
82
|
+
# no longer read, and onlyBuiltDependencies died in pnpm 11 — the map below
|
|
83
|
+
# is allowBuilds). THE 2.0.155 BUILDS GATE HEAL: the four-entry map froze
|
|
84
|
+
# the container install (ERR_PNPM_IGNORED_BUILDS on cpu-features, pnpm,
|
|
85
|
+
# protobufjs and ssh2 — every build-carrying package the tree holds must
|
|
86
|
+
# answer the map, true or false, or the frozen install refuses), so the
|
|
87
|
+
# map rides the complete forge form: ssh2 answers false on purpose (the
|
|
88
|
+
# native accelerator refuses the runner node, the pure js fallback carries
|
|
89
|
+
# the line) and pnpm answers false the same way; everything else builds.
|
|
90
|
+
allowBuilds:
|
|
91
|
+
'@prisma/engines': true
|
|
92
|
+
'@tailwindcss/oxide': true
|
|
93
|
+
better-sqlite3: true
|
|
94
|
+
cpu-features: true
|
|
95
|
+
esbuild: true
|
|
96
|
+
pnpm: false
|
|
97
|
+
prisma: true
|
|
98
|
+
protobufjs: true
|
|
99
|
+
ssh2: false
|
|
100
|
+
workerd: true
|
|
101
|
+
dangerouslyAllowAllBuilds: false
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pnpmboot",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "pnpmboot",
|
|
9
|
+
"version": "0.0.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"pnpm": "12.3.4"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"node_modules/@pnpm/exe.darwin-arm64": {
|
|
15
|
+
"version": "12.3.4",
|
|
16
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.darwin-arm64/-/exe.darwin-arm64-12.3.4.tgz",
|
|
17
|
+
"integrity": "sha512-PAyUol8T1+/+ViOiXAt51ECA+QnfXCqz6foL4bW+LsoX0NcVd5XVEM2mRQu+LV4oc7uRz9zf9U0P+XFfuQeDAw==",
|
|
18
|
+
"cpu": [
|
|
19
|
+
"arm64"
|
|
20
|
+
],
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"optional": true,
|
|
23
|
+
"os": [
|
|
24
|
+
"darwin"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"node_modules/@pnpm/exe.darwin-x64": {
|
|
28
|
+
"version": "12.3.4",
|
|
29
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.darwin-x64/-/exe.darwin-x64-12.3.4.tgz",
|
|
30
|
+
"integrity": "sha512-fxP9JCk0Cdye+ePuj+GJJLMUMTqHGWRdb1dtv4How876uQ2ehxvenpgiYAir/ceO9PsYUZkFTtyZdx+rRu5QOA==",
|
|
31
|
+
"cpu": [
|
|
32
|
+
"x64"
|
|
33
|
+
],
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"optional": true,
|
|
36
|
+
"os": [
|
|
37
|
+
"darwin"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"node_modules/@pnpm/exe.linux-arm64": {
|
|
41
|
+
"version": "12.3.4",
|
|
42
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-arm64/-/exe.linux-arm64-12.3.4.tgz",
|
|
43
|
+
"integrity": "sha512-t71AVA7LRqiKTyZ5xMYaZc2n5DfdpMbfokZuiIOXHBOM03ECnF0t4iYwaBDqJgVjlKYUOwaF/bRQajGNA4cJ4w==",
|
|
44
|
+
"cpu": [
|
|
45
|
+
"arm64"
|
|
46
|
+
],
|
|
47
|
+
"libc": [
|
|
48
|
+
"glibc"
|
|
49
|
+
],
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"optional": true,
|
|
52
|
+
"os": [
|
|
53
|
+
"linux"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"node_modules/@pnpm/exe.linux-arm64-musl": {
|
|
57
|
+
"version": "12.3.4",
|
|
58
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-arm64-musl/-/exe.linux-arm64-musl-12.3.4.tgz",
|
|
59
|
+
"integrity": "sha512-FBOt0/7ye6O6q4AllVV5QMviB6qE6fqkeczV/+MDWQsmo+QJrlfsh6X7CpH/tClVpBZEyIbjpUoT8bNhCYBxEg==",
|
|
60
|
+
"cpu": [
|
|
61
|
+
"arm64"
|
|
62
|
+
],
|
|
63
|
+
"libc": [
|
|
64
|
+
"musl"
|
|
65
|
+
],
|
|
66
|
+
"license": "MIT",
|
|
67
|
+
"optional": true,
|
|
68
|
+
"os": [
|
|
69
|
+
"linux"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"node_modules/@pnpm/exe.linux-x64": {
|
|
73
|
+
"version": "12.3.4",
|
|
74
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-x64/-/exe.linux-x64-12.3.4.tgz",
|
|
75
|
+
"integrity": "sha512-2ZqOlSPkfwX1h5cR+FPiWf8+F+2hZT/3TvhUK5sigHqwaQCIiq8R7CGxhndKs63JtcLi2a1Qpo+wX/EoyfjyJQ==",
|
|
76
|
+
"cpu": [
|
|
77
|
+
"x64"
|
|
78
|
+
],
|
|
79
|
+
"libc": [
|
|
80
|
+
"glibc"
|
|
81
|
+
],
|
|
82
|
+
"license": "MIT",
|
|
83
|
+
"optional": true,
|
|
84
|
+
"os": [
|
|
85
|
+
"linux"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"node_modules/@pnpm/exe.linux-x64-musl": {
|
|
89
|
+
"version": "12.3.4",
|
|
90
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-x64-musl/-/exe.linux-x64-musl-12.3.4.tgz",
|
|
91
|
+
"integrity": "sha512-RPmk7Jb/aYaFvL2iyDN/AtMY+hUEsue732WmXpcuQ9tBpMnGyA5py7Z3+e+qmQaJ0zY/4ni9jJiyPBQHujmv6w==",
|
|
92
|
+
"cpu": [
|
|
93
|
+
"x64"
|
|
94
|
+
],
|
|
95
|
+
"libc": [
|
|
96
|
+
"musl"
|
|
97
|
+
],
|
|
98
|
+
"license": "MIT",
|
|
99
|
+
"optional": true,
|
|
100
|
+
"os": [
|
|
101
|
+
"linux"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"node_modules/@pnpm/exe.win32-arm64": {
|
|
105
|
+
"version": "12.3.4",
|
|
106
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.win32-arm64/-/exe.win32-arm64-12.3.4.tgz",
|
|
107
|
+
"integrity": "sha512-ANyrHqyqco6SXBysUTRF74itDyyraea7IbFsKFdNXTjcFnfycTDx37EwuhdpPYFNSIh2JhUG4fByclsRfiHX7w==",
|
|
108
|
+
"cpu": [
|
|
109
|
+
"arm64"
|
|
110
|
+
],
|
|
111
|
+
"license": "MIT",
|
|
112
|
+
"optional": true,
|
|
113
|
+
"os": [
|
|
114
|
+
"win32"
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"node_modules/@pnpm/exe.win32-x64": {
|
|
118
|
+
"version": "12.3.4",
|
|
119
|
+
"resolved": "https://registry.npmjs.org/@pnpm/exe.win32-x64/-/exe.win32-x64-12.3.4.tgz",
|
|
120
|
+
"integrity": "sha512-WH/KqBPY/hq2Tb7SgQltEZytimcjgKRaCRL/aM9CI0c67iKc5TVmHUhIiL3Ux9FB4bWn36i6XewUcScQI+zG8w==",
|
|
121
|
+
"cpu": [
|
|
122
|
+
"x64"
|
|
123
|
+
],
|
|
124
|
+
"license": "MIT",
|
|
125
|
+
"optional": true,
|
|
126
|
+
"os": [
|
|
127
|
+
"win32"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"node_modules/pnpm": {
|
|
131
|
+
"version": "12.3.4",
|
|
132
|
+
"resolved": "https://registry.npmjs.org/pnpm/-/pnpm-12.3.4.tgz",
|
|
133
|
+
"integrity": "sha512-lhqkH7B32joEpEHZ+OFevAyW2o73ELLrZ7+e58sGEOq9SPH9hfUc/+c4RnhfoPh8VqOocqHYk/hEZ0G1zORUVw==",
|
|
134
|
+
"hasInstallScript": true,
|
|
135
|
+
"license": "MIT",
|
|
136
|
+
"bin": {
|
|
137
|
+
"pn": "pn",
|
|
138
|
+
"pnpm": "pnpm",
|
|
139
|
+
"pnpx": "pnpx",
|
|
140
|
+
"pnx": "pnx"
|
|
141
|
+
},
|
|
142
|
+
"engines": {
|
|
143
|
+
"node": ">=18.*"
|
|
144
|
+
},
|
|
145
|
+
"optionalDependencies": {
|
|
146
|
+
"@pnpm/exe.darwin-arm64": "12.3.4",
|
|
147
|
+
"@pnpm/exe.darwin-x64": "12.3.4",
|
|
148
|
+
"@pnpm/exe.linux-arm64": "12.3.4",
|
|
149
|
+
"@pnpm/exe.linux-arm64-musl": "12.3.4",
|
|
150
|
+
"@pnpm/exe.linux-x64": "12.3.4",
|
|
151
|
+
"@pnpm/exe.linux-x64-musl": "12.3.4",
|
|
152
|
+
"@pnpm/exe.win32-arm64": "12.3.4",
|
|
153
|
+
"@pnpm/exe.win32-x64": "12.3.4"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
package/pom.xml
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
3
|
+
<modelVersion>4.0.0</modelVersion>
|
|
4
|
+
<groupId>io.github.wenathlan</groupId>
|
|
5
|
+
<artifactId>cobaia</artifactId>
|
|
6
|
+
<version>${revision}</version>
|
|
7
|
+
<packaging>jar</packaging>
|
|
8
|
+
<name>cobaia single distribution</name>
|
|
9
|
+
<description>The single cobaia maven distribution: the documentation set and the tests directory embedded as jar resources in the one io.github.wenathlan.cobaia artifact. cobaia is the monetization surface — the plans, the support rails and the honest advertisement slots.</description>
|
|
10
|
+
<url>https://github.com/wenathlan/devthink</url>
|
|
11
|
+
<licenses><license><name>GPL-3.0-only</name><url>https://www.gnu.org/licenses/gpl-3.0.html</url></license></licenses>
|
|
12
|
+
<scm><url>https://github.com/wenathlan/devthink</url><connection>scm:git:https://github.com/wenathlan/devthink.git</connection></scm>
|
|
13
|
+
<distributionManagement><repository><id>github</id><name>GitHub Packages</name><url>https://maven.pkg.github.com/wenathlan/devthink</url></repository></distributionManagement>
|
|
14
|
+
<properties>
|
|
15
|
+
<revision>2.0.158</revision>
|
|
16
|
+
</properties>
|
|
17
|
+
<build>
|
|
18
|
+
<resources>
|
|
19
|
+
<resource>
|
|
20
|
+
<directory>.</directory>
|
|
21
|
+
<includes>
|
|
22
|
+
<include>README.md</include>
|
|
23
|
+
<include>docs/**</include>
|
|
24
|
+
<include>tests/**</include>
|
|
25
|
+
</includes>
|
|
26
|
+
</resource>
|
|
27
|
+
</resources>
|
|
28
|
+
</build>
|
|
29
|
+
</project>
|
package/posts.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* posts.ts — the typed accessor of the seed blog: the thin door the blog
|
|
3
|
+
* page and the tests import, answering the posts of the content lane
|
|
4
|
+
* (content.ts — the manifest; db.ts — the content_rows table; the platform
|
|
5
|
+
* gateway — GET /api/v1/ui/content). The data never lives here anymore:
|
|
6
|
+
* posts() answers the live rows the platform served, the manifest seed
|
|
7
|
+
* otherwise (the uistore chain), the index sort and the honest word count
|
|
8
|
+
* stay exactly where they rode, and the blog index (/blog) renders the
|
|
9
|
+
* sorted index and the full bodies through this door — real, written
|
|
10
|
+
* content about how the family is built, so the site is useful on its own
|
|
11
|
+
* merits (the ad networks approve content, not containers). New posts
|
|
12
|
+
* append to the manifest; the index sorts by date, so the manifest order
|
|
13
|
+
* never matters.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { type blogpost, contenttable, seedPosts } from "./content.ts";
|
|
17
|
+
|
|
18
|
+
export type { blogpost };
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The typed accessor of the blog: the live db rows when the platform
|
|
22
|
+
* answered, the manifest seed otherwise.
|
|
23
|
+
*
|
|
24
|
+
* @returns the posts of the blog.
|
|
25
|
+
*/
|
|
26
|
+
export function posts(): readonly blogpost[] {
|
|
27
|
+
return contenttable("posts", seedPosts);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Builds the blog index: the posts sorted by date, newest first. The ISO
|
|
32
|
+
* date sort is lexicographic and stable, so the index order never depends
|
|
33
|
+
* on the row order the store answers.
|
|
34
|
+
*
|
|
35
|
+
* @returns the posts of the blog, newest first.
|
|
36
|
+
*/
|
|
37
|
+
export function postindex(): readonly blogpost[] {
|
|
38
|
+
return [...posts()].sort((a, b) => {
|
|
39
|
+
if (a.date < b.date) return 1;
|
|
40
|
+
if (a.date > b.date) return -1;
|
|
41
|
+
return 0;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Counts the words of one post's body — the honest length measure the tests
|
|
47
|
+
* and the page footer can both read.
|
|
48
|
+
*
|
|
49
|
+
* @param post the post to measure.
|
|
50
|
+
* @returns the total word count across the body paragraphs.
|
|
51
|
+
*/
|
|
52
|
+
export function postwords(post: blogpost): number {
|
|
53
|
+
return post.body.join(" ").split(/\s+/).filter(Boolean).length;
|
|
54
|
+
}
|
package/robots.txt
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# robots.txt — cobaia, the front door of the DevThink family
|
|
2
|
+
# Universal deployable template: no domain is hardcoded here. The canonical
|
|
3
|
+
# domain binds on the deploy platform (netlify, vercel, sandbox) and the
|
|
4
|
+
# relative Sitemap line resolves against whichever origin serves this file.
|
|
5
|
+
# Public surface: home, pricing, support, the app directory, the update blog
|
|
6
|
+
# and the legal pages. This site exists to be indexed — content pages stay
|
|
7
|
+
# open to the search and ads crawlers.
|
|
8
|
+
|
|
9
|
+
User-agent: Googlebot
|
|
10
|
+
Allow: /
|
|
11
|
+
Disallow: /node_modules/
|
|
12
|
+
Disallow: /*.js.map$
|
|
13
|
+
Disallow: /*.json$
|
|
14
|
+
Disallow: /*.ts$
|
|
15
|
+
Disallow: /*.tsx$
|
|
16
|
+
Disallow: /*.css.map$
|
|
17
|
+
Crawl-delay: 5
|
|
18
|
+
|
|
19
|
+
User-agent: Bingbot
|
|
20
|
+
Allow: /
|
|
21
|
+
Disallow: /node_modules/
|
|
22
|
+
Disallow: /*.js.map$
|
|
23
|
+
Disallow: /*.json$
|
|
24
|
+
Disallow: /*.ts$
|
|
25
|
+
Disallow: /*.tsx$
|
|
26
|
+
Disallow: /*.css.map$
|
|
27
|
+
Crawl-delay: 10
|
|
28
|
+
|
|
29
|
+
User-agent: *
|
|
30
|
+
Allow: /
|
|
31
|
+
Disallow: /node_modules/
|
|
32
|
+
Disallow: /*.js.map$
|
|
33
|
+
Disallow: /*.json$
|
|
34
|
+
Disallow: /*.ts$
|
|
35
|
+
Disallow: /*.tsx$
|
|
36
|
+
Disallow: /*.css.map$
|
|
37
|
+
Crawl-delay: 10
|
|
38
|
+
|
|
39
|
+
# SEO and scraper bots blocked outright
|
|
40
|
+
User-agent: AhrefsBot
|
|
41
|
+
Disallow: /
|
|
42
|
+
|
|
43
|
+
User-agent: SemrushBot
|
|
44
|
+
Disallow: /
|
|
45
|
+
|
|
46
|
+
User-agent: DotBot
|
|
47
|
+
Disallow: /
|
|
48
|
+
|
|
49
|
+
User-agent: MJ12bot
|
|
50
|
+
Disallow: /
|
|
51
|
+
|
|
52
|
+
User-agent: PetalBot
|
|
53
|
+
Disallow: /
|
|
54
|
+
|
|
55
|
+
User-agent: BLEXBot
|
|
56
|
+
Disallow: /
|
|
57
|
+
|
|
58
|
+
User-agent: DataForSeoBot
|
|
59
|
+
Disallow: /
|
|
60
|
+
|
|
61
|
+
# AI training crawlers blocked outright
|
|
62
|
+
User-agent: GPTBot
|
|
63
|
+
Disallow: /
|
|
64
|
+
|
|
65
|
+
User-agent: CCBot
|
|
66
|
+
Disallow: /
|
|
67
|
+
|
|
68
|
+
User-agent: anthropic-ai
|
|
69
|
+
Disallow: /
|
|
70
|
+
|
|
71
|
+
User-agent: Claude-Web
|
|
72
|
+
Disallow: /
|
|
73
|
+
|
|
74
|
+
User-agent: ChatGPT-User
|
|
75
|
+
Disallow: /
|
|
76
|
+
|
|
77
|
+
User-agent: Google-Extended
|
|
78
|
+
Disallow: /
|
|
79
|
+
|
|
80
|
+
User-agent: Bytespider
|
|
81
|
+
Disallow: /
|
|
82
|
+
|
|
83
|
+
# ads relevance crawlers keep full access — the site runs honest ad slots
|
|
84
|
+
User-agent: Mediapartners-Google
|
|
85
|
+
Allow: /
|
|
86
|
+
|
|
87
|
+
User-agent: AdsBot-Google
|
|
88
|
+
Allow: /
|
|
89
|
+
|
|
90
|
+
Sitemap: /sitemap.xml
|
package/roster.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* roster.ts — the typed accessor of the family directory data: the thin
|
|
3
|
+
* door the /apps page, the shell footer, the home preview and the intro
|
|
4
|
+
* footer import, answering the roster of the content lane (content.ts —
|
|
5
|
+
* the manifest; db.ts — the content_rows table; the platform gateway — GET
|
|
6
|
+
* /api/v1/ui/content). The data never lives here anymore: roster() answers
|
|
7
|
+
* the live rows the platform served, the manifest seed otherwise (the
|
|
8
|
+
* uistore chain). Every deploy unit beside the cobaia, with the one accent
|
|
9
|
+
* each carries (the spec §12 table, mirrored from the argan contract; the
|
|
10
|
+
* devthink OS rides the family sun) and the honest role each app declares
|
|
11
|
+
* in its own devthink.toml — condensed to one line, nothing embellished:
|
|
12
|
+
* the page and the tests read the same table through this door, so the
|
|
13
|
+
* directory can never drift from the family.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { contenttable, type familymember, seedRoster } from "./content.ts";
|
|
17
|
+
|
|
18
|
+
export type { familymember };
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The typed accessor of the directory: the live db rows when the platform
|
|
22
|
+
* answered, the manifest seed otherwise — rail order, the OS first, then
|
|
23
|
+
* the applications.
|
|
24
|
+
*
|
|
25
|
+
* @returns the directory roster.
|
|
26
|
+
*/
|
|
27
|
+
export function roster(): readonly familymember[] {
|
|
28
|
+
return contenttable("roster", seedRoster);
|
|
29
|
+
}
|