heyiam 0.1.7 → 0.1.8
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.d.ts +3 -3
- package/dist/archive.d.ts +14 -0
- package/dist/archive.js +125 -0
- package/dist/archive.js.map +1 -0
- package/dist/auth.d.ts +0 -6
- package/dist/auth.js +2 -4
- package/dist/auth.js.map +1 -1
- package/dist/autostart.d.ts +19 -0
- package/dist/autostart.js +103 -0
- package/dist/autostart.js.map +1 -0
- package/dist/bridge.d.ts +0 -2
- package/dist/bridge.js +33 -4
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/context-export.d.ts +22 -0
- package/dist/context-export.js +230 -0
- package/dist/context-export.js.map +1 -0
- package/dist/daemon-install.d.ts +23 -0
- package/dist/daemon-install.js +155 -0
- package/dist/daemon-install.js.map +1 -0
- package/dist/db.d.ts +118 -0
- package/dist/db.js +444 -0
- package/dist/db.js.map +1 -0
- package/dist/export.d.ts +30 -0
- package/dist/export.js +377 -0
- package/dist/export.js.map +1 -0
- package/dist/format-utils.d.ts +6 -0
- package/dist/format-utils.js +15 -0
- package/dist/format-utils.js.map +1 -0
- package/dist/index.js +474 -117
- package/dist/index.js.map +1 -1
- package/dist/llm/project-enhance.js +1 -1
- package/dist/parsers/claude.js +73 -0
- package/dist/parsers/claude.js.map +1 -1
- package/dist/parsers/codex.js +1 -1
- package/dist/parsers/codex.js.map +1 -1
- package/dist/parsers/cursor.d.ts +2 -0
- package/dist/parsers/cursor.js +14 -26
- package/dist/parsers/cursor.js.map +1 -1
- package/dist/parsers/gemini.d.ts +3 -2
- package/dist/parsers/gemini.js +198 -21
- package/dist/parsers/gemini.js.map +1 -1
- package/dist/parsers/index.d.ts +1 -1
- package/dist/parsers/index.js +23 -7
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/types.d.ts +27 -1
- package/dist/render/build-render-data.d.ts +59 -0
- package/dist/render/build-render-data.js +101 -0
- package/dist/render/build-render-data.js.map +1 -0
- package/dist/render/components/PortfolioPage.d.ts +4 -0
- package/dist/render/components/PortfolioPage.js +16 -0
- package/dist/render/components/PortfolioPage.js.map +1 -0
- package/dist/render/components/ProjectPage.d.ts +4 -0
- package/dist/render/components/ProjectPage.js +101 -0
- package/dist/render/components/ProjectPage.js.map +1 -0
- package/dist/render/components/SessionPage.d.ts +4 -0
- package/dist/render/components/SessionPage.js +29 -0
- package/dist/render/components/SessionPage.js.map +1 -0
- package/dist/render/index.d.ts +37 -0
- package/dist/render/index.js +140 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/types.d.ts +121 -0
- package/dist/render/types.js +9 -0
- package/dist/render/types.js.map +1 -0
- package/dist/routes/archive.d.ts +3 -0
- package/dist/routes/archive.js +56 -0
- package/dist/routes/archive.js.map +1 -0
- package/dist/routes/auth.d.ts +3 -0
- package/dist/routes/auth.js +116 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/context.d.ts +61 -0
- package/dist/routes/context.js +356 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/dashboard.d.ts +3 -0
- package/dist/routes/dashboard.js +103 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/enhance.d.ts +3 -0
- package/dist/routes/enhance.js +305 -0
- package/dist/routes/enhance.js.map +1 -0
- package/dist/routes/export.d.ts +3 -0
- package/dist/routes/export.js +145 -0
- package/dist/routes/export.js.map +1 -0
- package/dist/routes/index.d.ts +12 -0
- package/dist/routes/index.js +13 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/preview.d.ts +3 -0
- package/dist/routes/preview.js +191 -0
- package/dist/routes/preview.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.js +356 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/publish.d.ts +3 -0
- package/dist/routes/publish.js +466 -0
- package/dist/routes/publish.js.map +1 -0
- package/dist/routes/search.d.ts +3 -0
- package/dist/routes/search.js +110 -0
- package/dist/routes/search.js.map +1 -0
- package/dist/routes/sessions.d.ts +3 -0
- package/dist/routes/sessions.js +103 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/settings.d.ts +3 -0
- package/dist/routes/settings.js +30 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/screenshot.d.ts +5 -2
- package/dist/screenshot.js +187 -13
- package/dist/screenshot.js.map +1 -1
- package/dist/search.d.ts +30 -0
- package/dist/search.js +153 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.js +55 -1318
- package/dist/server.js.map +1 -1
- package/dist/settings.d.ts +23 -6
- package/dist/settings.js +36 -12
- package/dist/settings.js.map +1 -1
- package/dist/source-audit.d.ts +29 -0
- package/dist/source-audit.js +203 -0
- package/dist/source-audit.js.map +1 -0
- package/dist/sync.d.ts +74 -0
- package/dist/sync.js +358 -0
- package/dist/sync.js.map +1 -0
- package/dist/transcript.d.ts +68 -0
- package/dist/transcript.js +268 -0
- package/dist/transcript.js.map +1 -0
- package/package.json +5 -1
- package/app/dist/assets/html2canvas-Cwn_rrOw.js +0 -5
- package/app/dist/assets/index-CEQyTkgN.js +0 -14
- package/app/dist/assets/index-DLh5xRE8.css +0 -1
- package/app/dist/favicon.svg +0 -5
- package/app/dist/icons.svg +0 -24
- package/app/dist/index.html +0 -20
- package/dist/machine-key.d.ts +0 -10
- package/dist/machine-key.js +0 -51
- package/dist/machine-key.js.map +0 -1
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
// Transcript builder — transforms raw JSONL entries into structured
|
|
2
|
+
// messages for the session viewer UI. Pairs tool_use blocks with their
|
|
3
|
+
// tool_result responses, cleans internal XML, truncates large outputs.
|
|
4
|
+
import { cleanAssistantText } from './bridge.js';
|
|
5
|
+
import { stripHomePath, stripHomePathsInText } from './redact.js';
|
|
6
|
+
// ── Configuration ────────────────────────────────────────────
|
|
7
|
+
/** Max characters for tool output before truncation */
|
|
8
|
+
const MAX_OUTPUT_LENGTH = 3000;
|
|
9
|
+
/** Max characters for thinking blocks before truncation */
|
|
10
|
+
const MAX_THINKING_LENGTH = 5000;
|
|
11
|
+
// ── Helpers ─────────────────────────────────────────────────
|
|
12
|
+
function isToolUseBlock(block) {
|
|
13
|
+
return block.type === 'tool_use';
|
|
14
|
+
}
|
|
15
|
+
function isThinkingBlock(block) {
|
|
16
|
+
return block.type === 'thinking';
|
|
17
|
+
}
|
|
18
|
+
function isToolResultBlock(block) {
|
|
19
|
+
return block.type === 'tool_result';
|
|
20
|
+
}
|
|
21
|
+
function getContentBlocks(entry) {
|
|
22
|
+
const content = entry.message?.content;
|
|
23
|
+
if (!content || typeof content === 'string')
|
|
24
|
+
return [];
|
|
25
|
+
return content;
|
|
26
|
+
}
|
|
27
|
+
/** Extract the primary input string for a tool call (file path, command, pattern). */
|
|
28
|
+
function extractPrimaryInput(name, input) {
|
|
29
|
+
if (typeof input.file_path === 'string')
|
|
30
|
+
return input.file_path;
|
|
31
|
+
if (typeof input.command === 'string')
|
|
32
|
+
return input.command;
|
|
33
|
+
if (typeof input.pattern === 'string')
|
|
34
|
+
return input.pattern;
|
|
35
|
+
if (typeof input.path === 'string')
|
|
36
|
+
return input.path;
|
|
37
|
+
if (typeof input.prompt === 'string') {
|
|
38
|
+
const p = input.prompt;
|
|
39
|
+
return p.length > 120 ? p.slice(0, 117) + '...' : p;
|
|
40
|
+
}
|
|
41
|
+
// Fallback: summarize the keys
|
|
42
|
+
const keys = Object.keys(input).filter(k => input[k] !== undefined);
|
|
43
|
+
return keys.length > 0 ? `{${keys.join(', ')}}` : '';
|
|
44
|
+
}
|
|
45
|
+
/** Extract text content from a tool_result block's content field. */
|
|
46
|
+
function extractToolResultContent(content) {
|
|
47
|
+
if (typeof content === 'string')
|
|
48
|
+
return content;
|
|
49
|
+
if (content === null || content === undefined)
|
|
50
|
+
return '';
|
|
51
|
+
if (Array.isArray(content)) {
|
|
52
|
+
return content
|
|
53
|
+
.map((item) => {
|
|
54
|
+
if (typeof item === 'string')
|
|
55
|
+
return item;
|
|
56
|
+
if (item && typeof item === 'object' && 'text' in item)
|
|
57
|
+
return String(item.text);
|
|
58
|
+
return '';
|
|
59
|
+
})
|
|
60
|
+
.filter(Boolean)
|
|
61
|
+
.join('\n');
|
|
62
|
+
}
|
|
63
|
+
if (typeof content === 'object' && 'text' in content) {
|
|
64
|
+
return String(content.text);
|
|
65
|
+
}
|
|
66
|
+
return JSON.stringify(content);
|
|
67
|
+
}
|
|
68
|
+
/** Truncate text to max length with indicator. */
|
|
69
|
+
function truncateOutput(text, max) {
|
|
70
|
+
if (text.length <= max)
|
|
71
|
+
return { text, truncated: false };
|
|
72
|
+
return { text: text.slice(0, max), truncated: true };
|
|
73
|
+
}
|
|
74
|
+
/** Check if a user entry is purely tool-result plumbing (no actual user text). */
|
|
75
|
+
function isToolResultOnly(entry) {
|
|
76
|
+
const content = entry.message?.content;
|
|
77
|
+
if (typeof content === 'string')
|
|
78
|
+
return false;
|
|
79
|
+
if (!Array.isArray(content))
|
|
80
|
+
return false;
|
|
81
|
+
// If every block is a tool_result, it's plumbing
|
|
82
|
+
return content.length > 0 && content.every((block) => block.type === 'tool_result');
|
|
83
|
+
}
|
|
84
|
+
/** Should we skip this entry entirely? */
|
|
85
|
+
function shouldSkipEntry(entry) {
|
|
86
|
+
// Skip non-conversation entries
|
|
87
|
+
if (entry.type === 'system' || entry.type === 'progress')
|
|
88
|
+
return true;
|
|
89
|
+
if (entry.type === 'file-history-snapshot')
|
|
90
|
+
return true;
|
|
91
|
+
if (entry.type === 'agent-name')
|
|
92
|
+
return true;
|
|
93
|
+
if (entry.type === 'custom-title')
|
|
94
|
+
return true;
|
|
95
|
+
if (entry.type === 'last-prompt')
|
|
96
|
+
return true;
|
|
97
|
+
if (entry.type === 'queue-operation')
|
|
98
|
+
return true;
|
|
99
|
+
if (entry.isMeta)
|
|
100
|
+
return true;
|
|
101
|
+
// Skip sidechain entries (internal branching)
|
|
102
|
+
if (entry.isSidechain)
|
|
103
|
+
return true;
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
// ── Main builder ────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Build a structured transcript from raw JSONL entries.
|
|
109
|
+
*
|
|
110
|
+
* Two-pass algorithm:
|
|
111
|
+
* 1. Collect all tool_result blocks keyed by tool_use_id
|
|
112
|
+
* 2. Walk entries, build messages, pair tool calls with results
|
|
113
|
+
*/
|
|
114
|
+
export function buildTranscript(entries, cwd) {
|
|
115
|
+
// Pass 1: collect tool results
|
|
116
|
+
const toolResults = new Map();
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
if (entry.type !== 'user')
|
|
119
|
+
continue;
|
|
120
|
+
const blocks = getContentBlocks(entry);
|
|
121
|
+
for (const block of blocks) {
|
|
122
|
+
if (isToolResultBlock(block)) {
|
|
123
|
+
const content = extractToolResultContent(block.content);
|
|
124
|
+
toolResults.set(block.tool_use_id, {
|
|
125
|
+
content,
|
|
126
|
+
isError: !!block.is_error,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Pass 2: build messages
|
|
132
|
+
const messages = [];
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
if (shouldSkipEntry(entry))
|
|
135
|
+
continue;
|
|
136
|
+
if (entry.type === 'user') {
|
|
137
|
+
// Skip tool-result-only entries (plumbing between assistant turns)
|
|
138
|
+
if (isToolResultOnly(entry))
|
|
139
|
+
continue;
|
|
140
|
+
const content = entry.message?.content;
|
|
141
|
+
let userText = '';
|
|
142
|
+
if (typeof content === 'string') {
|
|
143
|
+
userText = cleanAssistantText(content);
|
|
144
|
+
}
|
|
145
|
+
else if (Array.isArray(content)) {
|
|
146
|
+
// Extract text blocks from user message (skip tool_result blocks)
|
|
147
|
+
const textParts = content
|
|
148
|
+
.filter((b) => b.type === 'text')
|
|
149
|
+
.map((b) => b.text)
|
|
150
|
+
.map(cleanAssistantText)
|
|
151
|
+
.filter(Boolean);
|
|
152
|
+
userText = textParts.join('\n');
|
|
153
|
+
}
|
|
154
|
+
if (!userText)
|
|
155
|
+
continue;
|
|
156
|
+
if (cwd)
|
|
157
|
+
userText = stripHomePathsInText(userText, cwd);
|
|
158
|
+
messages.push({
|
|
159
|
+
id: entry.uuid,
|
|
160
|
+
timestamp: entry.timestamp,
|
|
161
|
+
role: 'user',
|
|
162
|
+
blocks: [{ type: 'text', text: userText }],
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else if (entry.type === 'assistant') {
|
|
166
|
+
const contentBlocks = getContentBlocks(entry);
|
|
167
|
+
const transcriptBlocks = [];
|
|
168
|
+
// Also handle string-only assistant content
|
|
169
|
+
if (typeof entry.message?.content === 'string') {
|
|
170
|
+
const cleaned = cleanAssistantText(entry.message.content);
|
|
171
|
+
if (cleaned) {
|
|
172
|
+
transcriptBlocks.push({
|
|
173
|
+
type: 'text',
|
|
174
|
+
text: cwd ? stripHomePathsInText(cleaned, cwd) : cleaned,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
for (const block of contentBlocks) {
|
|
179
|
+
if (isThinkingBlock(block)) {
|
|
180
|
+
const thinking = block.thinking?.trim();
|
|
181
|
+
if (!thinking)
|
|
182
|
+
continue;
|
|
183
|
+
const { text, truncated } = truncateOutput(thinking, MAX_THINKING_LENGTH);
|
|
184
|
+
transcriptBlocks.push({
|
|
185
|
+
type: 'thinking',
|
|
186
|
+
text: truncated ? text + '\n\n[thinking truncated]' : text,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else if (block.type === 'text') {
|
|
190
|
+
const cleaned = cleanAssistantText(block.text);
|
|
191
|
+
if (!cleaned)
|
|
192
|
+
continue;
|
|
193
|
+
transcriptBlocks.push({
|
|
194
|
+
type: 'text',
|
|
195
|
+
text: cwd ? stripHomePathsInText(cleaned, cwd) : cleaned,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else if (isToolUseBlock(block)) {
|
|
199
|
+
let primaryInput = extractPrimaryInput(block.name, block.input);
|
|
200
|
+
if (primaryInput && cwd)
|
|
201
|
+
primaryInput = stripHomePath(primaryInput, cwd);
|
|
202
|
+
const result = toolResults.get(block.id);
|
|
203
|
+
let output;
|
|
204
|
+
let outputTruncated = false;
|
|
205
|
+
let isError = false;
|
|
206
|
+
if (result) {
|
|
207
|
+
let content = result.content;
|
|
208
|
+
if (cwd)
|
|
209
|
+
content = stripHomePathsInText(content, cwd);
|
|
210
|
+
const trunc = truncateOutput(content, MAX_OUTPUT_LENGTH);
|
|
211
|
+
output = trunc.text;
|
|
212
|
+
outputTruncated = trunc.truncated;
|
|
213
|
+
isError = result.isError;
|
|
214
|
+
}
|
|
215
|
+
// Sanitize inputData: strip full file contents from Write calls
|
|
216
|
+
const sanitizedInput = { ...block.input };
|
|
217
|
+
if (block.name === 'Write' && typeof sanitizedInput.content === 'string') {
|
|
218
|
+
const lines = sanitizedInput.content.split('\n').length;
|
|
219
|
+
sanitizedInput.content = `[${lines} lines]`;
|
|
220
|
+
}
|
|
221
|
+
transcriptBlocks.push({
|
|
222
|
+
type: 'tool_call',
|
|
223
|
+
toolCallId: block.id,
|
|
224
|
+
toolName: block.name,
|
|
225
|
+
input: primaryInput,
|
|
226
|
+
inputData: sanitizedInput,
|
|
227
|
+
output,
|
|
228
|
+
outputTruncated,
|
|
229
|
+
isError,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Skip image blocks for now (could add later)
|
|
233
|
+
}
|
|
234
|
+
if (transcriptBlocks.length === 0)
|
|
235
|
+
continue;
|
|
236
|
+
messages.push({
|
|
237
|
+
id: entry.uuid,
|
|
238
|
+
timestamp: entry.timestamp,
|
|
239
|
+
role: 'assistant',
|
|
240
|
+
blocks: transcriptBlocks,
|
|
241
|
+
model: entry.message?.model,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return messages;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Build transcript with metadata for the API response.
|
|
249
|
+
*/
|
|
250
|
+
export function buildTranscriptResponse(entries, opts = {}) {
|
|
251
|
+
const messages = buildTranscript(entries, opts.cwd);
|
|
252
|
+
return {
|
|
253
|
+
messages,
|
|
254
|
+
meta: {
|
|
255
|
+
totalMessages: messages.length,
|
|
256
|
+
totalTokens: {
|
|
257
|
+
input: opts.tokenUsage?.input_tokens ?? 0,
|
|
258
|
+
output: opts.tokenUsage?.output_tokens ?? 0,
|
|
259
|
+
},
|
|
260
|
+
models: opts.modelsUsed ?? [],
|
|
261
|
+
duration: {
|
|
262
|
+
activeMinutes: opts.activeMinutes ?? 0,
|
|
263
|
+
wallClockMinutes: opts.wallClockMinutes ?? 0,
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,uEAAuE;AACvE,uEAAuE;AASvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAqDlE,gEAAgE;AAEhE,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,2DAA2D;AAC3D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,+DAA+D;AAE/D,SAAS,cAAc,CAAC,KAAmB;IACzC,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IAC1C,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAmB;IAC5C,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACvC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sFAAsF;AACtF,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAA8B;IACvE,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC;IAChE,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAgB,CAAC;QACjC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,+BAA+B;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB,CAAC,OAAgB;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEzD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAC1C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;QACrD,OAAO,MAAM,CAAE,OAA6B,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,kDAAkD;AAClD,SAAS,cAAc,CAAC,IAAY,EAAE,GAAW;IAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC;AAED,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,KAAe;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IACvC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,iDAAiD;IACjD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAClD,KAAsB,CAAC,IAAI,KAAK,aAAa,CAC/C,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,SAAS,eAAe,CAAC,KAAe;IACtC,gCAAgC;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,8CAA8C;IAC9C,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAE/D;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAmB,EAAE,GAAY;IAC/D,+BAA+B;IAC/B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiD,CAAC;IAE7E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;oBACjC,OAAO;oBACP,OAAO,EAAE,CAAC,CAAE,KAA4C,CAAC,QAAQ;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,eAAe,CAAC,KAAK,CAAC;YAAE,SAAS;QAErC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,mEAAmE;YACnE,IAAI,gBAAgB,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;YACvC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAElB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,kEAAkE;gBAClE,MAAM,SAAS,GAAG,OAAO;qBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAkB,CAAC,IAAI,KAAK,MAAM,CAAC;qBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC;qBACxC,GAAG,CAAC,kBAAkB,CAAC;qBACvB,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnB,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,IAAI,GAAG;gBAAE,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAExD,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK,CAAC,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAsB,EAAE,CAAC;YAE/C,4CAA4C;YAC5C,IAAI,OAAO,KAAK,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,OAAO,EAAE,CAAC;oBACZ,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;qBACzD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACxC,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBACxB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;oBAC1E,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,0BAA0B,CAAC,CAAC,CAAC,IAAI;qBAC3D,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO;wBAAE,SAAS;oBACvB,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;qBACzD,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,IAAI,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChE,IAAI,YAAY,IAAI,GAAG;wBAAE,YAAY,GAAG,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;oBAEzE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACzC,IAAI,MAA0B,CAAC;oBAC/B,IAAI,eAAe,GAAG,KAAK,CAAC;oBAC5B,IAAI,OAAO,GAAG,KAAK,CAAC;oBAEpB,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;wBAC7B,IAAI,GAAG;4BAAE,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;wBACtD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;wBACzD,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;wBACpB,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;wBAClC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;oBAC3B,CAAC;oBAED,gEAAgE;oBAChE,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;wBACzE,MAAM,KAAK,GAAI,cAAc,CAAC,OAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBACpE,cAAc,CAAC,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC;oBAC9C,CAAC;oBAED,gBAAgB,CAAC,IAAI,CAAC;wBACpB,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE,KAAK,CAAC,EAAE;wBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;wBACpB,KAAK,EAAE,YAAY;wBACnB,SAAS,EAAE,cAAc;wBACzB,MAAM;wBACN,eAAe;wBACf,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;gBACD,8CAA8C;YAChD,CAAC;YAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE5C,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,KAAK,CAAC,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAmB,EACnB,OAMI,EAAE;IAEN,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEpD,OAAO;QACL,QAAQ;QACR,IAAI,EAAE;YACJ,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,WAAW,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,IAAI,CAAC;gBACzC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,IAAI,CAAC;aAC5C;YACD,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YAC7B,QAAQ,EAAE;gBACR,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;gBACtC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;aAC7C;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "heyiam",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Turn AI coding sessions into portfolio case studies",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,6 +48,10 @@
|
|
|
48
48
|
"@types/cors": "^2.8.19",
|
|
49
49
|
"@types/express": "^5.0.6",
|
|
50
50
|
"@types/node": "^22.0.0",
|
|
51
|
+
"@types/react": "^19.2.14",
|
|
52
|
+
"@types/react-dom": "^19.2.3",
|
|
53
|
+
"react": "^19.2.4",
|
|
54
|
+
"react-dom": "^19.2.4",
|
|
51
55
|
"@types/supertest": "^7.2.0",
|
|
52
56
|
"concurrently": "^9.2.1",
|
|
53
57
|
"supertest": "^7.2.2",
|