@crewx/dreaming 0.1.0-rc.1

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/SKILL.md ADDED
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: crewx/dreaming
3
+ description: >
4
+ 선별 실행하는 필수 회고 스킬. 태스크/대화 단위로 에이전트 행동을 되돌아보는
5
+ 1급 자기성찰 도구. memory/doc/search와 동급으로 상황 판단해 주도적으로 호출한다.
6
+ metadata:
7
+ version: 0.1.0
8
+ built-in: true
9
+ ---
10
+
11
+ # Dreaming — 필수 회고 스킬
12
+
13
+ **dreaming은 에이전트의 1급 자기성찰 도구다.**
14
+ memory(기억 저장/검색), doc(설계서 탐색), search(코드 검색)와 동급으로,
15
+ 에이전트가 상황을 판단해 **스스로 호출**한다. 수동 요청이 오기를 기다리지 않는다.
16
+
17
+ ## 두 가지 시야
18
+
19
+ | 명령어 | 시야 | 쓰는 때 |
20
+ |--------|------|---------|
21
+ | `crewx dreaming --task=tsk_xxx` | 돋보기 | 태스크 1건을 깊게 — 행동 타임라인, 삽질 패턴, 효율 패턴, 스킬 사용 현황 |
22
+ | `crewx dreaming --thread=thd_xxx --recent=N` | 지도 | 대화 내 최근 N개 태스크 목록 + 각 종료상태 |
23
+
24
+ ## 언제 호출할까 (에이전트 판단 기준)
25
+
26
+ - **작업 시작 전**: 방금 끊긴 태스크가 있는지 확인 → `--thread` 목록 확인
27
+ - **실패 태스크 재시도**: 직전에 어디까지 하다 멈췄는지 → `--task` 로 타임라인 확인
28
+ - **대화 맥락 파악**: 이 대화에서 뭘 시켰는지 목록으로 파악 → `--thread --recent=5`
29
+ - **작업 후 자기 점검**: 삽질 패턴 / 효율 패턴 확인 → `--task` 로 회고
30
+
31
+ ## 사용법
32
+
33
+ ```bash
34
+ # 태스크 1건 깊이 회고
35
+ crewx dreaming --task=tsk_abc123
36
+
37
+ # 대화 내 최근 5건 목록 (기본값)
38
+ crewx dreaming --thread=thd_xyz789
39
+
40
+ # 더 많이 보기
41
+ crewx dreaming --thread=thd_xyz789 --recent=20
42
+
43
+ # 특정 태스크 드릴다운
44
+ crewx dreaming --task=tsk_abc123 --json
45
+ ```
46
+
47
+ ## 출력 예시 — --task 모드
48
+
49
+ ```
50
+ ━━━ Dreaming: task tsk_abc123 ━━━
51
+ Agent: core_dev (acp/claude) | Status: success | Duration: 312s | Tools: 47 calls
52
+ 📋 지시: dreaming 빌트인 승격 작업
53
+ 📝 결론: packages/built-in/dreaming/ 생성 완료
54
+
55
+ [타임라인]
56
+ 1. Read packages/built-in/memory/package.json
57
+ 2. Read packages/built-in/doc/tsconfig.json
58
+ 3. Edit packages/built-in/dreaming/package.json
59
+ ...
60
+ 41. Bash npx tsc --noEmit → ❌ error TS2345
61
+ 42. Edit packages/built-in/dreaming/src/analyzer.ts ← 같은 파일 재수정
62
+ 43. Bash npx tsc --noEmit → ✅ pass
63
+ 💡 삽질: analyzer.ts 2회 수정 (41→43) — 타입 불일치
64
+
65
+ [스킬 사용]
66
+ crewx/memory 3회 (index, find, save)
67
+ crewx/doc 2회 (toc, section)
68
+
69
+ [회고 요약]
70
+ ⚠️ 삽질 패턴: 같은 파일 반복 수정 1건 (analyzer.ts 2회)
71
+ 💡 인사이트: 에러 대부분 타입 불일치 (1건)
72
+ 🔍 코드 분석 활용 — tsserver 5회 사용
73
+ ```
74
+
75
+ ## 출력 예시 — --thread 모드
76
+
77
+ ```
78
+ ━━━ Dreaming: thread thd_xyz789 — 최근 5건 ━━━
79
+ 태스크 목록: 5건
80
+
81
+ 1. ✅ tsk_abc123 | core_dev | success | 312s | dreaming 빌트인 승격 작업
82
+ 2. ❌ tsk_def456 | core_dev | failed | 45s | tsc 빌드 검증
83
+ 3. ✅ tsk_ghi789 | ui_lead | completed | 180s | UI 컴포넌트 리뷰
84
+ 4. ✅ tsk_jkl012 | core_dev | success | 240s | SDK 리포지토리 패턴 적용
85
+ 5. ✅ tsk_mno345 | core_dev | success | 90s | CLI registry 등록
86
+
87
+ 드릴다운: crewx dreaming --task=<id>
88
+ ```
89
+
90
+ ## Options
91
+
92
+ | 옵션 | 기본값 | 설명 |
93
+ |------|--------|------|
94
+ | `--task=ID` | — | 태스크 ID (tsk_xxx) |
95
+ | `--thread=ID` | — | 스레드 ID (thd_xxx) |
96
+ | `--recent=N` | 5 | --thread 시 최근 N건 |
97
+ | `--json` | false | JSON 출력 |
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function main(inputArgs?: string[]): Promise<void>;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAoEA,wBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE9D"}
package/dist/cli.js ADDED
@@ -0,0 +1,130 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.main = main;
5
+ const sdk_1 = require("@crewx/sdk");
6
+ const analyzer_js_1 = require("./src/analyzer.js");
7
+ const renderer_js_1 = require("./src/renderer.js");
8
+ function parseFlags(argv) {
9
+ const flags = {
10
+ task: null,
11
+ thread: null,
12
+ agent: null,
13
+ days: 1,
14
+ recent: null,
15
+ json: false,
16
+ all: false,
17
+ };
18
+ for (const a of argv) {
19
+ if (a === '--json')
20
+ flags.json = true;
21
+ else if (a === '--all')
22
+ flags.all = true;
23
+ else if (a.startsWith('--task='))
24
+ flags.task = a.slice('--task='.length);
25
+ else if (a.startsWith('--thread='))
26
+ flags.thread = a.slice('--thread='.length);
27
+ else if (a.startsWith('--agent='))
28
+ flags.agent = a.slice('--agent='.length);
29
+ else if (a.startsWith('--days='))
30
+ flags.days = parseInt(a.slice('--days='.length), 10);
31
+ else if (a.startsWith('--recent='))
32
+ flags.recent = parseInt(a.slice('--recent='.length), 10);
33
+ else if (a === '--help' || a === '-h') {
34
+ printUsage();
35
+ process.exit(0);
36
+ }
37
+ else if (a.startsWith('--')) {
38
+ console.error(`Unknown option: ${a}\nRun with --help for usage.`);
39
+ process.exit(1);
40
+ }
41
+ }
42
+ return flags;
43
+ }
44
+ function printUsage() {
45
+ console.log(`crewx dreaming — 선별 실행하는 필수 회고 스킬
46
+
47
+ 에이전트가 작업 전/후, 재시도 시 상황을 파악하기 위해 호출하는 1급 자기성찰 도구.
48
+ memory/doc/search와 동급으로, 상황에 따라 주도적으로 실행한다.
49
+
50
+ Usage:
51
+ crewx dreaming --task=TASK_ID
52
+ crewx dreaming --thread=THREAD_ID [--recent=N]
53
+
54
+ Options:
55
+ --task=ID 태스크 1건 깊이 회고 (행동 타임라인 + 스킬 사용 + 삽질/효율 요약)
56
+ --thread=ID 대화 내 최근 N개 태스크 목록 + 각 종료상태
57
+ --recent=N --thread 시 최근 N건 (기본값: 5)
58
+ --json JSON 출력
59
+ --help, -h 도움말
60
+
61
+ 언제 호출할까:
62
+ - 작업 시작 전: 방금 끊긴 태스크가 있는지 확인
63
+ - 실패 재시도 전: 직전에 어디까지 하다 멈췄는지 확인
64
+ - 대화 맥락 파악: --thread 로 이 대화에서 뭘 시켰는지 목록 확인
65
+ - 작업 후 자기 점검: 삽질 패턴 / 효율 패턴 회고
66
+
67
+ Examples:
68
+ crewx dreaming --task=tsk_abc123
69
+ crewx dreaming --thread=thd_xyz789 --recent=5
70
+ crewx dreaming --thread=thd_xyz789 --recent=20
71
+ `);
72
+ }
73
+ async function main(inputArgs) {
74
+ const args = inputArgs ?? process.argv.slice(2);
75
+ if (!args.length || args[0] === '--help' || args[0] === '-h') {
76
+ printUsage();
77
+ return;
78
+ }
79
+ const flags = parseFlags(args);
80
+ if (!flags.task && !flags.thread) {
81
+ console.error('Error: --task=<id> or --thread=<id> is required.\nRun crewx dreaming --help for usage.');
82
+ process.exit(1);
83
+ }
84
+ const taskRepo = new sdk_1.TaskRepository();
85
+ const spanRepo = new sdk_1.SpanRepository();
86
+ if (flags.task) {
87
+ const row = taskRepo.getTask(flags.task);
88
+ if (!row) {
89
+ console.log(`No task found: ${flags.task}`);
90
+ return;
91
+ }
92
+ const spans = spanRepo.findByTaskId(flags.task);
93
+ const result = (0, analyzer_js_1.analyzeTask)(row, spans);
94
+ if (flags.json) {
95
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
96
+ return;
97
+ }
98
+ console.log((0, renderer_js_1.renderTaskFull)(result));
99
+ return;
100
+ }
101
+ if (flags.thread) {
102
+ const recent = flags.recent ?? 5;
103
+ const allTasks = taskRepo.findTasksByThread(flags.thread);
104
+ const topLevel = allTasks
105
+ .filter((t) => !t.parent_task_id)
106
+ .sort((a, b) => (b.started_at > a.started_at ? 1 : -1))
107
+ .slice(0, recent);
108
+ const summaryRows = topLevel.map((t) => ({
109
+ taskId: t.id,
110
+ agentId: t.agent_id,
111
+ status: t.status,
112
+ promptSummary: t.prompt ? t.prompt.split('\n')[0].slice(0, 100) : null,
113
+ startedAt: t.started_at,
114
+ duration: t.duration_ms != null ? Math.round(t.duration_ms / 1000) : null,
115
+ }));
116
+ if (flags.json) {
117
+ process.stdout.write(JSON.stringify(summaryRows, null, 2) + '\n');
118
+ return;
119
+ }
120
+ console.log((0, renderer_js_1.renderThreadTaskList)(summaryRows, flags.thread, recent));
121
+ return;
122
+ }
123
+ }
124
+ if (require.main === module) {
125
+ main().catch((e) => {
126
+ console.error(e.message);
127
+ process.exit(1);
128
+ });
129
+ }
130
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SpanRow, TaskRow } from '@crewx/sdk';
2
+ import type { TaskAnalysis } from './types.js';
3
+ export declare function normalizeToolName(name: string | null | undefined): string;
4
+ interface RawToolCall {
5
+ toolUseId: string | null;
6
+ name: string;
7
+ input: string | null;
8
+ isError: boolean | null;
9
+ resultPreview: string | null;
10
+ }
11
+ export declare function extractToolCallsFromLogs(logs: unknown[]): RawToolCall[];
12
+ export declare function analyzeTask(row: TaskRow, spans: SpanRow[]): TaskAnalysis;
13
+ export {};
14
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAIV,YAAY,EACb,MAAM,YAAY,CAAC;AA6BpB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAUzE;AAyDD,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CA6DvE;AAoLD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,CAmExE"}
@@ -0,0 +1,414 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeToolName = normalizeToolName;
4
+ exports.extractToolCallsFromLogs = extractToolCallsFromLogs;
5
+ exports.analyzeTask = analyzeTask;
6
+ const sdk_1 = require("@crewx/sdk");
7
+ const VERIFY_COMMANDS = [
8
+ 'tsc', 'npm test', 'npm run test', 'npm run lint', 'eslint',
9
+ 'prettier', 'jest', 'vitest', 'biome', 'npx tsc',
10
+ ];
11
+ const BASH_ERROR_PATTERNS = [
12
+ /error/i, /failed/i, /exit code [^0]/, /cannot find/i,
13
+ /does not exist/i, /FAILED/, /✗/, /ERR!/,
14
+ ];
15
+ const ERROR_CATEGORIES = [
16
+ [/Type .+ is not assignable to type/i, '타입 불일치'],
17
+ [/Cannot find module/i, '모듈 경로 오류'],
18
+ [/Property .+ does not exist/i, '존재하지 않는 프로퍼티'],
19
+ [/Expected \d+ arguments/i, '인자 수 불일치'],
20
+ [/Cannot find name/i, '미선언 변수/함수'],
21
+ [/has no exported member/i, 'export 누락'],
22
+ [/FAIL|AssertionError|expect\(/i, '테스트 실패'],
23
+ [/SyntaxError|Unexpected token/i, '구문 오류'],
24
+ ];
25
+ const FILE_PLACEHOLDERS = new Set(['Read File', 'Edit File', 'Write File', 'Terminal', '{}', '']);
26
+ function normalizeToolName(name) {
27
+ if (!name)
28
+ return '';
29
+ const lower = name.toLowerCase();
30
+ if (lower === 'bash' || lower === 'terminal')
31
+ return 'Bash';
32
+ if (lower === 'read' || lower === 'view')
33
+ return 'Read';
34
+ if (lower === 'edit' || lower === 'apply_patch')
35
+ return 'Edit';
36
+ if (lower === 'write')
37
+ return 'Write';
38
+ if (lower === 'grep' || lower === 'rg')
39
+ return 'Grep';
40
+ if (lower === 'glob' || lower === 'find')
41
+ return 'Find';
42
+ return name;
43
+ }
44
+ function shortenPath(p) {
45
+ const segments = p.replace(/\\/g, '/').split('/').filter(Boolean);
46
+ const keep = segments.length <= 3 ? segments : segments.slice(-3);
47
+ return keep.join('/');
48
+ }
49
+ function extractFilePath(toolName, input) {
50
+ const normalized = normalizeToolName(toolName);
51
+ if (normalized !== 'Read' && normalized !== 'Edit' && normalized !== 'Write')
52
+ return null;
53
+ if (!input)
54
+ return null;
55
+ if (FILE_PLACEHOLDERS.has(input))
56
+ return null;
57
+ if (input.includes('*** Update File:') || input.includes('*** Add File:')) {
58
+ const paths = [];
59
+ for (const m of input.matchAll(/\*\*\*\s+(?:Update|Add)\s+File:\s*(.+)/g)) {
60
+ const fp = m[1].trim();
61
+ if (fp)
62
+ paths.push(shortenPath(fp));
63
+ }
64
+ return paths.length ? paths : null;
65
+ }
66
+ let cleaned = input;
67
+ if (/^(Read|Edit|Write|View)\s+/.test(cleaned)) {
68
+ cleaned = cleaned.replace(/^(Read|Edit|Write|View)\s+/, '');
69
+ }
70
+ if (/[*?{}]/.test(cleaned))
71
+ return null;
72
+ if (cleaned.length > 300)
73
+ return null;
74
+ if (!/\.\w+$/.test(cleaned) && !cleaned.includes('/'))
75
+ return null;
76
+ if (cleaned.startsWith('/') || /^[A-Za-z]:[\\/]/.test(cleaned)) {
77
+ return shortenPath(cleaned);
78
+ }
79
+ return cleaned;
80
+ }
81
+ function detectProvider(stdoutLines) {
82
+ const types = new Set();
83
+ for (const line of stdoutLines) {
84
+ try {
85
+ const p = JSON.parse(line);
86
+ if (p.type)
87
+ types.add(p.type);
88
+ }
89
+ catch { }
90
+ }
91
+ if (types.has('turn.started') || types.has('turn.failed') || types.has('thread.started'))
92
+ return 'codex';
93
+ if (types.has('assistant.message_delta') || types.has('tool.execution_complete'))
94
+ return 'copilot';
95
+ if (types.has('step_start') && types.has('step_finish'))
96
+ return 'opencode';
97
+ if (types.has('system') && types.has('result'))
98
+ return 'claude';
99
+ if (types.has('init') && types.has('message'))
100
+ return 'gemini';
101
+ if (types.has('result') && types.has('assistant'))
102
+ return 'claude';
103
+ return null;
104
+ }
105
+ function extractToolCallsFromLogs(logs) {
106
+ if (!Array.isArray(logs))
107
+ return [];
108
+ const logEntries = logs;
109
+ const stdoutLines = logEntries
110
+ .filter((e) => e.level === 'stdout' && e.message)
111
+ .map((e) => e.message);
112
+ const provider = detectProvider(stdoutLines);
113
+ const allEntries = [];
114
+ for (const entry of logEntries) {
115
+ if (entry.level === 'info' && entry.message) {
116
+ allEntries.push(...(0, sdk_1.defaultParseEvent)(entry.message, entry.timestamp));
117
+ }
118
+ else if (entry.level === 'stdout' && entry.message && provider) {
119
+ allEntries.push(...(0, sdk_1.parseStdoutEvent)('', entry.message, provider));
120
+ }
121
+ }
122
+ if (!allEntries.length)
123
+ return [];
124
+ const toolUseMap = new Map();
125
+ const toolUseOrder = [];
126
+ for (const e of allEntries) {
127
+ if (e.type === 'tool_use') {
128
+ const tc = {
129
+ toolUseId: e.toolUseId ?? null,
130
+ name: normalizeToolName(e.toolName),
131
+ input: e.toolInput ?? null,
132
+ isError: null,
133
+ resultPreview: null,
134
+ };
135
+ const id = tc.toolUseId;
136
+ if (id) {
137
+ if (toolUseMap.has(id)) {
138
+ toolUseMap.get(id).input = tc.input;
139
+ continue;
140
+ }
141
+ toolUseMap.set(id, tc);
142
+ }
143
+ toolUseOrder.push(tc);
144
+ }
145
+ else if (e.type === 'tool_result') {
146
+ const resultE = e;
147
+ if (resultE.toolUseId && toolUseMap.has(resultE.toolUseId)) {
148
+ const tc = toolUseMap.get(resultE.toolUseId);
149
+ tc.isError = resultE.isError === true;
150
+ tc.resultPreview = resultE.resultPreview ?? null;
151
+ }
152
+ else {
153
+ for (let i = toolUseOrder.length - 1; i >= 0; i--) {
154
+ const tc2 = toolUseOrder[i];
155
+ if (tc2.resultPreview === null) {
156
+ tc2.isError = resultE.isError === true;
157
+ tc2.resultPreview = resultE.resultPreview ?? null;
158
+ break;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ return toolUseOrder;
165
+ }
166
+ function normalizeSkillName(spanName) {
167
+ const bracket = spanName.match(/^\[skill:([^\]]+)\]/);
168
+ if (bracket) {
169
+ const raw = bracket[1];
170
+ if (raw === 'memory-v2')
171
+ return 'crewx/memory';
172
+ return raw;
173
+ }
174
+ if (spanName.startsWith('skill:'))
175
+ return spanName.slice(6);
176
+ return spanName;
177
+ }
178
+ function extractSkillSubCmd(skillName, input) {
179
+ if (!input)
180
+ return null;
181
+ const tokens = input.trim().split(/\s+/);
182
+ const stripMap = {
183
+ 'crewx/memory': 'memory', 'crewx/doc': 'doc', 'crewx/skill': 'skill',
184
+ 'crewx/workflow': 'workflow', 'tsserver': 'tsserver',
185
+ };
186
+ if (skillName === 'crewx/search')
187
+ return null;
188
+ let i = 0;
189
+ const prefix = stripMap[skillName];
190
+ if (prefix && tokens[0] === prefix)
191
+ i++;
192
+ const sub = tokens[i];
193
+ if (!sub || sub.startsWith('-') || sub.startsWith('/'))
194
+ return null;
195
+ return sub;
196
+ }
197
+ function aggregateSpans(spans) {
198
+ const bySkill = {};
199
+ for (const s of spans) {
200
+ if (s.input && s.input.includes('summarize-dirty'))
201
+ continue;
202
+ const skill = normalizeSkillName(s.name);
203
+ if (!bySkill[skill])
204
+ bySkill[skill] = { count: 0, subCmds: {} };
205
+ bySkill[skill].count++;
206
+ const sub = extractSkillSubCmd(skill, s.input ?? null);
207
+ if (sub)
208
+ bySkill[skill].subCmds[sub] = (bySkill[skill].subCmds[sub] ?? 0) + 1;
209
+ }
210
+ return bySkill;
211
+ }
212
+ function classifyBashCmd(cmd) {
213
+ if (!cmd)
214
+ return null;
215
+ for (const v of VERIFY_COMMANDS) {
216
+ if (cmd.includes(v))
217
+ return v;
218
+ }
219
+ return null;
220
+ }
221
+ function isBashFailed(tc) {
222
+ if (tc.isError === true)
223
+ return true;
224
+ if (!tc.resultPreview)
225
+ return false;
226
+ return BASH_ERROR_PATTERNS.some((p) => p.test(tc.resultPreview));
227
+ }
228
+ function categorizeError(msg) {
229
+ if (!msg)
230
+ return null;
231
+ for (const [pattern, cat] of ERROR_CATEGORIES) {
232
+ if (pattern.test(msg))
233
+ return cat;
234
+ }
235
+ return null;
236
+ }
237
+ function buildTimeline(toolCalls) {
238
+ const fileEditCounts = {};
239
+ return toolCalls.map((tc) => {
240
+ const name = normalizeToolName(tc.name);
241
+ const entry = {
242
+ name,
243
+ input: tc.input,
244
+ isError: tc.isError,
245
+ resultPreview: tc.resultPreview,
246
+ filePath: null,
247
+ bashCmd: null,
248
+ bashResult: null,
249
+ bashErrorMsg: null,
250
+ errorCategory: null,
251
+ isVerify: false,
252
+ editCount: null,
253
+ };
254
+ if (name === 'Read' || name === 'Edit' || name === 'Write') {
255
+ entry.filePath = extractFilePath(tc.name, tc.input);
256
+ }
257
+ if ((name === 'Edit' || name === 'Write') && entry.filePath) {
258
+ const paths = Array.isArray(entry.filePath) ? entry.filePath : [entry.filePath];
259
+ for (const p of paths)
260
+ fileEditCounts[p] = (fileEditCounts[p] ?? 0) + 1;
261
+ entry.editCount = fileEditCounts[paths[0]] ?? null;
262
+ }
263
+ if (name === 'Bash') {
264
+ entry.bashCmd = tc.input ? tc.input.split('\n')[0].slice(0, 150) : '';
265
+ entry.isVerify = !!classifyBashCmd(entry.bashCmd);
266
+ const failed = isBashFailed(tc);
267
+ entry.bashResult = failed ? 'fail' : 'pass';
268
+ if (failed && tc.resultPreview) {
269
+ entry.bashErrorMsg = tc.resultPreview.trim().split('\n')[0].slice(0, 100);
270
+ entry.errorCategory = categorizeError(tc.resultPreview);
271
+ }
272
+ }
273
+ return entry;
274
+ });
275
+ }
276
+ function detectPatterns(timeline) {
277
+ const struggles = [];
278
+ const efficients = [];
279
+ for (let i = 0; i < timeline.length; i++) {
280
+ const e = timeline[i];
281
+ if (e.name !== 'Bash' || !e.isVerify || e.bashResult !== 'pass')
282
+ continue;
283
+ const verifyType = classifyBashCmd(e.bashCmd);
284
+ const failIndices = [];
285
+ let j = i - 1;
286
+ while (j >= 0) {
287
+ const prev = timeline[j];
288
+ if (prev.name === 'Bash' && prev.isVerify) {
289
+ if (classifyBashCmd(prev.bashCmd) === verifyType && prev.bashResult === 'fail') {
290
+ failIndices.unshift(j);
291
+ }
292
+ else if (prev.bashResult === 'pass') {
293
+ break;
294
+ }
295
+ }
296
+ j--;
297
+ }
298
+ if (failIndices.length >= 1) {
299
+ const startI = failIndices[0];
300
+ const editFiles = {};
301
+ const errors = [];
302
+ for (let k = startI; k <= i; k++) {
303
+ const t = timeline[k];
304
+ if ((t.name === 'Edit' || t.name === 'Write') && t.filePath) {
305
+ const paths = Array.isArray(t.filePath) ? t.filePath : [t.filePath];
306
+ for (const p of paths)
307
+ editFiles[p] = (editFiles[p] ?? 0) + 1;
308
+ }
309
+ if (t.name === 'Bash' && t.bashResult === 'fail' && t.bashErrorMsg) {
310
+ errors.push(t.bashErrorMsg);
311
+ }
312
+ }
313
+ const errorCategories = errors.map(categorizeError).filter((c) => c !== null);
314
+ struggles.push({
315
+ startIdx: startI,
316
+ endIdx: i,
317
+ failCount: failIndices.length,
318
+ editFiles,
319
+ errors: [...new Set(errors)].slice(0, 3),
320
+ errorCategories: [...new Set(errorCategories)],
321
+ verifyCmd: verifyType,
322
+ });
323
+ }
324
+ else {
325
+ let editCount = 0, readCount = 0, k = i - 1;
326
+ while (k >= 0) {
327
+ const prev = timeline[k];
328
+ if (prev.name === 'Edit' || prev.name === 'Write')
329
+ editCount++;
330
+ else if (prev.name === 'Read' || prev.name === 'Grep' || prev.name === 'Find')
331
+ readCount++;
332
+ else
333
+ break;
334
+ k--;
335
+ }
336
+ if (editCount > 0) {
337
+ efficients.push({ startIdx: k + 1, endIdx: i, readCount, editCount });
338
+ }
339
+ }
340
+ }
341
+ return { struggles, efficients };
342
+ }
343
+ function analyzeTask(row, spans) {
344
+ let logs = [];
345
+ try {
346
+ const parsed = JSON.parse(row.logs ?? '[]');
347
+ if (Array.isArray(parsed))
348
+ logs = parsed;
349
+ }
350
+ catch { }
351
+ const toolCalls = extractToolCallsFromLogs(logs);
352
+ const duration = row.duration_ms != null ? Math.round(row.duration_ms / 1000) : null;
353
+ let metaProvider = null;
354
+ if (row.metadata) {
355
+ try {
356
+ metaProvider = JSON.parse(row.metadata).provider ?? null;
357
+ }
358
+ catch { }
359
+ }
360
+ const timeline = buildTimeline(toolCalls);
361
+ const patterns = detectPatterns(timeline);
362
+ const readFiles = new Set();
363
+ const editFiles = new Set();
364
+ let bashCount = 0, verifyRuns = 0;
365
+ for (const e of timeline) {
366
+ const paths = e.filePath
367
+ ? (Array.isArray(e.filePath) ? e.filePath : [e.filePath])
368
+ : [];
369
+ if (e.name === 'Read')
370
+ paths.forEach((p) => readFiles.add(p));
371
+ else if (e.name === 'Edit' || e.name === 'Write')
372
+ paths.forEach((p) => editFiles.add(p));
373
+ else if (e.name === 'Bash') {
374
+ bashCount++;
375
+ if (e.isVerify)
376
+ verifyRuns++;
377
+ }
378
+ }
379
+ const skills = aggregateSpans(spans);
380
+ const hasEdits = editFiles.size > 0;
381
+ const hasDoc = !!(skills['crewx/doc'] && skills['crewx/doc'].count > 0);
382
+ const hasMemory = !!(skills['crewx/memory'] && skills['crewx/memory'].count > 0);
383
+ const hasTsserver = !!(skills['tsserver'] && skills['tsserver'].count > 0);
384
+ const hasSearch = !!(skills['crewx/search'] && skills['crewx/search'].count > 0);
385
+ const promptSummary = row.prompt ? row.prompt.split('\n')[0].slice(0, 120) : null;
386
+ const resultSummary = row.result ? row.result.split('\n')[0].slice(0, 120) : null;
387
+ return {
388
+ taskId: row.id,
389
+ agentId: row.agent_id,
390
+ metaProvider,
391
+ status: row.status,
392
+ promptSummary,
393
+ resultSummary,
394
+ duration,
395
+ toolCount: toolCalls.length,
396
+ timeline,
397
+ patterns,
398
+ behavior: {
399
+ readFiles: [...readFiles],
400
+ editFiles: [...editFiles],
401
+ bashCount,
402
+ },
403
+ metrics: {
404
+ struggles: patterns.struggles.length,
405
+ total_retries: patterns.struggles.reduce((s, r) => s + r.failCount, 0),
406
+ efficients: patterns.efficients.length,
407
+ verify_runs: verifyRuns,
408
+ },
409
+ skills,
410
+ skillInsights: { hasEdits, hasDoc, hasMemory, hasTsserver, hasSearch },
411
+ hasStruggles: patterns.struggles.length > 0,
412
+ };
413
+ }
414
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TaskAnalysis, TaskSummaryRow } from './types.js';
2
+ export declare function renderTaskFull(r: TaskAnalysis): string;
3
+ export declare function renderThreadTaskList(rows: TaskSummaryRow[], threadId: string, recent: number): string;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AA+B9E,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAwFtD;AAWD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0BrG"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTaskFull = renderTaskFull;
4
+ exports.renderThreadTaskList = renderThreadTaskList;
5
+ function renderTimelineEntry(e, numWidth, num) {
6
+ const n = String(num).padStart(numWidth);
7
+ if (e.name === 'Read' || e.name === 'Grep' || e.name === 'Find') {
8
+ const fp = Array.isArray(e.filePath) ? e.filePath.join(', ') : (e.filePath ?? e.input?.slice(0, 50) ?? '');
9
+ return ` ${n}. ${e.name.padEnd(5)} ${fp}`;
10
+ }
11
+ if (e.name === 'Edit' || e.name === 'Write') {
12
+ const fp = Array.isArray(e.filePath) ? e.filePath.join(', ') : (e.filePath ?? '');
13
+ let suffix = '';
14
+ if (e.editCount === 2)
15
+ suffix = ' ← 같은 파일 재수정';
16
+ else if ((e.editCount ?? 0) > 2)
17
+ suffix = ` ← 같은 파일 ${e.editCount}번째 수정`;
18
+ return ` ${n}. ${e.name.padEnd(5)} ${fp}${suffix}`;
19
+ }
20
+ if (e.name === 'Bash') {
21
+ const cmd = e.bashCmd ?? '';
22
+ const display = cmd.length > 72 ? cmd.slice(0, 71) + '…' : cmd.padEnd(72);
23
+ if (e.bashResult === 'fail') {
24
+ return ` ${n}. Bash ${display} → ❌ ${(e.bashErrorMsg ?? 'failed').slice(0, 80)}`;
25
+ }
26
+ return ` ${n}. Bash ${display} → ✅ pass`;
27
+ }
28
+ const hint = e.input ? e.input.slice(0, 80) : '';
29
+ return ` ${n}. ${(e.name || '?').padEnd(5)} ${hint}`;
30
+ }
31
+ function renderTaskFull(r) {
32
+ const out = [];
33
+ out.push(`\n━━━ Dreaming: task ${r.taskId} ━━━`);
34
+ const pTag = r.metaProvider ? ` (${r.metaProvider})` : '';
35
+ out.push(`Agent: ${r.agentId}${pTag} | Status: ${r.status} | Duration: ${r.duration != null ? r.duration + 's' : '-'} | Tools: ${r.toolCount} calls`);
36
+ if (r.promptSummary)
37
+ out.push(`📋 지시: ${r.promptSummary}`);
38
+ if (r.resultSummary)
39
+ out.push(`📝 결론: ${r.resultSummary}`);
40
+ if (!r.timeline.length) {
41
+ out.push('\n (tool call 데이터 없음)');
42
+ return out.join('\n');
43
+ }
44
+ const anno = {};
45
+ for (const s of r.patterns.struggles) {
46
+ const top = Object.entries(s.editFiles).sort((a, b) => b[1] - a[1])[0];
47
+ const file = top ? top[0] : '(unknown)';
48
+ const errHint = s.errorCategories[0] ?? (s.errors[0] ? s.errors[0].slice(0, 50) : '');
49
+ const cause = errHint ? ` — ${errHint}` : '';
50
+ anno[s.endIdx] = `💡 삽질: ${file} ${s.failCount + 1}회 수정 (${s.startIdx + 1}→${s.endIdx + 1})${cause}`;
51
+ }
52
+ for (const e of r.patterns.efficients) {
53
+ const parts = [];
54
+ if (e.readCount > 0)
55
+ parts.push(`Read ${e.readCount}개`);
56
+ parts.push(`Edit ${e.editCount}개`);
57
+ parts.push('검증 한방 통과');
58
+ anno[e.endIdx] = `💡 효율: ${parts.join(' → ')}`;
59
+ }
60
+ out.push('\n[타임라인]');
61
+ const nw = String(r.timeline.length).length;
62
+ for (let i = 0; i < r.timeline.length; i++) {
63
+ out.push(renderTimelineEntry(r.timeline[i], nw, i + 1));
64
+ if (anno[i] !== undefined)
65
+ out.push(` ${anno[i]}`);
66
+ }
67
+ const skillEntries = Object.entries(r.skills).sort((a, b) => b[1].count - a[1].count);
68
+ if (skillEntries.length > 0) {
69
+ out.push('\n[스킬 사용]');
70
+ for (const [name, data] of skillEntries) {
71
+ const subs = Object.entries(data.subCmds).sort((a, b) => b[1] - a[1]).map(([s]) => s);
72
+ const subStr = subs.length > 0 ? ` (${subs.join(', ')})` : '';
73
+ out.push(` ${name.padEnd(16)} ${String(data.count).padStart(2)}회${subStr}`);
74
+ }
75
+ }
76
+ out.push('\n[회고 요약]');
77
+ if (r.patterns.efficients.length > 0) {
78
+ out.push(` ✅ 효율 패턴: Read→Edit→검증 한방 통과 ${r.patterns.efficients.length}건`);
79
+ }
80
+ if (r.patterns.struggles.length > 0) {
81
+ const details = r.patterns.struggles.map((s) => {
82
+ const top = Object.entries(s.editFiles).sort((a, b) => b[1] - a[1])[0];
83
+ return top ? `${top[0]} ${top[1]}회` : null;
84
+ }).filter((x) => x !== null).join(', ');
85
+ out.push(` ⚠️ 삽질 패턴: 같은 파일 반복 수정 ${r.patterns.struggles.length}건 (${details})`);
86
+ const cats = {};
87
+ for (const s of r.patterns.struggles) {
88
+ for (const c of s.errorCategories)
89
+ cats[c] = (cats[c] ?? 0) + 1;
90
+ }
91
+ const topCat = Object.entries(cats).sort((a, b) => b[1] - a[1])[0];
92
+ if (topCat)
93
+ out.push(` 💡 인사이트: 에러 대부분 ${topCat[0]} (${topCat[1]}건)`);
94
+ }
95
+ if (!r.patterns.efficients.length && !r.patterns.struggles.length) {
96
+ out.push(' 📊 특이 패턴 없음 — 일반적인 작업 흐름');
97
+ }
98
+ const si = r.skillInsights;
99
+ if (si.hasEdits && !si.hasDoc) {
100
+ out.push(' 📚 설계서 미참조 — doc 호출 없이 Edit 시작 (설계서 먼저 확인하면 삽질 줄일 수 있음)');
101
+ }
102
+ if (!si.hasMemory) {
103
+ out.push(' 🧠 메모리 미확인 — 과거 기록 확인 없이 작업 (이전 결정과 충돌 가능)');
104
+ }
105
+ if (si.hasTsserver) {
106
+ const tsCount = r.skills['tsserver']?.count ?? 0;
107
+ out.push(` 🔍 코드 분석 활용 — tsserver ${tsCount}회 사용`);
108
+ }
109
+ if (si.hasSearch) {
110
+ const sCount = r.skills['crewx/search']?.count ?? 0;
111
+ out.push(` 🔎 검색 활용 — crewx/search ${sCount}회 사용`);
112
+ }
113
+ return out.join('\n');
114
+ }
115
+ function statusEmoji(status) {
116
+ if (status === 'success' || status === 'completed' || status === 'done')
117
+ return '✅';
118
+ if (status === 'failed')
119
+ return '❌';
120
+ if (status === 'running')
121
+ return '🔄';
122
+ return '⏸';
123
+ }
124
+ function renderThreadTaskList(rows, threadId, recent) {
125
+ const out = [];
126
+ out.push(`\n━━━ Dreaming: thread ${threadId} — 최근 ${recent}건 ━━━`);
127
+ out.push(`태스크 목록: ${rows.length}건`);
128
+ out.push('');
129
+ if (!rows.length) {
130
+ out.push(' (태스크 없음)');
131
+ return out.join('\n');
132
+ }
133
+ const idW = Math.max(...rows.map((r) => r.taskId.length));
134
+ const agentW = Math.max(...rows.map((r) => r.agentId.length));
135
+ for (let i = 0; i < rows.length; i++) {
136
+ const r = rows[i];
137
+ const num = String(i + 1).padStart(String(rows.length).length);
138
+ const icon = statusEmoji(r.status);
139
+ const dur = r.duration != null ? `${r.duration}s` : ' -';
140
+ const prompt = r.promptSummary ? r.promptSummary.slice(0, 55) : '';
141
+ out.push(` ${num}. ${icon} ${r.taskId.padEnd(idW)} | ${r.agentId.padEnd(agentW)} | ${r.status.padEnd(9)} | ${dur.padStart(5)} | ${prompt}`);
142
+ }
143
+ out.push('');
144
+ out.push(` 드릴다운: crewx dreaming --task=<id>`);
145
+ return out.join('\n');
146
+ }
147
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ export interface TimelineEntry {
2
+ name: string;
3
+ input: string | null;
4
+ isError: boolean | null;
5
+ resultPreview: string | null;
6
+ filePath: string | string[] | null;
7
+ bashCmd: string | null;
8
+ bashResult: 'pass' | 'fail' | null;
9
+ bashErrorMsg: string | null;
10
+ errorCategory: string | null;
11
+ isVerify: boolean;
12
+ editCount: number | null;
13
+ }
14
+ export interface StrugglePattern {
15
+ startIdx: number;
16
+ endIdx: number;
17
+ failCount: number;
18
+ editFiles: Record<string, number>;
19
+ errors: string[];
20
+ errorCategories: string[];
21
+ verifyCmd: string;
22
+ }
23
+ export interface EfficientPattern {
24
+ startIdx: number;
25
+ endIdx: number;
26
+ readCount: number;
27
+ editCount: number;
28
+ }
29
+ export interface TaskAnalysis {
30
+ taskId: string;
31
+ agentId: string;
32
+ metaProvider: string | null;
33
+ status: string;
34
+ promptSummary: string | null;
35
+ resultSummary: string | null;
36
+ duration: number | null;
37
+ toolCount: number;
38
+ timeline: TimelineEntry[];
39
+ patterns: {
40
+ struggles: StrugglePattern[];
41
+ efficients: EfficientPattern[];
42
+ };
43
+ behavior: {
44
+ readFiles: string[];
45
+ editFiles: string[];
46
+ bashCount: number;
47
+ };
48
+ metrics: {
49
+ struggles: number;
50
+ total_retries: number;
51
+ efficients: number;
52
+ verify_runs: number;
53
+ };
54
+ skills: Record<string, {
55
+ count: number;
56
+ subCmds: Record<string, number>;
57
+ }>;
58
+ skillInsights: {
59
+ hasEdits: boolean;
60
+ hasDoc: boolean;
61
+ hasMemory: boolean;
62
+ hasTsserver: boolean;
63
+ hasSearch: boolean;
64
+ };
65
+ hasStruggles: boolean;
66
+ }
67
+ export interface TaskSummaryRow {
68
+ taskId: string;
69
+ agentId: string;
70
+ status: string;
71
+ promptSummary: string | null;
72
+ startedAt: string | null;
73
+ duration: number | null;
74
+ }
75
+ export interface DreamingFlags {
76
+ task: string | null;
77
+ thread: string | null;
78
+ agent: string | null;
79
+ days: number;
80
+ recent: number | null;
81
+ json: boolean;
82
+ all: boolean;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,EAAE;QAAE,SAAS,EAAE,eAAe,EAAE,CAAC;QAAC,UAAU,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC;IAC3E,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3E,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@crewx/dreaming",
3
+ "version": "0.1.0-rc.1",
4
+ "description": "Dreaming — mandatory retrospection skill for CrewX agents (task/thread review)",
5
+ "type": "commonjs",
6
+ "main": "dist/cli.js",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/cli.js",
10
+ "require": "./dist/cli.js",
11
+ "default": "./dist/cli.js"
12
+ },
13
+ "./cli": {
14
+ "import": "./dist/cli.js",
15
+ "require": "./dist/cli.js",
16
+ "default": "./dist/cli.js"
17
+ }
18
+ },
19
+ "bin": {
20
+ "dreaming": "./dist/cli.js"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "SKILL.md"
25
+ ],
26
+ "keywords": [
27
+ "crewx",
28
+ "dreaming",
29
+ "retrospection",
30
+ "analytics"
31
+ ],
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "@crewx/sdk": "0.8.8-rc.19",
35
+ "@crewx/shared": "0.0.5"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^20.0.0",
39
+ "typescript": "^5.0.0"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "clean": "rm -rf dist",
44
+ "test": "echo no tests"
45
+ }
46
+ }