forked from thesongzhu/Friday
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage.json
More file actions
269 lines (269 loc) · 14.5 KB
/
Copy pathpackage.json
File metadata and controls
269 lines (269 loc) · 14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
{
"name": "@thesongzhu/friday",
"version": "1.0.0",
"type": "module",
"description": "Self-hosted, skill-driven Agent OS for local AI automation",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/thesongzhu/Friday.git"
},
"keywords": [
"ai",
"automation",
"agents",
"workflows",
"self-hosted",
"llm",
"skills",
"memory",
"visual-editor"
],
"engines": {
"node": ">=22"
},
"files": [
"dist/**/*.js",
"dist/**/*.d.ts",
"dist/ui/**",
"scripts/ops/friday-service-run.sh",
"scripts/ops/friday-companion-run.sh",
"scripts/ops/friday-open-ui-on-login.sh",
"scripts/ops/friday-first-run.sh",
"scripts/ops/install-friday-launchagent.sh",
"Friday Setup.command",
"!dist/**/*.js.map",
"!dist/**/*.d.ts.map",
"README.md",
"NOTICE",
"LICENSE"
],
"bin": {
"friday": "./dist/cli/friday-cli.js"
},
"scripts": {
"typecheck": "tsc --noEmit && tsc -p packages/friday-operator-client/tsconfig.json --noEmit && tsc -p ui/tsconfig.json --noEmit",
"build:api": "tsc",
"build:ui": "vite build --config ui/vite.config.ts",
"build:companion:native": "bash scripts/ops/build-friday-companion-app.sh",
"build:companion:dmg": "bash scripts/ops/build-friday-companion-dmg.sh",
"build:companion:appcast": "bash scripts/ops/build-friday-sparkle-appcast.sh",
"build:release:source": "bash scripts/ops/build-friday-source-distribution.sh",
"build:friday-static:prod": "node scripts/qa/build-friday-static-prod.mjs",
"ops:generate:sparkle-keys": "bash scripts/ops/generate-friday-sparkle-keys.sh",
"publish:homebrew:cask": "bash scripts/ops/publish-friday-homebrew-cask.sh",
"check:companion:release-env": "bash scripts/ops/check-friday-companion-release-env.sh",
"build": "npm run build:api && npm run build:ui",
"prestart": "npm run build",
"start": "node dist/cli/friday-cli.js start",
"start:companion": "node dist/system/companion/friday-system-companion-daemon.js",
"demo:minimal": "node scripts/demo/minimal-workflow-demo.mjs",
"demo": "npm run demo:minimal",
"test": "vitest run --project default --project typecheck --project llm-e2e",
"test:coverage": "vitest run --project default --coverage",
"test:watch": "vitest --project default",
"test:adversarial": "vitest run test/adversarial",
"test:integration:agent-parity": "vitest run test/integration/agent/friday-agent-parity-acceptance.test.ts",
"lint": "eslint .",
"lint:fix": "eslint --fix src",
"check:migrations": "node scripts/quality/check-migrations.mjs",
"check:adversarial": "node scripts/quality/check-adversarial-suite.mjs",
"check:ssd": "node scripts/quality/check-ssd-markers.mjs",
"check:alignment": "node scripts/quality/check-openclaw-alignment-guard.mjs",
"check:desktop-runtime": "bash scripts/ops/check-desktop-runtime.sh",
"check:enablement-gaps": "bash scripts/ops/check-enablement-gaps.sh",
"check:cross-platform-release-inputs": "bash scripts/ops/check-friday-cross-platform-release-inputs.sh",
"check:agent-rollout:phase1": "node scripts/ops/run-agent-rollout-acceptance.mjs phase1",
"check:agent-rollout:phase2": "node scripts/ops/run-agent-rollout-acceptance.mjs phase2",
"check:agent-rollout:phase3": "node scripts/ops/run-agent-rollout-acceptance.mjs phase3",
"check:agent-rollout:full": "node scripts/ops/run-agent-rollout-acceptance.mjs full",
"test:contracts:routes": "vitest run test/contracts/api",
"test:contracts:types": "vitest --project typecheck --run test/contracts/types",
"test:contracts": "npm run test:contracts:routes && npm run test:contracts:types",
"test:contracts:update": "vitest run -u test/contracts/api",
"check:all": "npm run check:migrations && npm run check:adversarial && npm run check:ssd && npm run check:alignment",
"check:provider-reliability": "vitest run test/unit/providers/model/friday-provider-templates.test.ts test/unit/providers/api/friday-provider-routes.test.ts",
"check:desktop-release-pipeline": "node scripts/ops/check-friday-desktop-release-pipeline.mjs",
"check:architecture-boundaries": "node scripts/quality/check-architecture-boundaries.mjs",
"check:security-doctor": "node scripts/ops/check-friday-security-doctor.mjs",
"check:secret-patterns": "node scripts/quality/check-provider-key-patterns.mjs",
"check:audit-integrity": "node scripts/ops/check-friday-audit-integrity.mjs",
"setup:hooks": "bash scripts/setup-hooks.sh",
"ops:converge-runtime": "bash scripts/ops/friday-converge-runtime.sh",
"ops:doctor:runtime": "node scripts/ops/friday-local-runtime-doctor.mjs",
"ops:doctor:runtime:report-json": "node scripts/ops/friday-local-runtime-doctor.mjs --report-json --max-iterations 1",
"ops:check-branch-conformance": "node scripts/ops/check-branch-conformance.mjs",
"ops:real-green-gate": "node scripts/ops/run-real-green-gate.mjs",
"ops:harden-local-enablement": "bash scripts/ops/harden-local-enablement.sh",
"ops:agent-adoption:doctor": "node dist/cli/friday-cli.js phases doctor",
"ops:agent-adoption:list": "node dist/cli/friday-cli.js phases list",
"ops:agent-adoption:start-next": "node dist/cli/friday-cli.js phases start-next",
"ops:agent-adoption:run-next": "node dist/cli/friday-cli.js phases run-next",
"ops:agent-adoption:resume": "node dist/cli/friday-cli.js phases resume",
"ops:agent-adoption:closeout": "node dist/cli/friday-cli.js phases closeout",
"test:install:smoke": "node scripts/ci/install-smoke.mjs",
"test:docker:e2e:runtime": "FRIDAY_DOCKER_SMOKE_LAYER=runtime bash scripts/ci/docker-e2e-smoke.sh",
"test:docker:e2e:bootstrap": "FRIDAY_DOCKER_SMOKE_LAYER=bootstrap bash scripts/ci/docker-e2e-smoke.sh",
"test:docker:e2e:plugins": "FRIDAY_DOCKER_SMOKE_LAYER=plugins bash scripts/ci/docker-e2e-smoke.sh",
"test:docker:e2e:smoke": "npm run test:docker:e2e:runtime && npm run test:docker:e2e:bootstrap && npm run test:docker:e2e:plugins",
"test:docker:e2e-smoke": "npm run test:docker:e2e:smoke",
"test:e2e:cloud:contract": "node scripts/e2e/check-friday-cloud-contract.mjs",
"test:e2e:cloud:live": "FRIDAY_E2E_TARGET=cloud vitest run test/e2e/live/friday-cloud-journeys.e2e.test.ts",
"test:e2e:cloud": "npm run test:e2e:cloud:contract && npm run test:e2e:cloud:live",
"test:e2e:browser-mock-hub": "npm run build:ui && vitest run --project browser-e2e",
"test:e2e:ui": "npm run test:e2e:browser-mock-hub",
"test:e2e:ui:file": "node scripts/testing/run-browser-e2e-with-build.mjs",
"test:e2e:closure": "node scripts/e2e/run-friday-closure.mjs --local-only",
"test:e2e:closure:local": "node scripts/e2e/run-friday-closure.mjs --local-only",
"test:e2e:closure:all": "node scripts/e2e/run-friday-closure.mjs --all",
"test:e2e:closure:cloud": "node scripts/e2e/run-friday-closure.mjs --cloud-only",
"test:e2e:external-closure": "node scripts/e2e/run-friday-external-closure.mjs",
"test:e2e:voice:live": "FRIDAY_E2E_LIVE_VOICE=1 vitest run test/e2e/live/friday-execution-voice-live.e2e.test.ts",
"verify:repo-ready": "npm run release:verify:repo",
"verify:product-local": "npm run test:e2e:closure",
"verify:cloud-smoke": "npm run test:e2e:closure:cloud",
"verify:docker-smoke": "npm run test:docker:e2e-smoke",
"release:preflight": "node scripts/ops/run-friday-release-preflight.mjs",
"release:check": "node scripts/quality/release-check.mjs",
"audit:release-truth": "node scripts/quality/run-release-truth-audit.mjs",
"check:proof:no-mock-leaks": "node scripts/quality/check-proof-no-mock-leaks.mjs",
"check:ui-bundle-health": "node scripts/quality/check-ui-bundle-health.mjs",
"check:closeout:truth:phase1": "node scripts/quality/check-closeout-truth.mjs phase1",
"check:closeout:truth:phase2": "node scripts/quality/check-closeout-truth.mjs phase2",
"check:closeout:truth:phase3": "node scripts/quality/check-closeout-truth.mjs phase3",
"check:closeout:truth:phase4": "node scripts/quality/check-closeout-truth.mjs phase4",
"check:closeout:truth:phase5": "node scripts/quality/check-closeout-truth.mjs phase5",
"check:closeout:truth:final": "node scripts/quality/check-closeout-truth.mjs final",
"check:closeout:evidence:freshness": "node scripts/quality/check-closeout-evidence-freshness.mjs",
"benchmark:agent:mixed-round1": "node scripts/benchmark/run-friday-openclaw-benchmark.mjs --repeats 1",
"benchmark:agent:mixed-round1:full": "node scripts/benchmark/run-friday-openclaw-benchmark.mjs --repeats 3",
"benchmark:agent:promoted-gaps": "node scripts/benchmark/run-friday-openclaw-benchmark.mjs --repeats 1 --cases dialog-risk-boundary-reset,dialog-expectation-boundary-autonomy,doing-continue-with-blocker,troubleshoot-high-risk-approval-boundary",
"validate:real-world:catalog": "node scripts/validation/run-real-world-validation.mjs --catalog-only",
"validate:real-world:smoke": "node scripts/validation/run-real-world-validation.mjs --suite smoke",
"validate:real-world:daily": "node scripts/validation/run-real-world-validation.mjs --suite daily",
"validate:real-world:nightly": "node scripts/validation/run-real-world-validation.mjs --suite nightly",
"validate:real-world:weekly": "node scripts/validation/run-real-world-validation.mjs --suite weekly",
"release:manifest": "node scripts/ops/write-friday-release-manifest.mjs",
"verify:companion:native": "bash scripts/ops/verify-friday-companion-app.sh",
"release:companion:local": "bash scripts/ops/release-friday-companion-app.sh",
"release:companion:notarize": "FRIDAY_MACOS_RELEASE_MODE=notarize bash scripts/ops/release-friday-companion-app.sh",
"record:macos:beta-evidence": "bash scripts/ops/write-friday-macos-clean-machine-evidence.sh",
"smoke:macos:beta": "bash scripts/ops/run-friday-macos-beta-smoke.sh",
"closeout:phase1": "node scripts/quality/run-closeout-phase.mjs phase1",
"closeout:phase2": "node scripts/quality/run-closeout-phase.mjs phase2",
"closeout:phase3": "node scripts/quality/run-closeout-phase.mjs phase3",
"closeout:phase4": "node scripts/quality/run-closeout-phase.mjs phase4",
"closeout:phase5": "node scripts/quality/run-closeout-phase.mjs phase5",
"closeout:final": "node scripts/quality/run-closeout-final.mjs",
"qa:friday-static:polish": "node scripts/qa/run-friday-static-polish.mjs",
"release:verify:repo": "npm run typecheck && npm run lint && npm run build && npm test && npm run test:e2e:browser-mock-hub && npm run test:integration:agent-parity && npm run check:all && npm run check:secret-patterns && npm run test:install:smoke && npm run release:check",
"release:verify": "npm run release:proof:real",
"release:proof:real": "npm run ops:real-green-gate && npm run check:proof:no-mock-leaks && npm run audit:release-truth",
"ui:dev": "vite --config ui/vite.config.ts",
"ui:preview": "vite preview --config ui/vite.config.ts"
},
"dependencies": {
"@fontsource/jetbrains-mono": "^5.2.8",
"@fontsource/noto-serif-sc": "^5.2.9",
"@larksuiteoapi/node-sdk": "^1.62.0",
"@mozilla/readability": "^0.6.0",
"@simplewebauthn/browser": "^13.2.2",
"@simplewebauthn/server": "^13.2.3",
"ajv": "^8.18.0",
"better-sqlite3": "^12.6.2",
"chokidar": "^5.0.0",
"cron-parser": "^5.5.0",
"eventsource-parser": "^3.0.6",
"json5": "^2.2.3",
"linkedom": "^0.18.12",
"pdfjs-dist": "^5.6.205",
"playwright": "^1.58.2",
"qrcode": "^1.5.4",
"semver": "^7.7.4",
"yaml": "^2.8.2",
"zod": "^4.3.6"
},
"devDependencies": {
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-separator": "^1.1.8",
"@radix-ui/react-slot": "^1.2.4",
"@tailwindcss/postcss": "^4.2.0",
"@tailwindcss/vite": "^4.2.0",
"@tanstack/react-query": "^5.90.21",
"@types/better-sqlite3": "^7.6.13",
"@types/dagre": "^0.7.54",
"@types/node": "^25.2.3",
"@types/qrcode": "^1.5.6",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/semver": "^7.7.1",
"@typescript-eslint/eslint-plugin": "^8.56.0",
"@typescript-eslint/parser": "^8.56.0",
"@vitejs/plugin-react": "^5.1.4",
"@vitest/coverage-v8": "^4.0.18",
"@xyflow/react": "^12.8.2",
"autoprefixer": "^10.4.24",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"dagre": "^0.8.5",
"eslint": "^10.0.0",
"eslint-plugin-security": "^4.0.0",
"fast-check": "^4.6.0",
"lucide-react": "^0.575.0",
"postcss": "^8.5.10",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router-dom": "^7.13.0",
"shadcn": "^3.8.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tailwindcss": "^4.2.0",
"tailwindcss-animate": "^1.0.7",
"typescript": "^5.9.3",
"vite": "^7.3.1",
"vitest": "^4.0.18"
},
"overrides": {
"axios": "^1.15.2"
},
"imports": {
"#utilities": "./dist/utilities/index.js",
"#api": "./dist/api/index.js",
"#config": "./dist/config/index.js",
"#errors": "./dist/errors/index.js",
"#hub": "./dist/hub/index.js",
"#jobs": "./dist/jobs/index.js",
"#learning": "./dist/learning/index.js",
"#ledger": "./dist/ledger/index.js",
"#satellites": "./dist/satellites/index.js",
"#skills": "./dist/skills/index.js",
"#skills/converter": "./dist/skills/converter/index.js",
"#skills/generator": "./dist/skills/generator/index.js",
"#skills/social-import": "./dist/skills/social-import/index.js",
"#state": "./dist/state/index.js",
"#memory": "./dist/memory/index.js",
"#sessions": "./dist/sessions/index.js",
"#providers": "./dist/providers/index.js",
"#workflows": "./dist/workflows/index.js",
"#plugins": "./dist/plugins/index.js",
"#agent": "./dist/agent/index.js",
"#engine": "./dist/engine/index.js",
"#browser": "./dist/browser/index.js",
"#channels": "./dist/channels/index.js",
"#cli": "./dist/cli/index.js",
"#cloud-workers": "./dist/cloud-workers/index.js",
"#xhs": "./dist/xhs/index.js",
"#rules": "./dist/rules/index.js",
"#node-runner": "./dist/node-runner/index.js",
"#acceptance": "./dist/acceptance/index.js",
"#retry": "./dist/retry/index.js",
"#playbook": "./dist/playbook/index.js",
"#harness": "./dist/harness/index.js",
"#daemon": "./dist/daemon/index.js",
"#tui": "./dist/tui/index.js",
"#media-understanding": "./dist/media-understanding/index.js",
"#link-understanding": "./dist/link-understanding/index.js",
"#heartbeat": "./dist/heartbeat/index.js"
}
}