heyiam 0.2.17 → 0.2.18
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/dist/analyzer.js +0 -1
- package/dist/archive.js +0 -1
- package/dist/auth.js +0 -1
- package/dist/autostart.js +0 -1
- package/dist/bridge.js +0 -1
- package/dist/config.js +0 -1
- package/dist/context-export.js +0 -1
- package/dist/daemon-install.js +0 -1
- package/dist/db.js +0 -1
- package/dist/demo-data.js +0 -1
- package/dist/demo-seed.js +0 -1
- package/dist/export.js +0 -1
- package/dist/format-utils.js +0 -1
- package/dist/index.js +0 -1
- package/dist/llm/anthropic-provider.js +0 -1
- package/dist/llm/index.js +0 -1
- package/dist/llm/project-enhance.js +0 -1
- package/dist/llm/proxy-provider.js +0 -1
- package/dist/llm/triage.js +0 -1
- package/dist/llm/types.js +0 -1
- package/dist/parsers/claude.js +0 -1
- package/dist/parsers/codex.js +0 -1
- package/dist/parsers/cursor.js +0 -1
- package/dist/parsers/gemini.js +0 -1
- package/dist/parsers/index.js +0 -1
- package/dist/parsers/types.js +0 -1
- package/dist/redact.js +0 -1
- package/dist/render/build-render-data.js +0 -1
- package/dist/render/index.js +0 -1
- package/dist/render/liquid.js +0 -1
- package/dist/render/templates/project.liquid +28 -14
- package/dist/render/templates/styles.css +31 -1
- package/dist/render/types.js +0 -1
- package/dist/routes/archive.js +0 -1
- package/dist/routes/auth.js +0 -1
- package/dist/routes/context.js +0 -1
- package/dist/routes/dashboard.js +0 -1
- package/dist/routes/enhance.js +0 -1
- package/dist/routes/export.js +0 -1
- package/dist/routes/index.js +0 -1
- package/dist/routes/preview.js +0 -1
- package/dist/routes/projects.js +0 -1
- package/dist/routes/publish.js +4 -2
- package/dist/routes/search.js +0 -1
- package/dist/routes/sessions.js +0 -1
- package/dist/routes/settings.js +0 -1
- package/dist/screenshot.js +0 -1
- package/dist/search.js +0 -1
- package/dist/server.js +2 -2
- package/dist/settings.js +0 -1
- package/dist/source-audit.js +0 -1
- package/dist/summarize.js +0 -1
- package/dist/sync.js +0 -1
- package/dist/transcript.js +0 -1
- package/package.json +6 -3
- package/dist/analyzer.d.ts +0 -123
- package/dist/analyzer.js.map +0 -1
- package/dist/archive.d.ts +0 -14
- package/dist/archive.js.map +0 -1
- package/dist/auth.d.ts +0 -28
- package/dist/auth.js.map +0 -1
- package/dist/autostart.d.ts +0 -19
- package/dist/autostart.js.map +0 -1
- package/dist/bridge.d.ts +0 -58
- package/dist/bridge.js.map +0 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.js.map +0 -1
- package/dist/context-export.d.ts +0 -28
- package/dist/context-export.js.map +0 -1
- package/dist/daemon-install.d.ts +0 -23
- package/dist/daemon-install.js.map +0 -1
- package/dist/db.d.ts +0 -126
- package/dist/db.js.map +0 -1
- package/dist/demo-data.d.ts +0 -95
- package/dist/demo-data.js.map +0 -1
- package/dist/demo-seed.d.ts +0 -17
- package/dist/demo-seed.js.map +0 -1
- package/dist/export.d.ts +0 -34
- package/dist/export.js.map +0 -1
- package/dist/format-utils.d.ts +0 -6
- package/dist/format-utils.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js.map +0 -1
- package/dist/llm/anthropic-provider.d.ts +0 -11
- package/dist/llm/anthropic-provider.js.map +0 -1
- package/dist/llm/index.d.ts +0 -16
- package/dist/llm/index.js.map +0 -1
- package/dist/llm/project-enhance.d.ts +0 -72
- package/dist/llm/project-enhance.js.map +0 -1
- package/dist/llm/proxy-provider.d.ts +0 -16
- package/dist/llm/proxy-provider.js.map +0 -1
- package/dist/llm/triage.d.ts +0 -67
- package/dist/llm/triage.js.map +0 -1
- package/dist/llm/types.d.ts +0 -19
- package/dist/llm/types.js.map +0 -1
- package/dist/parsers/claude.d.ts +0 -18
- package/dist/parsers/claude.js.map +0 -1
- package/dist/parsers/codex.d.ts +0 -8
- package/dist/parsers/codex.js.map +0 -1
- package/dist/parsers/cursor.d.ts +0 -91
- package/dist/parsers/cursor.js.map +0 -1
- package/dist/parsers/gemini.d.ts +0 -29
- package/dist/parsers/gemini.js.map +0 -1
- package/dist/parsers/index.d.ts +0 -49
- package/dist/parsers/index.js.map +0 -1
- package/dist/parsers/types.d.ts +0 -123
- package/dist/parsers/types.js.map +0 -1
- package/dist/redact.d.ts +0 -31
- package/dist/redact.js.map +0 -1
- package/dist/render/build-render-data.d.ts +0 -60
- package/dist/render/build-render-data.js.map +0 -1
- package/dist/render/index.d.ts +0 -37
- package/dist/render/index.js.map +0 -1
- package/dist/render/liquid.d.ts +0 -19
- package/dist/render/liquid.js.map +0 -1
- package/dist/render/templates/templates/project.liquid +0 -225
- package/dist/render/templates/templates/session.liquid +0 -158
- package/dist/render/templates/templates/styles.css +0 -599
- package/dist/render/types.d.ts +0 -122
- package/dist/render/types.js.map +0 -1
- package/dist/routes/archive.d.ts +0 -3
- package/dist/routes/archive.js.map +0 -1
- package/dist/routes/auth.d.ts +0 -3
- package/dist/routes/auth.js.map +0 -1
- package/dist/routes/context.d.ts +0 -76
- package/dist/routes/context.js.map +0 -1
- package/dist/routes/dashboard.d.ts +0 -3
- package/dist/routes/dashboard.js.map +0 -1
- package/dist/routes/enhance.d.ts +0 -3
- package/dist/routes/enhance.js.map +0 -1
- package/dist/routes/export.d.ts +0 -3
- package/dist/routes/export.js.map +0 -1
- package/dist/routes/index.d.ts +0 -12
- package/dist/routes/index.js.map +0 -1
- package/dist/routes/preview.d.ts +0 -3
- package/dist/routes/preview.js.map +0 -1
- package/dist/routes/projects.d.ts +0 -3
- package/dist/routes/projects.js.map +0 -1
- package/dist/routes/publish.d.ts +0 -3
- package/dist/routes/publish.js.map +0 -1
- package/dist/routes/search.d.ts +0 -3
- package/dist/routes/search.js.map +0 -1
- package/dist/routes/sessions.d.ts +0 -3
- package/dist/routes/sessions.js.map +0 -1
- package/dist/routes/settings.d.ts +0 -3
- package/dist/routes/settings.js.map +0 -1
- package/dist/screenshot.d.ts +0 -13
- package/dist/screenshot.js.map +0 -1
- package/dist/search.d.ts +0 -30
- package/dist/search.js.map +0 -1
- package/dist/server.d.ts +0 -14
- package/dist/server.js.map +0 -1
- package/dist/settings.d.ts +0 -109
- package/dist/settings.js.map +0 -1
- package/dist/source-audit.d.ts +0 -29
- package/dist/source-audit.js.map +0 -1
- package/dist/summarize.d.ts +0 -65
- package/dist/summarize.js.map +0 -1
- package/dist/sync.d.ts +0 -78
- package/dist/sync.js.map +0 -1
- package/dist/transcript.d.ts +0 -68
- package/dist/transcript.js.map +0 -1
package/dist/analyzer.js
CHANGED
package/dist/archive.js
CHANGED
package/dist/auth.js
CHANGED
package/dist/autostart.js
CHANGED
package/dist/bridge.js
CHANGED
package/dist/config.js
CHANGED
package/dist/context-export.js
CHANGED
package/dist/daemon-install.js
CHANGED
package/dist/db.js
CHANGED
package/dist/demo-data.js
CHANGED
package/dist/demo-seed.js
CHANGED
package/dist/export.js
CHANGED
package/dist/format-utils.js
CHANGED
package/dist/index.js
CHANGED
package/dist/llm/index.js
CHANGED
package/dist/llm/triage.js
CHANGED
package/dist/llm/types.js
CHANGED
package/dist/parsers/claude.js
CHANGED
package/dist/parsers/codex.js
CHANGED
package/dist/parsers/cursor.js
CHANGED
package/dist/parsers/gemini.js
CHANGED
package/dist/parsers/index.js
CHANGED
package/dist/parsers/types.js
CHANGED
package/dist/redact.js
CHANGED
package/dist/render/index.js
CHANGED
package/dist/render/liquid.js
CHANGED
|
@@ -45,13 +45,9 @@
|
|
|
45
45
|
</div>
|
|
46
46
|
{% endif %}
|
|
47
47
|
|
|
48
|
-
{%- comment -%} Stats grid {%- endcomment -%}
|
|
49
|
-
<div class="stat-
|
|
50
|
-
<div class="stat-card">
|
|
51
|
-
<div class="stat-card__label">Sessions</div>
|
|
52
|
-
<div class="stat-card__value">{{ project.totalSessions }}</div>
|
|
53
|
-
</div>
|
|
54
|
-
<div class="stat-card">
|
|
48
|
+
{%- comment -%} Stats: hero time card + compact grid {%- endcomment -%}
|
|
49
|
+
<div class="stat-hero-layout">
|
|
50
|
+
<div class="stat-card stat-card--hero">
|
|
55
51
|
<div class="stat-card__label">{{ durationLabel }}</div>
|
|
56
52
|
<div class="stat-card__value">
|
|
57
53
|
{% if project.totalAgentDurationMinutes %}
|
|
@@ -60,14 +56,32 @@
|
|
|
60
56
|
{{ project.totalDurationMinutes | formatDuration }}
|
|
61
57
|
{% endif %}
|
|
62
58
|
</div>
|
|
59
|
+
{% if efficiencyMultiplier %}
|
|
60
|
+
<div class="stat-card__sub">
|
|
61
|
+
<div class="stat-card__label">Efficiency multiplier</div>
|
|
62
|
+
<div class="stat-card__value stat-card__value--sm">{{ efficiencyMultiplier }}</div>
|
|
63
|
+
</div>
|
|
64
|
+
{% endif %}
|
|
63
65
|
</div>
|
|
64
|
-
<div class="stat-
|
|
65
|
-
<div class="stat-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<div class="stat-
|
|
70
|
-
|
|
66
|
+
<div class="stat-grid--compact">
|
|
67
|
+
<div class="stat-card">
|
|
68
|
+
<div class="stat-card__label">Sessions</div>
|
|
69
|
+
<div class="stat-card__value">{{ project.totalSessions }}</div>
|
|
70
|
+
</div>
|
|
71
|
+
<div class="stat-card">
|
|
72
|
+
<div class="stat-card__label">Lines changed</div>
|
|
73
|
+
<div class="stat-card__value">{{ project.totalLoc | formatLoc }}</div>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="stat-card">
|
|
76
|
+
<div class="stat-card__label">Files</div>
|
|
77
|
+
<div class="stat-card__value">{{ project.totalFilesChanged }}</div>
|
|
78
|
+
</div>
|
|
79
|
+
{% if project.totalTokens %}
|
|
80
|
+
<div class="stat-card">
|
|
81
|
+
<div class="stat-card__label">Tokens</div>
|
|
82
|
+
<div class="stat-card__value">{{ project.totalTokens | formatTokens }}</div>
|
|
83
|
+
</div>
|
|
84
|
+
{% endif %}
|
|
71
85
|
</div>
|
|
72
86
|
</div>
|
|
73
87
|
|
|
@@ -75,9 +75,38 @@ a:hover { text-decoration: underline; }
|
|
|
75
75
|
color: var(--on-surface-variant);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
.stat-hero-layout {
|
|
79
|
+
display: grid;
|
|
80
|
+
grid-template-columns: 1fr 2fr;
|
|
81
|
+
gap: 0.75rem;
|
|
82
|
+
margin-bottom: 1rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.stat-grid--compact {
|
|
86
|
+
display: grid;
|
|
87
|
+
grid-template-columns: repeat(2, 1fr);
|
|
88
|
+
gap: 0.75rem;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.stat-card--hero {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
justify-content: space-between;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.stat-card__sub {
|
|
98
|
+
margin-top: 0.5rem;
|
|
99
|
+
padding-top: 0.5rem;
|
|
100
|
+
border-top: 1px solid var(--border);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.stat-card__value--sm {
|
|
104
|
+
font-size: 1.25rem;
|
|
105
|
+
}
|
|
106
|
+
|
|
78
107
|
.stat-grid {
|
|
79
108
|
display: grid;
|
|
80
|
-
grid-template-columns: repeat(
|
|
109
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
81
110
|
gap: 0.75rem;
|
|
82
111
|
margin-bottom: 1rem;
|
|
83
112
|
}
|
|
@@ -562,6 +591,7 @@ a:hover { text-decoration: underline; }
|
|
|
562
591
|
@media (max-width: 768px) {
|
|
563
592
|
.session-layout { grid-template-columns: 1fr; }
|
|
564
593
|
.session-sidebar { border-right: none; border-bottom: 1px solid var(--ghost); padding-right: 0; padding-bottom: 1rem; }
|
|
594
|
+
.stat-hero-layout { grid-template-columns: 1fr; }
|
|
565
595
|
.stat-grid { grid-template-columns: repeat(2, 1fr); }
|
|
566
596
|
.session-grid { grid-template-columns: 1fr; }
|
|
567
597
|
.two-col { grid-template-columns: 1fr; }
|
package/dist/render/types.js
CHANGED
package/dist/routes/archive.js
CHANGED
package/dist/routes/auth.js
CHANGED
package/dist/routes/context.js
CHANGED
package/dist/routes/dashboard.js
CHANGED
package/dist/routes/enhance.js
CHANGED
package/dist/routes/export.js
CHANGED
package/dist/routes/index.js
CHANGED
package/dist/routes/preview.js
CHANGED
package/dist/routes/projects.js
CHANGED
package/dist/routes/publish.js
CHANGED
|
@@ -15,7 +15,7 @@ export function createPublishRouter(ctx) {
|
|
|
15
15
|
// Render project preview HTML
|
|
16
16
|
router.post('/api/projects/:project/render-preview', async (req, res) => {
|
|
17
17
|
try {
|
|
18
|
-
const { username, slug, title, narrative, repoUrl, projectUrl, screenshotUrl, timeline, skills, totalSessions, totalLoc, totalDurationMinutes, totalAgentDurationMinutes, totalFilesChanged, sessionCards, } = req.body;
|
|
18
|
+
const { username, slug, title, narrative, repoUrl, projectUrl, screenshotUrl, timeline, skills, totalSessions, totalLoc, totalDurationMinutes, totalAgentDurationMinutes, totalFilesChanged, totalTokens, sessionCards, } = req.body;
|
|
19
19
|
const renderData = buildProjectRenderData({
|
|
20
20
|
username: username || 'preview',
|
|
21
21
|
slug, title, narrative,
|
|
@@ -27,6 +27,7 @@ export function createPublishRouter(ctx) {
|
|
|
27
27
|
totalDurationMinutes: totalDurationMinutes || 0,
|
|
28
28
|
totalAgentDurationMinutes,
|
|
29
29
|
totalFilesChanged: totalFilesChanged || 0,
|
|
30
|
+
totalTokens,
|
|
30
31
|
sessionCards: sessionCards || [],
|
|
31
32
|
});
|
|
32
33
|
const html = renderProjectHtml(renderData);
|
|
@@ -430,6 +431,8 @@ export function createPublishRouter(ctx) {
|
|
|
430
431
|
total_duration_minutes: totalDurationMinutes,
|
|
431
432
|
total_agent_duration_minutes: totalAgentDurationMinutes || null,
|
|
432
433
|
total_files_changed: totalFilesChanged,
|
|
434
|
+
total_input_tokens: req.body.totalInputTokens || null,
|
|
435
|
+
total_output_tokens: req.body.totalOutputTokens || null,
|
|
433
436
|
skipped_sessions: skippedSessions,
|
|
434
437
|
rendered_html: projectHtml,
|
|
435
438
|
},
|
|
@@ -478,4 +481,3 @@ export function createPublishRouter(ctx) {
|
|
|
478
481
|
});
|
|
479
482
|
return router;
|
|
480
483
|
}
|
|
481
|
-
//# sourceMappingURL=publish.js.map
|
package/dist/routes/search.js
CHANGED
package/dist/routes/sessions.js
CHANGED
package/dist/routes/settings.js
CHANGED
package/dist/screenshot.js
CHANGED
package/dist/search.js
CHANGED
|
@@ -150,4 +150,3 @@ function getFileFilteredSessionIds(db, filePath) {
|
|
|
150
150
|
const rows = db.prepare('SELECT DISTINCT session_id FROM session_files WHERE file_path LIKE ?').all(`%${filePath}%`);
|
|
151
151
|
return new Set(rows.map((r) => r.session_id));
|
|
152
152
|
}
|
|
153
|
-
//# sourceMappingURL=search.js.map
|
package/dist/server.js
CHANGED
|
@@ -111,7 +111,8 @@ export function createApp(sessionsBasePath, dbPath) {
|
|
|
111
111
|
const indexPath = path.join(staticDir, 'index.html');
|
|
112
112
|
app.get('/{*splat}', (_req, res) => {
|
|
113
113
|
res.sendFile(indexPath, (err) => {
|
|
114
|
-
if (err) {
|
|
114
|
+
if (err && !res.headersSent) {
|
|
115
|
+
console.error(`[spa] sendFile failed for ${indexPath}:`, err.message);
|
|
115
116
|
res.status(404).send('Page not found');
|
|
116
117
|
}
|
|
117
118
|
});
|
|
@@ -155,4 +156,3 @@ export function startServer(port = 17845, options) {
|
|
|
155
156
|
});
|
|
156
157
|
});
|
|
157
158
|
}
|
|
158
|
-
//# sourceMappingURL=server.js.map
|
package/dist/settings.js
CHANGED
package/dist/source-audit.js
CHANGED
package/dist/summarize.js
CHANGED
|
@@ -289,4 +289,3 @@ function enforceWordLimit(str, maxWords) {
|
|
|
289
289
|
// ── Exports for testing ──────────────────────────────────────
|
|
290
290
|
export { buildSystemPrompt as _buildSystemPrompt, buildUserPrompt as _buildUserPrompt };
|
|
291
291
|
// scoreTurn and sampleSession are already exported above
|
|
292
|
-
//# sourceMappingURL=summarize.js.map
|
package/dist/sync.js
CHANGED
package/dist/transcript.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "heyiam",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.18",
|
|
4
4
|
"description": "Turn AI coding sessions into portfolio case studies",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,8 +22,11 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/index.js && cp -r src/render/templates dist/render/templates && cd app && npx vite build && rm -rf ../dist/public && cp -r dist ../dist/public",
|
|
27
|
+
"verify-build": "node -e \"const fs=require('fs'); const assert=require('assert'); const pkg=require('./package.json'); assert(fs.existsSync('dist/index.js'),'missing dist/index.js'); assert(fs.existsSync('dist/public/index.html'),'missing dist/public/index.html'); assert(fs.existsSync('dist/render/templates'),'missing templates'); const js=fs.readdirSync('dist/public/assets').filter(f=>f.endsWith('.js')); assert(js.length===1,'expected exactly 1 JS bundle, found '+js.length); const html=fs.readFileSync('dist/public/index.html','utf8'); assert(html.includes(js[0]),'index.html does not reference the JS bundle'); const tests=fs.readdirSync('dist',{recursive:true}).filter(f=>String(f).includes('.test.')); assert(tests.length===0,'test files found in dist: '+tests.join(', ')); console.log('Build verified: v'+pkg.version+' — dist/index.js + frontend + templates, 0 test files')\"",
|
|
28
|
+
"prepublishOnly": "npm run test:backend && npm run build && npm run verify-build",
|
|
29
|
+
"prepack": "npm run verify-build",
|
|
27
30
|
"dev": "npx concurrently \"npm:dev:api\" \"npm:dev:app\"",
|
|
28
31
|
"dev:api": "tsx watch src/index.ts open --no-open",
|
|
29
32
|
"dev:app": "cd app && npm run dev",
|
package/dist/analyzer.d.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
export interface ParsedTurn {
|
|
2
|
-
timestamp: string;
|
|
3
|
-
type: 'prompt' | 'response' | 'tool' | 'error' | 'thinking';
|
|
4
|
-
content: string;
|
|
5
|
-
toolName?: string;
|
|
6
|
-
toolInput?: string;
|
|
7
|
-
toolOutput?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface ParsedFileChange {
|
|
10
|
-
path: string;
|
|
11
|
-
additions: number;
|
|
12
|
-
deletions: number;
|
|
13
|
-
}
|
|
14
|
-
export interface SessionAnalysis {
|
|
15
|
-
id: string;
|
|
16
|
-
title: string;
|
|
17
|
-
date: string;
|
|
18
|
-
/** End time as ISO timestamp */
|
|
19
|
-
endTime?: string;
|
|
20
|
-
durationMinutes: number;
|
|
21
|
-
/** Wall-clock minutes (first to last timestamp, includes idle) */
|
|
22
|
-
wallClockMinutes?: number;
|
|
23
|
-
projectName: string;
|
|
24
|
-
/** Source tool: "claude", "cursor", "codex", "gemini", "antigravity" */
|
|
25
|
-
source?: string;
|
|
26
|
-
turns: ParsedTurn[];
|
|
27
|
-
filesChanged: ParsedFileChange[];
|
|
28
|
-
/** Authoritative total LOC (additions + deletions) from parser loc_stats */
|
|
29
|
-
locTotal?: number;
|
|
30
|
-
rawLog: string[];
|
|
31
|
-
childAnalyses?: SessionAnalysis[];
|
|
32
|
-
agentRole?: string;
|
|
33
|
-
parentSessionId?: string | null;
|
|
34
|
-
/** Working directory where the session was started */
|
|
35
|
-
cwd?: string;
|
|
36
|
-
/** Active time intervals as [startMs, endMs] pairs for overlap-aware project aggregation */
|
|
37
|
-
activeIntervals?: [number, number][];
|
|
38
|
-
/** Token usage from parser (input + output tokens) */
|
|
39
|
-
tokenUsage?: {
|
|
40
|
-
input: number;
|
|
41
|
-
output: number;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
export interface ExecutionStep {
|
|
45
|
-
stepNumber: number;
|
|
46
|
-
title: string;
|
|
47
|
-
description: string;
|
|
48
|
-
type?: 'analysis' | 'implementation' | 'testing' | 'deployment' | 'decision';
|
|
49
|
-
}
|
|
50
|
-
export interface ToolUsage {
|
|
51
|
-
tool: string;
|
|
52
|
-
count: number;
|
|
53
|
-
}
|
|
54
|
-
export interface TurnEvent {
|
|
55
|
-
timestamp: string;
|
|
56
|
-
type: 'prompt' | 'response' | 'tool' | 'error' | 'thinking';
|
|
57
|
-
content: string;
|
|
58
|
-
}
|
|
59
|
-
export interface FileChange {
|
|
60
|
-
path: string;
|
|
61
|
-
additions: number;
|
|
62
|
-
deletions: number;
|
|
63
|
-
}
|
|
64
|
-
export interface AgentChild {
|
|
65
|
-
sessionId: string;
|
|
66
|
-
role: string;
|
|
67
|
-
durationMinutes: number;
|
|
68
|
-
linesOfCode: number;
|
|
69
|
-
date?: string;
|
|
70
|
-
}
|
|
71
|
-
export interface Session {
|
|
72
|
-
id: string;
|
|
73
|
-
title: string;
|
|
74
|
-
date: string;
|
|
75
|
-
/** End time as ISO timestamp */
|
|
76
|
-
endTime?: string;
|
|
77
|
-
/** Active time in minutes (excludes idle gaps) */
|
|
78
|
-
durationMinutes: number;
|
|
79
|
-
/** Wall-clock time in minutes (first to last timestamp) */
|
|
80
|
-
wallClockMinutes?: number;
|
|
81
|
-
turns: number;
|
|
82
|
-
linesOfCode: number;
|
|
83
|
-
status: 'draft' | 'enhanced' | 'uploaded' | 'archived';
|
|
84
|
-
projectName: string;
|
|
85
|
-
rawLog: string[];
|
|
86
|
-
skills: string[];
|
|
87
|
-
executionPath: ExecutionStep[];
|
|
88
|
-
toolBreakdown: ToolUsage[];
|
|
89
|
-
filesChanged: FileChange[];
|
|
90
|
-
turnTimeline: TurnEvent[];
|
|
91
|
-
toolCalls: number;
|
|
92
|
-
/** AI-generated fields (populated from enhanced data) */
|
|
93
|
-
context?: string;
|
|
94
|
-
developerTake?: string;
|
|
95
|
-
qaPairs?: Array<{
|
|
96
|
-
question: string;
|
|
97
|
-
answer: string;
|
|
98
|
-
}>;
|
|
99
|
-
children?: AgentChild[];
|
|
100
|
-
parentSessionId?: string | null;
|
|
101
|
-
agentRole?: string;
|
|
102
|
-
isOrchestrated?: boolean;
|
|
103
|
-
/** Working directory where the session was started */
|
|
104
|
-
cwd?: string;
|
|
105
|
-
/** True when enhanced via bulk mode with auto-accepted AI suggestions */
|
|
106
|
-
quickEnhanced?: boolean;
|
|
107
|
-
/** Source tool: "claude", "cursor", "codex", "gemini", "antigravity" */
|
|
108
|
-
source?: string;
|
|
109
|
-
/** Active time intervals as [startMs, endMs] pairs for overlap-aware project aggregation */
|
|
110
|
-
activeIntervals?: [number, number][];
|
|
111
|
-
/** Token usage: input and output token counts */
|
|
112
|
-
tokenUsage?: {
|
|
113
|
-
input: number;
|
|
114
|
-
output: number;
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
export declare function extractSkills(analysis: SessionAnalysis): string[];
|
|
118
|
-
export declare function computeToolBreakdown(turns: ParsedTurn[]): ToolUsage[];
|
|
119
|
-
export declare function generateExecutionPath(turns: ParsedTurn[]): ExecutionStep[];
|
|
120
|
-
export declare function buildTurnTimeline(turns: ParsedTurn[]): TurnEvent[];
|
|
121
|
-
export declare function detectContext(analysis: SessionAnalysis): string | undefined;
|
|
122
|
-
export declare function computeLinesOfCode(filesChanged: ParsedFileChange[]): number;
|
|
123
|
-
export declare function analyzeSession(analysis: SessionAnalysis): Session;
|