@ai-studio-3d/vyasa 0.1.0
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/README.md +69 -0
- package/data/common-kit.json +34 -0
- package/data/pricing.json +119 -0
- package/data/schema/AnalyticsData.json +214 -0
- package/data/schema/FoundationData.json +42 -0
- package/data/schema/KitData.json +321 -0
- package/data/schema/SearchData.json +173 -0
- package/data/schema/SessionDetailData.json +231 -0
- package/data/schema/SessionsListData.json +115 -0
- package/data/schema/WasteData.json +95 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +343 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/billing/index.d.ts +4 -0
- package/dist/core/billing/index.d.ts.map +1 -0
- package/dist/core/billing/index.js +43 -0
- package/dist/core/billing/index.js.map +1 -0
- package/dist/core/budget/index.d.ts +30 -0
- package/dist/core/budget/index.d.ts.map +1 -0
- package/dist/core/budget/index.js +61 -0
- package/dist/core/budget/index.js.map +1 -0
- package/dist/core/codex/index.d.ts +3 -0
- package/dist/core/codex/index.d.ts.map +1 -0
- package/dist/core/codex/index.js +212 -0
- package/dist/core/codex/index.js.map +1 -0
- package/dist/core/cursor/index.d.ts +3 -0
- package/dist/core/cursor/index.d.ts.map +1 -0
- package/dist/core/cursor/index.js +304 -0
- package/dist/core/cursor/index.js.map +1 -0
- package/dist/core/cursor/scan.d.ts +28 -0
- package/dist/core/cursor/scan.d.ts.map +1 -0
- package/dist/core/cursor/scan.js +79 -0
- package/dist/core/cursor/scan.js.map +1 -0
- package/dist/core/decisions/index.d.ts +21 -0
- package/dist/core/decisions/index.d.ts.map +1 -0
- package/dist/core/decisions/index.js +133 -0
- package/dist/core/decisions/index.js.map +1 -0
- package/dist/core/dlp/index.d.ts +7 -0
- package/dist/core/dlp/index.d.ts.map +1 -0
- package/dist/core/dlp/index.js +115 -0
- package/dist/core/dlp/index.js.map +1 -0
- package/dist/core/health/index.d.ts +10 -0
- package/dist/core/health/index.d.ts.map +1 -0
- package/dist/core/health/index.js +21 -0
- package/dist/core/health/index.js.map +1 -0
- package/dist/core/index/index.d.ts +9 -0
- package/dist/core/index/index.d.ts.map +1 -0
- package/dist/core/index/index.js +103 -0
- package/dist/core/index/index.js.map +1 -0
- package/dist/core/index/ingest.d.ts +16 -0
- package/dist/core/index/ingest.d.ts.map +1 -0
- package/dist/core/index/ingest.js +184 -0
- package/dist/core/index/ingest.js.map +1 -0
- package/dist/core/index/platforms.d.ts +21 -0
- package/dist/core/index/platforms.d.ts.map +1 -0
- package/dist/core/index/platforms.js +44 -0
- package/dist/core/index/platforms.js.map +1 -0
- package/dist/core/index/pricing-map.d.ts +10 -0
- package/dist/core/index/pricing-map.d.ts.map +1 -0
- package/dist/core/index/pricing-map.js +16 -0
- package/dist/core/index/pricing-map.js.map +1 -0
- package/dist/core/index/progress.d.ts +26 -0
- package/dist/core/index/progress.d.ts.map +1 -0
- package/dist/core/index/progress.js +59 -0
- package/dist/core/index/progress.js.map +1 -0
- package/dist/core/index/scan.d.ts +9 -0
- package/dist/core/index/scan.d.ts.map +1 -0
- package/dist/core/index/scan.js +42 -0
- package/dist/core/index/scan.js.map +1 -0
- package/dist/core/index/statements.d.ts +18 -0
- package/dist/core/index/statements.d.ts.map +1 -0
- package/dist/core/index/statements.js +82 -0
- package/dist/core/index/statements.js.map +1 -0
- package/dist/core/index/tail.d.ts +42 -0
- package/dist/core/index/tail.d.ts.map +1 -0
- package/dist/core/index/tail.js +123 -0
- package/dist/core/index/tail.js.map +1 -0
- package/dist/core/jsonl/index.d.ts +3 -0
- package/dist/core/jsonl/index.d.ts.map +1 -0
- package/dist/core/jsonl/index.js +106 -0
- package/dist/core/jsonl/index.js.map +1 -0
- package/dist/core/jsonl-validate/index.d.ts +10 -0
- package/dist/core/jsonl-validate/index.d.ts.map +1 -0
- package/dist/core/jsonl-validate/index.js +40 -0
- package/dist/core/jsonl-validate/index.js.map +1 -0
- package/dist/core/kit/detection.d.ts +94 -0
- package/dist/core/kit/detection.d.ts.map +1 -0
- package/dist/core/kit/detection.js +312 -0
- package/dist/core/kit/detection.js.map +1 -0
- package/dist/core/kit/index.d.ts +12 -0
- package/dist/core/kit/index.d.ts.map +1 -0
- package/dist/core/kit/index.js +131 -0
- package/dist/core/kit/index.js.map +1 -0
- package/dist/core/kit/scan.d.ts +28 -0
- package/dist/core/kit/scan.d.ts.map +1 -0
- package/dist/core/kit/scan.js +432 -0
- package/dist/core/kit/scan.js.map +1 -0
- package/dist/core/recap/index.d.ts +18 -0
- package/dist/core/recap/index.d.ts.map +1 -0
- package/dist/core/recap/index.js +88 -0
- package/dist/core/recap/index.js.map +1 -0
- package/dist/core/repetition/index.d.ts +5 -0
- package/dist/core/repetition/index.d.ts.map +1 -0
- package/dist/core/repetition/index.js +0 -0
- package/dist/core/repetition/index.js.map +1 -0
- package/dist/core/schema/index.d.ts +514 -0
- package/dist/core/schema/index.d.ts.map +1 -0
- package/dist/core/schema/index.js +2 -0
- package/dist/core/schema/index.js.map +1 -0
- package/dist/core/schema-watch/index.d.ts +34 -0
- package/dist/core/schema-watch/index.d.ts.map +1 -0
- package/dist/core/schema-watch/index.js +87 -0
- package/dist/core/schema-watch/index.js.map +1 -0
- package/dist/core/search/index.d.ts +44 -0
- package/dist/core/search/index.d.ts.map +1 -0
- package/dist/core/search/index.js +641 -0
- package/dist/core/search/index.js.map +1 -0
- package/dist/core/settings/index.d.ts +24 -0
- package/dist/core/settings/index.d.ts.map +1 -0
- package/dist/core/settings/index.js +76 -0
- package/dist/core/settings/index.js.map +1 -0
- package/dist/core/share/bundle.d.ts +40 -0
- package/dist/core/share/bundle.d.ts.map +1 -0
- package/dist/core/share/bundle.js +158 -0
- package/dist/core/share/bundle.js.map +1 -0
- package/dist/core/share/canonical/from-claude.d.ts +13 -0
- package/dist/core/share/canonical/from-claude.d.ts.map +1 -0
- package/dist/core/share/canonical/from-claude.js +129 -0
- package/dist/core/share/canonical/from-claude.js.map +1 -0
- package/dist/core/share/canonical/from-codex.d.ts +18 -0
- package/dist/core/share/canonical/from-codex.d.ts.map +1 -0
- package/dist/core/share/canonical/from-codex.js +183 -0
- package/dist/core/share/canonical/from-codex.js.map +1 -0
- package/dist/core/share/canonical/to-claude.d.ts +15 -0
- package/dist/core/share/canonical/to-claude.d.ts.map +1 -0
- package/dist/core/share/canonical/to-claude.js +146 -0
- package/dist/core/share/canonical/to-claude.js.map +1 -0
- package/dist/core/share/canonical/to-codex.d.ts +21 -0
- package/dist/core/share/canonical/to-codex.d.ts.map +1 -0
- package/dist/core/share/canonical/to-codex.js +124 -0
- package/dist/core/share/canonical/to-codex.js.map +1 -0
- package/dist/core/share/canonical/tool-map.d.ts +61 -0
- package/dist/core/share/canonical/tool-map.d.ts.map +1 -0
- package/dist/core/share/canonical/tool-map.js +299 -0
- package/dist/core/share/canonical/tool-map.js.map +1 -0
- package/dist/core/share/canonical/types.d.ts +57 -0
- package/dist/core/share/canonical/types.d.ts.map +1 -0
- package/dist/core/share/canonical/types.js +9 -0
- package/dist/core/share/canonical/types.js.map +1 -0
- package/dist/core/share/import.d.ts +28 -0
- package/dist/core/share/import.d.ts.map +1 -0
- package/dist/core/share/import.js +174 -0
- package/dist/core/share/import.js.map +1 -0
- package/dist/core/share/manifest.d.ts +37 -0
- package/dist/core/share/manifest.d.ts.map +1 -0
- package/dist/core/share/manifest.js +31 -0
- package/dist/core/share/manifest.js.map +1 -0
- package/dist/core/share/preview.d.ts +4 -0
- package/dist/core/share/preview.d.ts.map +1 -0
- package/dist/core/share/preview.js +153 -0
- package/dist/core/share/preview.js.map +1 -0
- package/dist/core/share/primer.d.ts +19 -0
- package/dist/core/share/primer.d.ts.map +1 -0
- package/dist/core/share/primer.js +196 -0
- package/dist/core/share/primer.js.map +1 -0
- package/dist/core/share/resume.d.ts +10 -0
- package/dist/core/share/resume.d.ts.map +1 -0
- package/dist/core/share/resume.js +58 -0
- package/dist/core/share/resume.js.map +1 -0
- package/dist/core/share/scrub.d.ts +10 -0
- package/dist/core/share/scrub.d.ts.map +1 -0
- package/dist/core/share/scrub.js +198 -0
- package/dist/core/share/scrub.js.map +1 -0
- package/dist/core/share/tar.d.ts +12 -0
- package/dist/core/share/tar.d.ts.map +1 -0
- package/dist/core/share/tar.js +78 -0
- package/dist/core/share/tar.js.map +1 -0
- package/dist/core/tags/index.d.ts +48 -0
- package/dist/core/tags/index.d.ts.map +1 -0
- package/dist/core/tags/index.js +113 -0
- package/dist/core/tags/index.js.map +1 -0
- package/dist/core/today/index.d.ts +25 -0
- package/dist/core/today/index.d.ts.map +1 -0
- package/dist/core/today/index.js +42 -0
- package/dist/core/today/index.js.map +1 -0
- package/dist/core/waste/abandoned.d.ts +12 -0
- package/dist/core/waste/abandoned.d.ts.map +1 -0
- package/dist/core/waste/abandoned.js +127 -0
- package/dist/core/waste/abandoned.js.map +1 -0
- package/dist/core/waste/cache-miss.d.ts +9 -0
- package/dist/core/waste/cache-miss.d.ts.map +1 -0
- package/dist/core/waste/cache-miss.js +84 -0
- package/dist/core/waste/cache-miss.js.map +1 -0
- package/dist/core/waste/index.d.ts +12 -0
- package/dist/core/waste/index.d.ts.map +1 -0
- package/dist/core/waste/index.js +45 -0
- package/dist/core/waste/index.js.map +1 -0
- package/dist/core/waste/wrong-model.d.ts +11 -0
- package/dist/core/waste/wrong-model.d.ts.map +1 -0
- package/dist/core/waste/wrong-model.js +104 -0
- package/dist/core/waste/wrong-model.js.map +1 -0
- package/dist/db/index.d.ts +10 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +29 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +8 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +282 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/server/events.d.ts +4 -0
- package/dist/server/events.d.ts.map +1 -0
- package/dist/server/events.js +54 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +238 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes/foundation.d.ts +2 -0
- package/dist/server/routes/foundation.d.ts.map +1 -0
- package/dist/server/routes/foundation.js +2 -0
- package/dist/server/routes/foundation.js.map +1 -0
- package/dist/server/routes/search.d.ts +2 -0
- package/dist/server/routes/search.d.ts.map +1 -0
- package/dist/server/routes/search.js +2 -0
- package/dist/server/routes/search.js.map +1 -0
- package/dist/server/routes/sessions.d.ts +2 -0
- package/dist/server/routes/sessions.d.ts.map +1 -0
- package/dist/server/routes/sessions.js +2 -0
- package/dist/server/routes/sessions.js.map +1 -0
- package/dist/server/routes/waste.d.ts +2 -0
- package/dist/server/routes/waste.d.ts.map +1 -0
- package/dist/server/routes/waste.js +2 -0
- package/dist/server/routes/waste.js.map +1 -0
- package/dist/web/assets/index-Ba1VvTj0.js +37 -0
- package/dist/web/index.html +12 -0
- package/package.json +76 -0
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# vyasa
|
|
2
|
+
|
|
3
|
+
Local analytics dashboard for AI coding agent sessions — waste detection, full-text search, session replay, and cross-machine session transport. Supports Claude Code and Codex.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx vyasa
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g vyasa
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
vyasa # Index ~/.claude/projects + ~/.codex/sessions, open dashboard
|
|
21
|
+
vyasa --rebuild # Force full re-index before starting
|
|
22
|
+
vyasa import <file> # Import a .vyasa bundle from another machine
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Importing a session bundle
|
|
26
|
+
|
|
27
|
+
If a teammate sent you a `.vyasa` file (or you exported one from another machine):
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx vyasa import session.vyasa # same-platform resume
|
|
31
|
+
npx vyasa import session.vyasa --to=codex # translate Claude → Codex
|
|
32
|
+
npx vyasa import session.vyasa --to=claude-code # translate Codex → Claude
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
This places the JSONL in your local agent's storage (`~/.claude/projects/...` or `~/.codex/sessions/...`) and offers to resume it natively. Flags:
|
|
36
|
+
|
|
37
|
+
- `--to=<platform>` — translate the session into the target platform's JSONL format before placement. Accepts `claude-code` or `codex`. Tool calls are translated where they map cleanly (Bash↔exec_command exact, Write/Edit↔apply_patch best-effort, unknown tools wrapped as no-op shell-echoes that preserve the original metadata). Thinking blocks (Claude) and reasoning items (Codex) are dropped — they don't translate.
|
|
38
|
+
- `--yes` / `-y` — skip the resume prompt and resume immediately if the agent CLI is on PATH.
|
|
39
|
+
- `--no-resume` — place the file but don't offer to resume.
|
|
40
|
+
|
|
41
|
+
### Exporting / sharing a session
|
|
42
|
+
|
|
43
|
+
In the dashboard, open any session in Replay. Two buttons in the header:
|
|
44
|
+
|
|
45
|
+
- **Hand off ↗** — downloads a `.vyasa` bundle. Recipient runs `npx vyasa import` (optionally `--to=<other-platform>` to translate) and resumes natively in their CLI.
|
|
46
|
+
- **Continue elsewhere ⎘** — copies a primer prompt to your clipboard. Paste into any other agent (Codex, Cursor, ChatGPT, OpenCode, …) to warm-start with prior context. Lossy in a different way than `--to`: no tool-call transcript appears in the receiving CLI's UI, but the receiving agent gets a clean text summary.
|
|
47
|
+
|
|
48
|
+
### `.vyasa` bundle format
|
|
49
|
+
|
|
50
|
+
Gzipped tar with three entries:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
manifest.json metadata: platform, sessionId, projectDir, originalPath, jsonlSizeBytes, exportedAt, …
|
|
54
|
+
session.jsonl verbatim copy of the source JSONL
|
|
55
|
+
README.md one-line install instructions for the recipient
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Power users can `tar -xzf foo.vyasa` and place files manually if they prefer not to install vyasa.
|
|
59
|
+
|
|
60
|
+
## Requirements
|
|
61
|
+
|
|
62
|
+
- Node.js >= 20
|
|
63
|
+
- Claude Code with sessions in `~/.claude/projects/`, or Codex with sessions in `~/.codex/sessions/`
|
|
64
|
+
|
|
65
|
+
## Known limitations
|
|
66
|
+
|
|
67
|
+
- **Subagent sessions** (when the same `sessionId` appears in multiple JSONL files under one parent session directory) collapse into a single row in the local DB; the exported bundle uses whichever file was ingested last. Resume still works because the recipient's CLI re-discovers the parent session from the file location.
|
|
68
|
+
- The recipient's Claude Code shows imported sessions under the sender's encoded project directory name (which is the sender's absolute project path). This is functional but visually foreign on the recipient side.
|
|
69
|
+
- The primer prompt (cross-tool warm-start) is intentionally lossy — it summarizes recent turns but does not carry the agent's internal state, prompt cache, or full tool-call output history.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"skills": [
|
|
4
|
+
{
|
|
5
|
+
"id": "code-reviewer",
|
|
6
|
+
"purpose": "Code review tasks",
|
|
7
|
+
"install": "Add to ~/.claude/skills/code-reviewer/SKILL.md"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"id": "security-audit",
|
|
11
|
+
"purpose": "Security review of code/configs",
|
|
12
|
+
"install": "Add to ~/.claude/skills/security-audit/SKILL.md"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"id": "commit-message-writer",
|
|
16
|
+
"purpose": "Generate conventional commit messages",
|
|
17
|
+
"install": "Add to ~/.claude/skills/commit-message-writer/SKILL.md"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"mcpServers": [
|
|
21
|
+
{
|
|
22
|
+
"id": "github",
|
|
23
|
+
"purpose": "GitHub PR / issue / repo operations natively",
|
|
24
|
+
"install": "claude mcp add github",
|
|
25
|
+
"replaces": ["Bash:gh "]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "context7",
|
|
29
|
+
"purpose": "Pull up-to-date library docs without manual WebFetch",
|
|
30
|
+
"install": "claude mcp add context7",
|
|
31
|
+
"replaces": ["WebFetch:react.dev", "WebFetch:vercel.com/docs", "WebFetch:nextjs.org/docs"]
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"model": "claude-opus-4-7",
|
|
4
|
+
"period_start": "2025-10-01",
|
|
5
|
+
"period_end": null,
|
|
6
|
+
"input_per_mtok": 15.00,
|
|
7
|
+
"output_per_mtok": 75.00,
|
|
8
|
+
"cache_write_per_mtok": 18.75,
|
|
9
|
+
"cache_read_per_mtok": 1.50
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"model": "claude-sonnet-4-6",
|
|
13
|
+
"period_start": "2025-10-01",
|
|
14
|
+
"period_end": null,
|
|
15
|
+
"input_per_mtok": 3.00,
|
|
16
|
+
"output_per_mtok": 15.00,
|
|
17
|
+
"cache_write_per_mtok": 3.75,
|
|
18
|
+
"cache_read_per_mtok": 0.30
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"model": "claude-haiku-4-5",
|
|
22
|
+
"period_start": "2025-10-01",
|
|
23
|
+
"period_end": null,
|
|
24
|
+
"input_per_mtok": 0.80,
|
|
25
|
+
"output_per_mtok": 4.00,
|
|
26
|
+
"cache_write_per_mtok": 1.00,
|
|
27
|
+
"cache_read_per_mtok": 0.08
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"model": "claude-haiku-4-5-20251001",
|
|
31
|
+
"period_start": "2025-10-01",
|
|
32
|
+
"period_end": null,
|
|
33
|
+
"input_per_mtok": 0.80,
|
|
34
|
+
"output_per_mtok": 4.00,
|
|
35
|
+
"cache_write_per_mtok": 1.00,
|
|
36
|
+
"cache_read_per_mtok": 0.08
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"model": "claude-sonnet-4-5",
|
|
40
|
+
"period_start": "2025-07-01",
|
|
41
|
+
"period_end": null,
|
|
42
|
+
"input_per_mtok": 3.00,
|
|
43
|
+
"output_per_mtok": 15.00,
|
|
44
|
+
"cache_write_per_mtok": 3.75,
|
|
45
|
+
"cache_read_per_mtok": 0.30
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"model": "gpt-5.5",
|
|
49
|
+
"period_start": "2026-04-24",
|
|
50
|
+
"period_end": null,
|
|
51
|
+
"input_per_mtok": 5.00,
|
|
52
|
+
"output_per_mtok": 30.00,
|
|
53
|
+
"cache_write_per_mtok": 0,
|
|
54
|
+
"cache_read_per_mtok": 1.25
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"model": "gpt-5",
|
|
58
|
+
"period_start": "2026-01-01",
|
|
59
|
+
"period_end": null,
|
|
60
|
+
"input_per_mtok": 1.25,
|
|
61
|
+
"output_per_mtok": 10.00,
|
|
62
|
+
"cache_write_per_mtok": 0,
|
|
63
|
+
"cache_read_per_mtok": 0.125
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"model": "gpt-5-mini",
|
|
67
|
+
"period_start": "2026-01-01",
|
|
68
|
+
"period_end": null,
|
|
69
|
+
"input_per_mtok": 0.25,
|
|
70
|
+
"output_per_mtok": 2.00,
|
|
71
|
+
"cache_write_per_mtok": 0,
|
|
72
|
+
"cache_read_per_mtok": 0.025
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"model": "o3",
|
|
76
|
+
"period_start": "2026-01-01",
|
|
77
|
+
"period_end": null,
|
|
78
|
+
"input_per_mtok": 2.00,
|
|
79
|
+
"output_per_mtok": 8.00,
|
|
80
|
+
"cache_write_per_mtok": 0,
|
|
81
|
+
"cache_read_per_mtok": 0.50
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"model": "o4-mini",
|
|
85
|
+
"period_start": "2026-01-01",
|
|
86
|
+
"period_end": null,
|
|
87
|
+
"input_per_mtok": 1.10,
|
|
88
|
+
"output_per_mtok": 4.40,
|
|
89
|
+
"cache_write_per_mtok": 0,
|
|
90
|
+
"cache_read_per_mtok": 0.275
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"model": "gpt-4.1",
|
|
94
|
+
"period_start": "2026-01-01",
|
|
95
|
+
"period_end": null,
|
|
96
|
+
"input_per_mtok": 2.00,
|
|
97
|
+
"output_per_mtok": 8.00,
|
|
98
|
+
"cache_write_per_mtok": 0,
|
|
99
|
+
"cache_read_per_mtok": 0.50
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"model": "gpt-4.1-mini",
|
|
103
|
+
"period_start": "2026-01-01",
|
|
104
|
+
"period_end": null,
|
|
105
|
+
"input_per_mtok": 0.40,
|
|
106
|
+
"output_per_mtok": 1.60,
|
|
107
|
+
"cache_write_per_mtok": 0,
|
|
108
|
+
"cache_read_per_mtok": 0.10
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"model": "gpt-4.1-nano",
|
|
112
|
+
"period_start": "2026-01-01",
|
|
113
|
+
"period_end": null,
|
|
114
|
+
"input_per_mtok": 0.10,
|
|
115
|
+
"output_per_mtok": 0.40,
|
|
116
|
+
"cache_write_per_mtok": 0,
|
|
117
|
+
"cache_read_per_mtok": 0.025
|
|
118
|
+
}
|
|
119
|
+
]
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$ref": "#/definitions/AnalyticsData",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"definitions": {
|
|
5
|
+
"ActivityCell": {
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"dayOfWeek": {
|
|
9
|
+
"type": "number"
|
|
10
|
+
},
|
|
11
|
+
"errorCount": {
|
|
12
|
+
"description": "Error tool-calls in this bucket — drives \"depth\"/run-health tint.",
|
|
13
|
+
"type": "number"
|
|
14
|
+
},
|
|
15
|
+
"hour": {
|
|
16
|
+
"type": "number"
|
|
17
|
+
},
|
|
18
|
+
"sessionCount": {
|
|
19
|
+
"type": "number"
|
|
20
|
+
},
|
|
21
|
+
"tokens": {
|
|
22
|
+
"type": "number"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"required": [
|
|
26
|
+
"dayOfWeek",
|
|
27
|
+
"hour",
|
|
28
|
+
"sessionCount",
|
|
29
|
+
"tokens",
|
|
30
|
+
"errorCount"
|
|
31
|
+
],
|
|
32
|
+
"type": "object"
|
|
33
|
+
},
|
|
34
|
+
"ActivityClock": {
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"properties": {
|
|
37
|
+
"cells": {
|
|
38
|
+
"description": "7×24 grid of buckets (index = dayOfWeek*24 + hour). dayOfWeek: 0=Sun..6=Sat, hour: 0–23, both in the server's local timezone (where sessions were recorded).",
|
|
39
|
+
"items": {
|
|
40
|
+
"$ref": "#/definitions/ActivityCell"
|
|
41
|
+
},
|
|
42
|
+
"type": "array"
|
|
43
|
+
},
|
|
44
|
+
"maxSessions": {
|
|
45
|
+
"description": "Max sessionCount across all cells (for color-ramp normalization on the client).",
|
|
46
|
+
"type": "number"
|
|
47
|
+
},
|
|
48
|
+
"maxTokens": {
|
|
49
|
+
"description": "Max tokens across all cells.",
|
|
50
|
+
"type": "number"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"required": [
|
|
54
|
+
"cells",
|
|
55
|
+
"maxSessions",
|
|
56
|
+
"maxTokens"
|
|
57
|
+
],
|
|
58
|
+
"type": "object"
|
|
59
|
+
},
|
|
60
|
+
"AnalyticsData": {
|
|
61
|
+
"additionalProperties": false,
|
|
62
|
+
"properties": {
|
|
63
|
+
"activityClock": {
|
|
64
|
+
"$ref": "#/definitions/ActivityClock",
|
|
65
|
+
"description": "Day-of-week × hour activity grid — the work-rhythm \"flow map\"."
|
|
66
|
+
},
|
|
67
|
+
"dailyCost": {
|
|
68
|
+
"items": {
|
|
69
|
+
"additionalProperties": false,
|
|
70
|
+
"properties": {
|
|
71
|
+
"costCents": {
|
|
72
|
+
"type": "number"
|
|
73
|
+
},
|
|
74
|
+
"date": {
|
|
75
|
+
"type": "string"
|
|
76
|
+
},
|
|
77
|
+
"sessionCount": {
|
|
78
|
+
"type": "number"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"required": [
|
|
82
|
+
"date",
|
|
83
|
+
"costCents",
|
|
84
|
+
"sessionCount"
|
|
85
|
+
],
|
|
86
|
+
"type": "object"
|
|
87
|
+
},
|
|
88
|
+
"type": "array"
|
|
89
|
+
},
|
|
90
|
+
"dailyTokens": {
|
|
91
|
+
"description": "Per-day token totals, aligned to dailyCost dates (tokens read better than $ since most sessions show $0).",
|
|
92
|
+
"items": {
|
|
93
|
+
"additionalProperties": false,
|
|
94
|
+
"properties": {
|
|
95
|
+
"date": {
|
|
96
|
+
"type": "string"
|
|
97
|
+
},
|
|
98
|
+
"tokens": {
|
|
99
|
+
"type": "number"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"required": [
|
|
103
|
+
"date",
|
|
104
|
+
"tokens"
|
|
105
|
+
],
|
|
106
|
+
"type": "object"
|
|
107
|
+
},
|
|
108
|
+
"type": "array"
|
|
109
|
+
},
|
|
110
|
+
"modelCost": {
|
|
111
|
+
"items": {
|
|
112
|
+
"additionalProperties": false,
|
|
113
|
+
"properties": {
|
|
114
|
+
"costCents": {
|
|
115
|
+
"type": "number"
|
|
116
|
+
},
|
|
117
|
+
"model": {
|
|
118
|
+
"type": "string"
|
|
119
|
+
},
|
|
120
|
+
"outputTokens": {
|
|
121
|
+
"type": "number"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": [
|
|
125
|
+
"model",
|
|
126
|
+
"costCents",
|
|
127
|
+
"outputTokens"
|
|
128
|
+
],
|
|
129
|
+
"type": "object"
|
|
130
|
+
},
|
|
131
|
+
"type": "array"
|
|
132
|
+
},
|
|
133
|
+
"projectCost": {
|
|
134
|
+
"items": {
|
|
135
|
+
"additionalProperties": false,
|
|
136
|
+
"properties": {
|
|
137
|
+
"costCents": {
|
|
138
|
+
"type": "number"
|
|
139
|
+
},
|
|
140
|
+
"project": {
|
|
141
|
+
"type": "string"
|
|
142
|
+
},
|
|
143
|
+
"sessionCount": {
|
|
144
|
+
"type": "number"
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"required": [
|
|
148
|
+
"project",
|
|
149
|
+
"costCents",
|
|
150
|
+
"sessionCount"
|
|
151
|
+
],
|
|
152
|
+
"type": "object"
|
|
153
|
+
},
|
|
154
|
+
"type": "array"
|
|
155
|
+
},
|
|
156
|
+
"range": {
|
|
157
|
+
"$ref": "#/definitions/AnalyticsRange"
|
|
158
|
+
},
|
|
159
|
+
"summary": {
|
|
160
|
+
"$ref": "#/definitions/AnalyticsSummary",
|
|
161
|
+
"description": "Headline stats for the selected range."
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"required": [
|
|
165
|
+
"range",
|
|
166
|
+
"dailyCost",
|
|
167
|
+
"projectCost",
|
|
168
|
+
"modelCost",
|
|
169
|
+
"dailyTokens",
|
|
170
|
+
"summary",
|
|
171
|
+
"activityClock"
|
|
172
|
+
],
|
|
173
|
+
"type": "object"
|
|
174
|
+
},
|
|
175
|
+
"AnalyticsRange": {
|
|
176
|
+
"enum": [
|
|
177
|
+
"7d",
|
|
178
|
+
"30d",
|
|
179
|
+
"90d",
|
|
180
|
+
"all"
|
|
181
|
+
],
|
|
182
|
+
"type": "string"
|
|
183
|
+
},
|
|
184
|
+
"AnalyticsSummary": {
|
|
185
|
+
"additionalProperties": false,
|
|
186
|
+
"properties": {
|
|
187
|
+
"activeDays": {
|
|
188
|
+
"description": "Distinct calendar days with at least one session.",
|
|
189
|
+
"type": "number"
|
|
190
|
+
},
|
|
191
|
+
"busiestHour": {
|
|
192
|
+
"description": "Local hour 0–23 with the most sessions, or null if no data.",
|
|
193
|
+
"type": [
|
|
194
|
+
"number",
|
|
195
|
+
"null"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"totalSessions": {
|
|
199
|
+
"type": "number"
|
|
200
|
+
},
|
|
201
|
+
"totalTokens": {
|
|
202
|
+
"type": "number"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"required": [
|
|
206
|
+
"totalSessions",
|
|
207
|
+
"totalTokens",
|
|
208
|
+
"activeDays",
|
|
209
|
+
"busiestHour"
|
|
210
|
+
],
|
|
211
|
+
"type": "object"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$ref": "#/definitions/FoundationData",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"definitions": {
|
|
5
|
+
"FoundationData": {
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"cacheHitRateLast30Days": {
|
|
9
|
+
"type": "number"
|
|
10
|
+
},
|
|
11
|
+
"modelMix": {
|
|
12
|
+
"items": {
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"properties": {
|
|
15
|
+
"model": {
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
"pct": {
|
|
19
|
+
"type": "number"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": [
|
|
23
|
+
"model",
|
|
24
|
+
"pct"
|
|
25
|
+
],
|
|
26
|
+
"type": "object"
|
|
27
|
+
},
|
|
28
|
+
"type": "array"
|
|
29
|
+
},
|
|
30
|
+
"totalCostCentsThisWeek": {
|
|
31
|
+
"type": "number"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"required": [
|
|
35
|
+
"totalCostCentsThisWeek",
|
|
36
|
+
"cacheHitRateLast30Days",
|
|
37
|
+
"modelMix"
|
|
38
|
+
],
|
|
39
|
+
"type": "object"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|