@crewx/dreaming 0.1.0-rc.2 → 0.1.0-rc.200

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 CHANGED
@@ -1,97 +1,143 @@
1
1
  ---
2
2
  name: crewx/dreaming
3
3
  description: >
4
- 선별 실행하는 필수 회고 스킬. 태스크/대화 단위로 에이전트 행동을 되돌아보는
5
- 1급 자기성찰 도구. memory/doc/search와 동급으로 상황 판단해 주도적으로 호출한다.
4
+ Essential retrospective skill invoked selectively. A first-class self-reflection
5
+ tool for reviewing agent behavior at the task/conversation level. On par with
6
+ memory/doc/search — the agent judges the situation and calls it proactively.
6
7
  metadata:
7
8
  version: 0.1.0
8
9
  built-in: true
9
10
  ---
10
11
 
11
- # Dreaming — 필수 회고 스킬
12
+ # Dreaming — Essential Retrospective Skill
12
13
 
13
- **dreaming은 에이전트의 1급 자기성찰 도구다.**
14
- memory(기억 저장/검색), doc(설계서 탐색), search(코드 검색)와 동급으로,
15
- 에이전트가 상황을 판단해 **스스로 호출**한다. 수동 요청이 오기를 기다리지 않는다.
14
+ **dreaming is the agent's first-class self-reflection tool.**
15
+ On par with memory (store/search memories), doc (explore design docs), and search (search code),
16
+ the agent judges the situation and **calls it on its own** — it doesn't wait for a manual request.
16
17
 
17
- ## 두 가지 시야
18
+ ## Two Views
18
19
 
19
- | 명령어 | 시야 | 쓰는 때 |
20
+ | Command | View | When to use |
20
21
  |--------|------|---------|
21
- | `crewx dreaming --task=tsk_xxx` | 돋보기 | 태스크 1건을 깊게 — 행동 타임라인, 삽질 패턴, 효율 패턴, 스킬 사용 현황 |
22
- | `crewx dreaming --thread=thd_xxx --recent=N` | 지도 | 대화 내 최근 N개 태스크 목록 + 각 종료상태 |
22
+ | `crewx dreaming --task=tsk_xxx` | Magnifier | Deep dive into one task — action timeline, struggle patterns, efficiency patterns, skill usage |
23
+ | `crewx dreaming --thread=thd_xxx --recent=N` | Map | List of the last N tasks in the conversation + each one's end status |
24
+ | `crewx dreaming --thread=thd_xxx --agent=self --continue` | Continue | Detail on my most recent task + rule-based summary of the N before it |
23
25
 
24
- ## 언제 호출할까 (에이전트 판단 기준)
26
+ ## When To Call It (Agent Judgment Criteria)
25
27
 
26
- - **작업 시작 전**: 방금 끊긴 태스크가 있는지 확인 → `--thread` 목록 확인
27
- - **실패 태스크 재시도**: 직전에 어디까지 하다 멈췄는지 → `--task` 로 타임라인 확인
28
- - **대화 맥락 파악**: 이 대화에서 뭘 시켰는지 목록으로 파악 → `--thread --recent=5`
29
- - **작업 후 자기 점검**: 삽질 패턴 / 효율 패턴 확인 → `--task` 로 회고
28
+ - **Before starting work**: Check whether a task was just interrupted → check the `--thread` list
29
+ - **Retrying a failed task**: See where it stopped last time → check the timeline with `--task`
30
+ - **Understanding conversation context**: Get a list of what was asked in this conversation → `--thread --recent=5`
31
+ - **Self-check after a task**: Check for struggle patterns / efficiency patterns → retrospect with `--task`
30
32
 
31
- ## 사용법
33
+ ## Usage
32
34
 
33
35
  ```bash
34
- # 태스크 1건 깊이 회고
36
+ # Deep retrospective on one task
35
37
  crewx dreaming --task=tsk_abc123
36
38
 
37
- # 대화 내 최근 5건 목록 (기본값)
39
+ # List of the last 5 in the conversation (default)
38
40
  crewx dreaming --thread=thd_xyz789
39
41
 
40
- # 더 많이 보기
42
+ # See more
41
43
  crewx dreaming --thread=thd_xyz789 --recent=20
42
44
 
43
- # 특정 태스크 드릴다운
45
+ # Drill down into a specific task
44
46
  crewx dreaming --task=tsk_abc123 --json
45
47
  ```
46
48
 
47
- ## 출력 예시 — --task 모드
49
+ ## Output Example — --task Mode
48
50
 
49
51
  ```
50
52
  ━━━ Dreaming: task tsk_abc123 ━━━
51
53
  Agent: core_dev (acp/claude) | Status: success | Duration: 312s | Tools: 47 calls
52
- 📋 지시: dreaming 빌트인 승격 작업
53
- 📝 결론: packages/built-in/dreaming/ 생성 완료
54
+ 📋 Instruction: promote dreaming to a built-in skill
55
+ 📝 Conclusion: packages/built-in/dreaming/ created successfully
54
56
 
55
- [타임라인]
57
+ [Timeline]
56
58
  1. Read packages/built-in/memory/package.json
57
59
  2. Read packages/built-in/doc/tsconfig.json
58
60
  3. Edit packages/built-in/dreaming/package.json
59
61
  ...
60
62
  41. Bash npx tsc --noEmit → ❌ error TS2345
61
- 42. Edit packages/built-in/dreaming/src/analyzer.ts ← 같은 파일 재수정
63
+ 42. Edit packages/built-in/dreaming/src/analyzer.ts ← re-edited the same file
62
64
  43. Bash npx tsc --noEmit → ✅ pass
63
- 💡 삽질: analyzer.ts 2회 수정 (41→43) — 타입 불일치
65
+ 💡 Struggle: edited analyzer.ts twice (41→43) — type mismatch
64
66
 
65
- [스킬 사용]
66
- crewx/memory 3회 (index, find, save)
67
- crewx/doc 2회 (toc, section)
67
+ [Skill Usage]
68
+ crewx/memory 3x (index, find, save)
69
+ crewx/doc 2x (toc, section)
68
70
 
69
- [회고 요약]
70
- ⚠️ 삽질 패턴: 같은 파일 반복 수정 1건 (analyzer.ts 2회)
71
- 💡 인사이트: 에러 대부분 타입 불일치 (1건)
72
- 🔍 코드 분석 활용 — tsserver 5회 사용
71
+ [Retrospective Summary]
72
+ ⚠️ Struggle pattern: repeated edits to the same file, 1 case (analyzer.ts x2)
73
+ 💡 Insight: most errors were type mismatches (1 case)
74
+ 🔍 Used code analysis — tsserver called 5x
73
75
  ```
74
76
 
75
- ## 출력 예시 — --thread 모드
77
+ ## Output Example — --thread Mode
76
78
 
77
79
  ```
78
- ━━━ Dreaming: thread thd_xyz789 — 최근 5건 ━━━
79
- 태스크 목록: 5건
80
+ ━━━ Dreaming: thread thd_xyz789 — last 5 ━━━
81
+ Task list: 5
80
82
 
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 등록
83
+ 1. ✅ tsk_abc123 | core_dev | success | 312s | promote dreaming to a built-in skill
84
+ 2. ❌ tsk_def456 | core_dev | failed | 45s | tsc build verification
85
+ 3. ✅ tsk_ghi789 | ui_lead | completed | 180s | UI component review
86
+ 4. ✅ tsk_jkl012 | core_dev | success | 240s | apply SDK repository pattern
87
+ 5. ✅ tsk_mno345 | core_dev | success | 90s | register CLI registry
86
88
 
87
- 드릴다운: crewx dreaming --task=<id>
89
+ Drill down: crewx dreaming --task=<id>
88
90
  ```
89
91
 
92
+ ## Output Example — --continue Mode (Continue My Previous Work)
93
+
94
+ Within the same thread, this picks out only the **current agent's own** previous work, showing the most recent one in detail plus rule-based one-line summaries of the ones before it. The summaries are based on tool count / status / duration / files, not an LLM.
95
+
96
+ ```
97
+ ━━━ Continue My Previous Work ━━━
98
+ Thread: thd_xyz789 | Agent: core_lead
99
+
100
+ [Most Recent Task]
101
+
102
+ ━━━ Dreaming: task tsk_123 ━━━
103
+ ... detailed activity log (timeline capped at 30, remove with --full) ...
104
+
105
+ [Previous Task Summary]
106
+ - tsk_122 | ✅ success | 120s | Bash 3x, Read 4x, Edit 0x
107
+ - tsk_121 | ❌ failed | 45s | Bash 2x | ⚠️ struggle
108
+
109
+ ━━━ Next Actions ━━━
110
+ Full activity log:
111
+ crewx dreaming --task=tsk_122 --full
112
+ Detailed task log JSON:
113
+ crewx dreaming --task=tsk_122 --json
114
+ Task list for this conversation:
115
+ crewx dreaming --thread=thd_xyz789 --agent=core_lead
116
+ ```
117
+
118
+ ```bash
119
+ # Continue the current agent's own previous work
120
+ crewx dreaming --thread=thd_xyz789 --agent=self --continue
121
+
122
+ # Explicit agent + last 3 (most recent 1 detailed + previous 2 summarized)
123
+ crewx dreaming --thread=thd_xyz789 --agent=core_lead --continue --recent=3
124
+ ```
125
+
126
+ > `--agent=self` resolves the current agent via the `CREWX_AGENT_ID` environment variable. If the variable isn't set, you must specify an explicit agent id.
127
+
90
128
  ## Options
91
129
 
92
- | 옵션 | 기본값 | 설명 |
130
+ | Option | Default | Description |
93
131
  |------|--------|------|
94
- | `--task=ID` | — | 태스크 ID (tsk_xxx) |
95
- | `--thread=ID` | — | 스레드 ID (thd_xxx) |
96
- | `--recent=N` | 5 | --thread 시 최근 N건 |
97
- | `--json` | false | JSON 출력 |
132
+ | `--task=ID` | — | Task ID (tsk_xxx) |
133
+ | `--thread=ID` | — | Thread ID (thd_xxx) |
134
+ | `--agent=ID` | — | Only this agent within the thread (`self` → current agent) |
135
+ | `--continue` | false | Continue my previous work (most recent 1 detailed + previous N rule-based summary) |
136
+ | `--recent=N` | list 5 / continue 3 | Last N items |
137
+ | `--full` | false | Remove the timeline cap + include raw fields in JSON |
138
+ | `--json` | false | Pure JSON output (no CAL footer) |
139
+
140
+ ## CAL "Next Actions"
141
+
142
+ A CAL footer guiding the next action is appended to the bottom of human-readable output (`--full`, `--json`, thread drill-down).
143
+ **The `--json` output has no footer and can be parsed as a single JSON value.** Without `--full`, the raw input/result fields are excluded from the JSON.
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import { TaskRepository } from '@crewx/sdk';
3
+ import type { TaskLogEntry } from '@crewx/sdk/repository';
4
+ export declare const DEFAULT_ACTIVITY_LOG_BUDGET = 8000;
5
+ export declare function readCanonicalTaskLogs(taskRepo: Pick<TaskRepository, 'readLogs'>, taskId: string): TaskLogEntry[];
2
6
  export declare function main(inputArgs?: string[]): Promise<void>;
3
- //# sourceMappingURL=cli.d.ts.map
7
+
package/dist/cli.js CHANGED
@@ -1,130 +1,38 @@
1
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 — 선별 실행하는 필수 회고 스킬
2
+ "use strict";var j=exports&&exports.__createBinding||(Object.create?(function(r,t,e,n){if(n===void 0)n=e;var s=Object.getOwnPropertyDescriptor(t,e);if(!s||("get"in s?!t.__esModule:s.writable||s.configurable)){s={enumerable:true,get:function(){return t[e]}}}Object.defineProperty(r,n,s)}):(function(r,t,e,n){if(n===void 0)n=e;r[n]=t[e]}));var E=exports&&exports.__setModuleDefault||(Object.create?(function(r,t){Object.defineProperty(r,"default",{enumerable:true,value:t})}):function(r,t){r["default"]=t});var T=exports&&exports.__importStar||(function(){var r=function(t){r=Object.getOwnPropertyNames||function(e){var n=[];for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s))n[n.length]=s;return n};return r(t)};return function(t){if(t&&t.__esModule)return t;var e={};if(t!=null){for(var n=r(t),s=0;s<n.length;s++)if(n[s]!=="default")j(e,t,n[s])}E(e,t);return e}})();Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_ACTIVITY_LOG_BUDGET=void 0;exports.readCanonicalTaskLogs=D;exports.main=A;const b=require("@crewx/sdk");const I=T(require("fs"));const L=T(require("path"));const k=require("./src/analyzer.js");const N=require("./src/scrub.js");const d=require("./src/renderer.js");exports.DEFAULT_ACTIVITY_LOG_BUDGET=8e3;const O=60;const S=30;function C(r){const t={task:null,thread:null,agent:null,days:1,recent:null,json:false,all:false,continue:false,full:false,lookback:3,activityLog:false};for(const e of r){if(e==="--json")t.json=true;else if(e==="--all")t.all=true;else if(e==="--full")t.full=true;else if(e==="--continue")t.continue=true;else if(e==="--activity-log")t.activityLog=true;else if(e.startsWith("--task="))t.task=e.slice("--task=".length);else if(e.startsWith("--thread="))t.thread=e.slice("--thread=".length);else if(e.startsWith("--agent="))t.agent=e.slice("--agent=".length);else if(e.startsWith("--days="))t.days=parseInt(e.slice("--days=".length),10);else if(e.startsWith("--recent="))t.recent=parseInt(e.slice("--recent=".length),10);else if(e.startsWith("--lookback="))t.lookback=parseInt(e.slice("--lookback=".length),10);else if(e==="--help"||e==="-h"){y();process.exit(0)}else if(e.startsWith("--")){console.error(`Unknown option: ${e}
3
+ Run with --help for usage.`);process.exit(1)}}return t}function y(){console.log(`crewx dreaming \u2014 Selective reflection skill
46
4
 
47
- 에이전트가 작업 전/후, 재시도 시 상황을 파악하기 위해 호출하는 1급 자기성찰 도구.
48
- memory/doc/search와 동급으로, 상황에 따라 주도적으로 실행한다.
5
+ A first-class reflection tool agents call before/after work or during retries to recover context.
6
+ Use it proactively alongside memory/doc/search when the situation calls for it.
49
7
 
50
8
  Usage:
51
- crewx dreaming --task=TASK_ID
52
- crewx dreaming --thread=THREAD_ID [--recent=N]
9
+ crewx dreaming --task=TASK_ID [--full] [--json]
10
+ crewx dreaming --thread=THREAD_ID [--agent=AGENT_ID] [--recent=N]
11
+ crewx dreaming --thread=THREAD_ID --agent=AGENT_ID --continue [--recent=N] [--full] [--json]
12
+ crewx dreaming --thread=THREAD_ID --agent=AGENT_ID --activity-log [--lookback=N] [--json]
53
13
 
54
14
  Options:
55
- --task=ID 태스크 1건 깊이 회고 (행동 타임라인 + 스킬 사용 + 삽질/효율 요약)
56
- --thread=ID 대화 내 최근 N개 태스크 목록 + 각 종료상태
57
- --recent=N --thread 시 최근 N건 (기본값: 5)
58
- --json JSON 출력
59
- --help, -h 도움말
15
+ --task=ID Deep reflection for one task (timeline + skill usage + struggle/efficiency summary)
16
+ --thread=ID List the last N tasks in a conversation with each end status
17
+ --agent=ID Restrict thread view to one agent (--agent=self means current agent)
18
+ --continue Continue previous work: latest task details plus rule-based summary of prior tasks
19
+ --activity-log Output precomputed <activity_log> XML of read-only results from previous N tasks
20
+ --lookback=N N-back depth for --activity-log (default: 3, 0 = disabled, max recommended: 5)
21
+ --recent=N Last N items (list default: 5 / continue default: 3)
22
+ --full Show the full timeline and include raw fields in JSON
23
+ --json Pure JSON output without a CAL footer
24
+ --help, -h Show help
60
25
 
61
- 언제 호출할까:
62
- - 작업 시작 전: 방금 끊긴 태스크가 있는지 확인
63
- - 실패 재시도 전: 직전에 어디까지 하다 멈췄는지 확인
64
- - 대화 맥락 파악: --thread 로 이 대화에서 뭘 시켰는지 목록 확인
65
- - 작업 후 자기 점검: 삽질 패턴 / 효율 패턴 회고
26
+ When to call:
27
+ - Before starting: check whether there is an interrupted task
28
+ - Before retrying after failure: recover where the previous attempt stopped
29
+ - To understand conversation context: use --thread to list tasks in this conversation
30
+ - Continue previous work: --thread --agent --continue
31
+ - SDK prompt assembly: --activity-log to inject precomputed read-only results
66
32
 
67
33
  Examples:
68
- crewx dreaming --task=tsk_abc123
34
+ crewx dreaming --task=tsk_abc123 --full
69
35
  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
36
+ crewx dreaming --thread=thd_xyz789 --agent=core_lead --continue
37
+ crewx dreaming --thread=thd_xyz789 --agent=core_lead --activity-log --lookback=2
38
+ `)}function R(){const r=L.join(__dirname,"..","SKILL.md");if(I.existsSync(r)){process.stdout.write(I.readFileSync(r,"utf-8"))}else{y()}}function U(r){if(r!=="self")return r;const t=process.env.CREWX_AGENT_ID;if(!t){console.error("Error: --agent=self requires CREWX_AGENT_ID in the environment.\nPass an explicit agent id instead, e.g. --agent=core_lead.");process.exit(1)}return t}function x(r,t){if(t)return r;return{...r,timeline:r.timeline.map(e=>{const{input:n,resultPreview:s,...g}=e;return g})}}function p(r){process.stdout.write(JSON.stringify((0,N.scrubSecrets)(r),null,2)+"\n")}function v(r,t){return r.findTasksByThread(t).filter(e=>!e.parent_task_id).sort((e,n)=>n.started_at>e.started_at?1:-1)}function D(r,t){try{return r.readLogs(t)?.entries??[]}catch{return[]}}function w(r,t,e){return(0,k.analyzeTask)(e,t.findByTaskId(e.id),D(r,e.id))}async function A(r){const t=r??process.argv.slice(2);if(t[0]==="usage"){R();return}if(!t.length||t[0]==="--help"||t[0]==="-h"){y();return}const e=C(t);const n=U(e.agent);if(!e.task&&!e.thread){console.error("Error: --task=<id> or --thread=<id> is required.\nRun crewx dreaming --help for usage.");process.exit(1)}const s=new b.TaskRepository;const g=new b.SpanRepository;if(e.task){const l=s.getTask(e.task);if(!l){console.log(`No task found: ${e.task}`);return}const a=w(s,g,l);if(e.json){p(x(a,e.full));return}const u=(0,d.renderTaskFull)(a,{maxTimeline:e.full?null:O});const i=[];if(!e.full){i.push({label:"Full activity log",cmd:`crewx dreaming --task=${a.taskId} --full`})}i.push({label:"Detailed task log JSON",cmd:`crewx dreaming --task=${a.taskId} --json`});console.log(u+"\n"+(0,d.buildCalFooter)(i));return}if(e.thread&&e.activityLog){if(!n){console.error("Error: --activity-log requires --agent=<id> (or --agent=self).");process.exit(1)}const l=e.lookback;if(l===0){if(e.json){p({mode:"activity-log",lookback:0,entries:[],truncated:false,xml:""})}else{process.stdout.write("")}return}const a=v(s,e.thread).filter(c=>c.agent_id===n).slice(0,Math.min(l,5));const u=a.map(c=>w(s,g,c));const i=(0,k.buildActivityLog)(u,e.thread,n,l,exports.DEFAULT_ACTIVITY_LOG_BUDGET);if(e.json){p({mode:"activity-log",...i,xml:(0,d.renderActivityLogXml)(i)});return}process.stdout.write((0,d.renderActivityLogXml)(i)+"\n");return}if(e.thread&&e.continue){if(!n){console.error("Error: --continue requires --agent=<id> (or --agent=self).");process.exit(1)}const l=e.recent??3;const a=v(s,e.thread).filter(_=>_.agent_id===n).slice(0,l+1);const u=a.map(_=>w(s,g,_));const i=u[0]??null;const c=u.slice(1).map(k.summarizeAnalysis);const f={mode:"continue",thread:e.thread,agent:n,latest:i,previous:c};if(e.json){p({...f,latest:i?x(i,e.full):null});return}const o=(0,d.renderContinue)(f,{maxTimeline:e.full?null:S});const h=[];const m=c[0]?.taskId??i?.taskId;if(m){h.push({label:"Full activity log",cmd:`crewx dreaming --task=${m} --full`});h.push({label:"Detailed task log JSON",cmd:`crewx dreaming --task=${m} --json`})}h.push({label:"Task list for this conversation",cmd:`crewx dreaming --thread=${e.thread} --agent=${n}`});console.log(o+(h.length?"\n"+(0,d.buildCalFooter)(h):""));return}if(e.thread){const l=e.recent??5;let a=v(s,e.thread);if(n)a=a.filter(o=>o.agent_id===n);a=a.slice(0,l);const u=a.map(o=>({taskId:o.id,agentId:o.agent_id,status:o.status,promptSummary:o.prompt?o.prompt.split("\n")[0].slice(0,100):null,startedAt:o.started_at,duration:o.duration_ms!=null?Math.round(o.duration_ms/1e3):null}));if(e.json){p(u);return}const i=(0,d.renderThreadTaskList)(u,e.thread,l);const c=[];const f=u[0];if(f){const o=n??f.agentId;c.push({label:"Continue previous work",cmd:`crewx dreaming --thread=${e.thread} --agent=${o} --continue`});c.push({label:"Task drilldown",cmd:`crewx dreaming --task=${f.taskId} --full`})}console.log(i+(c.length?"\n"+(0,d.buildCalFooter)(c):""));return}}if(require.main===module){A().catch(r=>{console.error(r.message);process.exit(1)})}
@@ -1,5 +1,5 @@
1
1
  import type { SpanRow, TaskRow } from '@crewx/sdk';
2
- import type { TaskAnalysis } from './types.js';
2
+ import type { TaskAnalysis, TaskActivitySummary, ActivityLogEntry, ActivityLog } from './types.js';
3
3
  export declare function normalizeToolName(name: string | null | undefined): string;
4
4
  interface RawToolCall {
5
5
  toolUseId: string | null;
@@ -8,7 +8,14 @@ interface RawToolCall {
8
8
  isError: boolean | null;
9
9
  resultPreview: string | null;
10
10
  }
11
- export declare function extractToolCallsFromLogs(logs: unknown[]): RawToolCall[];
12
- export declare function analyzeTask(row: TaskRow, spans: SpanRow[]): TaskAnalysis;
11
+ export declare function extractToolCallsFromLogs(logs: unknown[], metaProvider?: string): RawToolCall[];
12
+ export declare function analyzeTask(row: TaskRow, spans: SpanRow[], logs?: unknown[]): TaskAnalysis;
13
+ export declare const READ_ONLY_TOOLS: Set<string>;
14
+ export declare const READ_ONLY_BASH_PREFIXES: string[];
15
+ export declare function isReadOnlyToolCall(name: string, input: string | null): boolean;
16
+ export declare function checkFileStaleness(filePath: string, taskCompletedAt?: string | null): 'ok' | 'stale' | 'unknown';
17
+ export declare function extractActivityLogEntries(analyses: TaskAnalysis[]): ActivityLogEntry[];
18
+ export declare function buildActivityLog(analyses: TaskAnalysis[], threadId: string, agentId: string, lookback: number, tokenBudget: number): ActivityLog;
19
+ export declare function summarizeAnalysis(a: TaskAnalysis): TaskActivitySummary;
13
20
  export {};
14
- //# sourceMappingURL=analyzer.d.ts.map
21
+
@@ -1,414 +1 @@
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
1
+ "use strict";var T=exports&&exports.__createBinding||(Object.create?(function(t,e,s,r){if(r===void 0)r=s;var n=Object.getOwnPropertyDescriptor(e,s);if(!n||("get"in n?!e.__esModule:n.writable||n.configurable)){n={enumerable:true,get:function(){return e[s]}}}Object.defineProperty(t,r,n)}):(function(t,e,s,r){if(r===void 0)r=s;t[r]=e[s]}));var k=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:true,value:e})}):function(t,e){t["default"]=e});var L=exports&&exports.__importStar||(function(){var t=function(e){t=Object.getOwnPropertyNames||function(s){var r=[];for(var n in s)if(Object.prototype.hasOwnProperty.call(s,n))r[r.length]=n;return r};return t(e)};return function(e){if(e&&e.__esModule)return e;var s={};if(e!=null){for(var r=t(e),n=0;n<r.length;n++)if(r[n]!=="default")T(s,e,r[n])}k(s,e);return s}})();Object.defineProperty(exports,"__esModule",{value:true});exports.READ_ONLY_BASH_PREFIXES=exports.READ_ONLY_TOOLS=void 0;exports.normalizeToolName=p;exports.extractToolCallsFromLogs=P;exports.analyzeTask=J;exports.isReadOnlyToolCall=S;exports.checkFileStaleness=x;exports.extractActivityLogEntries=R;exports.buildActivityLog=$;exports.summarizeAnalysis=Q;const M=L(require("fs"));const b=require("@crewx/sdk");const B=["tsc","npm test","npm run test","npm run lint","eslint","prettier","jest","vitest","biome","npx tsc"];const N=[/error/i,/failed/i,/exit code [^0]/,/cannot find/i,/does not exist/i,/FAILED/,/✗/,/ERR!/];const U=[[/Type .+ is not assignable to type/i,"Type mismatch"],[/Cannot find module/i,"Module path error"],[/Property .+ does not exist/i,"Missing property"],[/Expected \d+ arguments/i,"Argument count mismatch"],[/Cannot find name/i,"Undeclared variable/function"],[/has no exported member/i,"Missing export"],[/FAIL|AssertionError|expect\(/i,"Test failure"],[/SyntaxError|Unexpected token/i,"Syntax error"]];const z=new Set(["Read File","Edit File","Write File","Terminal","{}",""]);function p(t){if(!t)return"";const e=t.toLowerCase();if(e==="bash"||e==="terminal")return"Bash";if(e==="read"||e==="view")return"Read";if(e==="edit"||e==="apply_patch")return"Edit";if(e==="write")return"Write";if(e==="grep"||e==="rg")return"Grep";if(e==="glob"||e==="find")return"Find";return t}function w(t){const e=t.replace(/\\/g,"/").split("/").filter(Boolean);const s=e.length<=3?e:e.slice(-3);return s.join("/")}function D(t,e){const s=p(t);if(s!=="Read"&&s!=="Edit"&&s!=="Write")return null;if(!e)return null;if(z.has(e))return null;if(e.includes("*** Update File:")||e.includes("*** Add File:")){const n=[];for(const o of e.matchAll(/\*\*\*\s+(?:Update|Add)\s+File:\s*(.+)/g)){const l=o[1].trim();if(l)n.push(w(l))}return n.length?n:null}let r=e;if(/^(Read|Edit|Write|View)\s+/.test(r)){r=r.replace(/^(Read|Edit|Write|View)\s+/,"")}if(/[*?{}]/.test(r))return null;if(r.length>300)return null;if(!/\.\w+$/.test(r)&&!r.includes("/"))return null;if(r.startsWith("/")||/^[A-Za-z]:[\\/]/.test(r)){return w(r)}return r}function W(t){const e=new Set;for(const s of t){try{const r=JSON.parse(s);if(r.type)e.add(r.type)}catch{}}if(e.has("turn.started")||e.has("turn.failed")||e.has("thread.started"))return"codex";if(e.has("assistant.message_delta")||e.has("tool.execution_complete"))return"copilot";if(e.has("step_start")&&e.has("step_finish"))return"opencode";if(e.has("system")&&e.has("result"))return"claude";if(e.has("init")&&e.has("message"))return"gemini";if(e.has("result")&&e.has("assistant"))return"claude";return null}function j(t,e){const s=t?.split("/").pop();if(s&&s in b.BUILTIN_ADAPTERS)return s;return W(e)}function P(t,e){if(!Array.isArray(t))return[];const s=t;const r=s.filter(i=>i.level==="stdout"&&i.message).map(i=>i.message);const n=j(e,r);const o=[];for(const i of s){if(i.level==="info"&&i.message){o.push(...(0,b.defaultParseEvent)(i.message,i.timestamp))}else if(i.level==="stdout"&&i.message){o.push(...(0,b.parseStdoutEvent)("",i.message,n??void 0))}}if(!o.length)return[];const l=new Map;const c=[];for(const i of o){if(i.type==="tool_use"){const a={toolUseId:i.toolUseId??null,name:p(i.toolName),input:i.toolInput??null,isError:null,resultPreview:null};const u=a.toolUseId;if(u){if(l.has(u)){l.get(u).input=a.input;continue}l.set(u,a)}c.push(a)}else if(i.type==="tool_result"){const a=i;if(a.toolUseId&&l.has(a.toolUseId)){const u=l.get(a.toolUseId);u.isError=a.isError===true;u.resultPreview=a.resultPreview??null}else{for(let u=c.length-1;u>=0;u--){const d=c[u];if(d.resultPreview===null){d.isError=a.isError===true;d.resultPreview=a.resultPreview??null;break}}}}}return c}function V(t){const e=t.match(/^\[skill:([^\]]+)\]/);if(e){const s=e[1];if(s==="memory-v2")return"crewx/memory";return s}if(t.startsWith("skill:"))return t.slice(6);return t}function Y(t,e){if(!e)return null;const s=e.trim().split(/\s+/);const r={"crewx/memory":"memory","crewx/doc":"doc","crewx/skill":"skill","crewx/workflow":"workflow","tsserver":"tsserver"};if(t==="crewx/search")return null;let n=0;const o=r[t];if(o&&s[0]===o)n++;const l=s[n];if(!l||l.startsWith("-")||l.startsWith("/"))return null;return l}function G(t){const e={};for(const s of t){if(s.input&&s.input.includes("summarize-dirty"))continue;const r=V(s.name);if(!e[r])e[r]={count:0,subCmds:{}};e[r].count++;const n=Y(r,s.input??null);if(n)e[r].subCmds[n]=(e[r].subCmds[n]??0)+1}return e}function _(t){if(!t)return null;for(const e of B){if(t.includes(e))return e}return null}function H(t){if(t.isError===true)return true;if(!t.resultPreview)return false;return N.some(e=>e.test(t.resultPreview))}function A(t){if(!t)return null;for(const[e,s]of U){if(e.test(t))return s}return null}function X(t){const e={};return t.map(s=>{const r=p(s.name);const n={name:r,input:s.input,isError:s.isError,resultPreview:s.resultPreview,filePath:null,bashCmd:null,bashResult:null,bashErrorMsg:null,errorCategory:null,isVerify:false,editCount:null};if(r==="Read"||r==="Edit"||r==="Write"){n.filePath=D(s.name,s.input)}if((r==="Edit"||r==="Write")&&n.filePath){const o=Array.isArray(n.filePath)?n.filePath:[n.filePath];for(const l of o)e[l]=(e[l]??0)+1;n.editCount=e[o[0]]??null}if(r==="Bash"){n.bashCmd=s.input?s.input.split("\n")[0].slice(0,150):"";n.isVerify=!!_(n.bashCmd);const o=H(s);n.bashResult=o?"fail":"pass";if(o&&s.resultPreview){n.bashErrorMsg=s.resultPreview.trim().split("\n")[0].slice(0,100);n.errorCategory=A(s.resultPreview)}}return n})}function q(t){const e=[];const s=[];for(let r=0;r<t.length;r++){const n=t[r];if(n.name!=="Bash"||!n.isVerify||n.bashResult!=="pass")continue;const o=_(n.bashCmd);const l=[];let c=r-1;while(c>=0){const i=t[c];if(i.name==="Bash"&&i.isVerify){if(_(i.bashCmd)===o&&i.bashResult==="fail"){l.unshift(c)}else if(i.bashResult==="pass"){break}}c--}if(l.length>=1){const i=l[0];const a={};const u=[];for(let f=i;f<=r;f++){const h=t[f];if((h.name==="Edit"||h.name==="Write")&&h.filePath){const v=Array.isArray(h.filePath)?h.filePath:[h.filePath];for(const g of v)a[g]=(a[g]??0)+1}if(h.name==="Bash"&&h.bashResult==="fail"&&h.bashErrorMsg){u.push(h.bashErrorMsg)}}const d=u.map(A).filter(f=>f!==null);e.push({startIdx:i,endIdx:r,failCount:l.length,editFiles:a,errors:[...new Set(u)].slice(0,3),errorCategories:[...new Set(d)],verifyCmd:o})}else{let i=0,a=0,u=r-1;while(u>=0){const d=t[u];if(d.name==="Edit"||d.name==="Write")i++;else if(d.name==="Read"||d.name==="Grep"||d.name==="Find")a++;else break;u--}if(i>0){s.push({startIdx:u+1,endIdx:r,readCount:a,editCount:i})}}}return{struggles:e,efficients:s}}function J(t,e,s=[]){let r=null;if(t.metadata){try{r=JSON.parse(t.metadata).provider??null}catch{}}const n=P(s,r??void 0);const o=t.duration_ms!=null?Math.round(t.duration_ms/1e3):null;const l=X(n);const c=q(l);const i=new Set;const a=new Set;let u=0,d=0;for(const m of l){const y=m.filePath?Array.isArray(m.filePath)?m.filePath:[m.filePath]:[];if(m.name==="Read")y.forEach(E=>i.add(E));else if(m.name==="Edit"||m.name==="Write")y.forEach(E=>a.add(E));else if(m.name==="Bash"){u++;if(m.isVerify)d++}}const f=G(e);const h=a.size>0;const v=!!(f["crewx/doc"]&&f["crewx/doc"].count>0);const g=!!(f["crewx/memory"]&&f["crewx/memory"].count>0);const C=!!(f["tsserver"]&&f["tsserver"].count>0);const O=!!(f["crewx/search"]&&f["crewx/search"].count>0);const F=t.prompt?t.prompt.split("\n")[0].slice(0,120):null;const I=t.result?(0,b.sanitizeLegacyUiCardText)(t.result).split("\n")[0].slice(0,120):null;return{taskId:t.id,agentId:t.agent_id,metaProvider:r,status:t.status,promptSummary:F,resultSummary:I,duration:o,startedAt:t.started_at??null,completedAt:t.completed_at??null,durationMs:t.duration_ms??null,toolCount:n.length,timeline:l,patterns:c,behavior:{readFiles:[...i],editFiles:[...a],bashCount:u},metrics:{struggles:c.struggles.length,total_retries:c.struggles.reduce((m,y)=>m+y.failCount,0),efficients:c.efficients.length,verify_runs:d},skills:f,skillInsights:{hasEdits:h,hasDoc:v,hasMemory:g,hasTsserver:C,hasSearch:O},hasStruggles:c.struggles.length>0}}exports.READ_ONLY_TOOLS=new Set(["Read","Grep","Find","Glob"]);exports.READ_ONLY_BASH_PREFIXES=["git status","git log","git branch","git diff --stat","git show","git remote","git rev-parse","git ls-files","pwd","ls ","ls\n","echo ","cat ","head ","tail ","npx skill tsserver find","npx skill tsserver refs","npx skill tsserver type","crewx memory index","crewx memory find","crewx memory get","crewx doc toc","crewx doc section","crewx doc status","crewx search","crewx agent ls","crewx agent list","crewx wbs status"];const K=[/\bgit\s+(commit|push|pull|merge|rebase|reset|checkout|switch|add|rm)\b/,/\bnpm\s+(install|ci|publish|run\s+(test|lint|build))\b/,/\bnpx\s+tsc\b/,/\bpnpm\s+(install|run)\b/,/\bvitest\b/,/\bjest\b/];function S(t,e){const s=p(t);if(exports.READ_ONLY_TOOLS.has(s))return true;if(s!=="Bash")return false;if(!e)return false;const r=e.split("\n")[0].trimStart();if(K.some(n=>n.test(r)))return false;return exports.READ_ONLY_BASH_PREFIXES.some(n=>r.startsWith(n))}function x(t,e){try{const s=M.statSync(t);if(e){const r=Date.parse(e);if(!Number.isNaN(r)&&s.mtimeMs>r)return"stale"}return"ok"}catch{return"unknown"}}function Z(t,e){if(!S(t.name,t.input))return null;if(t.isError)return null;let s=null;let r="ok";if(t.name==="Read"&&t.filePath){const o=Array.isArray(t.filePath)?t.filePath[0]??null:t.filePath;s=o;if(o)r=x(o,e)}const n=t.name==="Bash"?t.bashCmd??t.input?.slice(0,150)??null:t.input?.slice(0,150)??null;return{tool:t.name,cmd:n,result:t.resultPreview??null,filePath:s,status:r}}function R(t){const e=[];for(const s of t){for(const r of s.timeline){const n=Z(r,s.completedAt);if(n)e.push(n)}}return e}function $(t,e,s,r,n){const o=R(t);const l=[];let c=0;let i=false;for(const a of o){const u=(a.result?.length??0)+(a.cmd?.length??0)+80;if(c+u>n&&l.length>0){i=true;break}l.push(a);c+=u}return{threadId:e,agentId:s,lookback:r,totalEntries:o.length,entries:l,truncated:i,budgetUsed:c}}function Q(t){const e={};for(const s of t.timeline){const r=s.name||"?";e[r]=(e[r]??0)+1}return{taskId:t.taskId,agentId:t.agentId,status:t.status,duration:t.duration,startedAt:t.startedAt,completedAt:t.completedAt,toolCount:t.toolCount,toolCounts:e,editFiles:t.behavior.editFiles,readFiles:t.behavior.readFiles,hasStruggles:t.hasStruggles,promptSummary:t.promptSummary}}
@@ -1,4 +1,14 @@
1
- import type { TaskAnalysis, TaskSummaryRow } from './types.js';
2
- export declare function renderTaskFull(r: TaskAnalysis): string;
1
+ import type { ActivityLog, ContinueResult, TaskAnalysis, TaskSummaryRow } from './types.js';
2
+ export interface RenderDetailOptions {
3
+ maxTimeline?: number | null;
4
+ }
5
+ export declare function renderTaskFull(r: TaskAnalysis, opts?: RenderDetailOptions): string;
3
6
  export declare function renderThreadTaskList(rows: TaskSummaryRow[], threadId: string, recent: number): string;
4
- //# sourceMappingURL=renderer.d.ts.map
7
+ export declare function renderContinue(result: ContinueResult, opts?: RenderDetailOptions): string;
8
+ export declare function renderActivityLogXml(log: ActivityLog): string;
9
+ export interface CalAction {
10
+ label: string;
11
+ cmd: string;
12
+ }
13
+ export declare function buildCalFooter(actions: CalAction[]): string;
14
+
@@ -1,147 +1,4 @@
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
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.renderTaskFull=b;exports.renderThreadTaskList=T;exports.renderContinue=w;exports.renderActivityLogXml=x;exports.buildCalFooter=_;const A=require("@crewx/sdk");function C(t,n=Date.now()){if(!t)return null;const s=Date.parse(t);if(Number.isNaN(s))return null;const e=Math.floor((n-s)/1e3);if(e<=0)return"just now";if(e<60)return`${e}s ago`;const a=Math.floor(e/60);if(a<60)return`${a}m ago`;const i=Math.floor(a/60);if(i<24)return`${i}h ago`;return`${Math.floor(i/24)}d ago`}function j(t){const n=[];if(t.startedAt)n.push(`started_at: ${t.startedAt}`);if(t.completedAt)n.push(`completed_at: ${t.completedAt}`);if(t.duration!=null)n.push(`duration: ${t.duration}s`);const s=C(t.completedAt??t.startedAt);if(s)n.push(`relative_time: ${s}`);return n.length?n.join(" | "):null}function E(t,n,s){const e=String(s).padStart(n);if(t.name==="Read"||t.name==="Grep"||t.name==="Find"){const i=Array.isArray(t.filePath)?t.filePath.join(", "):t.filePath??t.input?.slice(0,50)??"";return` ${e}. ${t.name.padEnd(5)} ${i}`}if(t.name==="Edit"||t.name==="Write"){const i=Array.isArray(t.filePath)?t.filePath.join(", "):t.filePath??"";let o="";if(t.editCount===2)o=" \u2190 same file edited again";else if((t.editCount??0)>2)o=` \u2190 same file ${t.editCount}th edit`;return` ${e}. ${t.name.padEnd(5)} ${i}${o}`}if(t.name==="Bash"){const i=t.bashCmd??"";const o=i.length>72?i.slice(0,71)+"\u2026":i.padEnd(72);if(t.bashResult==="fail"){return` ${e}. Bash ${o} \u2192 \u274C ${(t.bashErrorMsg??"failed").slice(0,80)}`}return` ${e}. Bash ${o} \u2192 \u2705 pass`}const a=t.input?t.input.slice(0,80):"";return` ${e}. ${(t.name||"?").padEnd(5)} ${a}`}function I(t,n){if(n==null||n<=0||t<=n){return{indices:Array.from({length:t},(i,o)=>o),omittedAt:null,omittedCount:0}}const s=Math.ceil(n/2);const e=Math.floor(n/2);const a=[];for(let i=0;i<s;i++)a.push(i);for(let i=t-e;i<t;i++)a.push(i);return{indices:a,omittedAt:t-e,omittedCount:t-s-e}}function b(t,n){const s=n?.maxTimeline??null;const e=[];e.push(`
2
+ \u2501\u2501\u2501 Dreaming: task ${t.taskId} \u2501\u2501\u2501`);const a=t.metaProvider?` (${t.metaProvider})`:"";e.push(`Agent: ${t.agentId}${a} | Status: ${t.status} | Duration: ${t.duration!=null?t.duration+"s":"-"} | Tools: ${t.toolCount} calls`);const i=j(t);if(i)e.push(i);if(t.promptSummary)e.push(`\u{1F4CB} Instruction: ${t.promptSummary}`);if(t.resultSummary)e.push(`\u{1F4DD} Result: ${(0,A.sanitizeLegacyUiCardText)(t.resultSummary)}`);if(!t.timeline.length){e.push("\n (No task activity recorded - logs may have been cleaned up or no tool calls were captured)");return e.join("\n")}const o={};for(const r of t.patterns.struggles){const u=Object.entries(r.editFiles).sort((g,S)=>S[1]-g[1])[0];const p=u?u[0]:"(unknown)";const d=r.errorCategories[0]??(r.errors[0]?r.errors[0].slice(0,50):"");const l=d?` \u2014 ${d}`:"";o[r.endIdx]=`\u{1F4A1} Struggle: ${p} ${r.failCount+1} edits (${r.startIdx+1}\u2192${r.endIdx+1})${l}`}for(const r of t.patterns.efficients){const u=[];if(r.readCount>0)u.push(`Read ${r.readCount} items`);u.push(`Edit ${r.editCount} items`);u.push("verification passed on first try");o[r.endIdx]=`\u{1F4A1} Efficiency: ${u.join(" \u2192 ")}`}e.push("\n[Timeline]");const c=String(t.timeline.length).length;const{indices:f,omittedAt:m,omittedCount:h}=I(t.timeline.length,s);for(const r of f){if(r===m&&h>0){e.push(` ... ${h} omitted (view all: --full) ...`)}e.push(E(t.timeline[r],c,r+1));if(o[r]!==void 0)e.push(` ${o[r]}`)}const k=Object.entries(t.skills).sort((r,u)=>u[1].count-r[1].count);if(k.length>0){e.push("\n[Skill Usage]");for(const[r,u]of k){const p=Object.entries(u.subCmds).sort((l,g)=>g[1]-l[1]).map(([l])=>l);const d=p.length>0?` (${p.join(", ")})`:"";e.push(` ${r.padEnd(16)} ${String(u.count).padStart(2)} calls${d}`)}}e.push("\n[Reflection Summary]");if(t.patterns.efficients.length>0){e.push(` \u2705 Efficient patterns: Read\u2192Edit\u2192verification passed on first try ${t.patterns.efficients.length} items`)}if(t.patterns.struggles.length>0){const r=t.patterns.struggles.map(d=>{const l=Object.entries(d.editFiles).sort((g,S)=>S[1]-g[1])[0];return l?`${l[0]} ${l[1]} edits`:null}).filter(d=>d!==null).join(", ");e.push(` \u26A0\uFE0F Struggle pattern: repeated edits to the same file ${t.patterns.struggles.length} items (${r})`);const u={};for(const d of t.patterns.struggles){for(const l of d.errorCategories)u[l]=(u[l]??0)+1}const p=Object.entries(u).sort((d,l)=>l[1]-d[1])[0];if(p)e.push(` \u{1F4A1} Insight: most errors are ${p[0]} (${p[1]} items)`)}if(!t.patterns.efficients.length&&!t.patterns.struggles.length){e.push(" \u{1F4CA} No unusual patterns; typical work flow")}const $=t.skillInsights;if($.hasEdits&&!$.hasDoc){e.push(" \u{1F4DA} Design doc not referenced; editing began without doc calls")}if(!$.hasMemory){e.push(" \u{1F9E0} Memory not checked; prior decisions may have been missed")}if($.hasTsserver){const r=t.skills["tsserver"]?.count??0;e.push(` \u{1F50D} Code analysis used: tsserver ${r} calls`)}if($.hasSearch){const r=t.skills["crewx/search"]?.count??0;e.push(` \u{1F50E} Search used: crewx/search ${r} calls`)}return e.join("\n")}function v(t){if(t==="success"||t==="completed"||t==="done")return"\u2705";if(t==="failed")return"\u274C";if(t==="running")return"\u{1F504}";return"\u23F8"}function T(t,n,s){const e=[];e.push(`
3
+ \u2501\u2501\u2501 Dreaming: thread ${n} \u2014 last ${s} items \u2501\u2501\u2501`);e.push(`Task list: ${t.length} items`);e.push("");if(!t.length){e.push(" (No tasks)");return e.join("\n")}const a=Math.max(...t.map(o=>o.taskId.length));const i=Math.max(...t.map(o=>o.agentId.length));for(let o=0;o<t.length;o++){const c=t[o];const f=String(o+1).padStart(String(t.length).length);const m=v(c.status);const h=c.duration!=null?`${c.duration}s`:" -";const k=c.promptSummary?c.promptSummary.slice(0,55):"";e.push(` ${f}. ${m} ${c.taskId.padEnd(a)} | ${c.agentId.padEnd(i)} | ${c.status.padEnd(9)} | ${h.padStart(5)} | ${k}`)}e.push("");e.push(` Drilldown: crewx dreaming --task=<id>`);return e.join("\n")}function M(t){const n=v(t.status);const s=["Bash","Read","Edit","Write","Grep","Find"];const e=new Set(s);const a=[...s.filter(h=>t.toolCounts[h]),...Object.keys(t.toolCounts).filter(h=>!e.has(h))];const i=a.length?a.map(h=>`${h} ${t.toolCounts[h]} calls`).join(", "):"no tool calls";const o=t.duration!=null?` | ${t.duration}s`:"";const c=C(t.completedAt??t.startedAt);const f=c?` | ${c}`:"";const m=t.hasStruggles?" | \u26A0\uFE0F struggle":"";return` - ${t.taskId} | ${n} ${t.status}${o}${f} | ${i}${m}`}function w(t,n){const s=[];s.push(`
4
+ \u2501\u2501\u2501 Continue previous work \u2501\u2501\u2501`);s.push(`Thread: ${t.thread} | Agent: ${t.agent}`);if(!t.latest){s.push("\n (No previous work - no completed task for this agent was found in this thread)");return s.join("\n")}s.push("\n[Latest Task]");s.push(b(t.latest,n));if(t.previous.length>0){s.push("\n[Previous Task Summary]");for(const e of t.previous){s.push(M(e))}}return s.join("\n")}function y(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function x(t){if(t.lookback===0)return"";if(!t.entries.length&&t.totalEntries===0)return"";const n=[];n.push(`<activity_log thread_id="${y(t.threadId)}" agent_id="${y(t.agentId)}" lookback="${t.lookback}">`);if(!t.entries.length){n.push(" <!-- no reusable read-only results found in previous tasks -->")}else{n.push(" <!-- read-only results from previous tasks \u2014 use these; do not re-run unless marked stale -->");for(const s of t.entries){const e=`tool="${y(s.tool)}"`;const a=s.cmd?` cmd="${y(s.cmd)}"`:"";const i=s.status==="stale"?' reused="stale"':' reused="ok"';if(s.status==="stale"){n.push(` <entry ${e}${a}${i}>\u26A0\uFE0F changed since \u2014 re-read</entry>`)}else if(s.result){n.push(` <entry ${e}${a}${i}>`);n.push(y(s.result));n.push(` </entry>`)}else{n.push(` <entry ${e}${a}${i} />`)}}if(t.truncated){const s=t.totalEntries-t.entries.length;n.push(` <!-- ${s} more entries omitted \u2014 token budget reached (${t.budgetUsed} chars used) -->`)}}n.push("</activity_log>");return n.join("\n")}function _(t){if(!t.length)return"";const n=[];n.push("\n\u2501\u2501\u2501 Next Actions \u2501\u2501\u2501");for(const s of t){n.push(`${s.label}:`);n.push(` ${s.cmd}`)}return n.join("\n")}
@@ -0,0 +1,4 @@
1
+ export declare const MASK = "***REDACTED***";
2
+ export declare const DEFAULT_MAX_STRING = 4000;
3
+ export declare function scrubSecrets<T>(value: T, maxStringLen?: number): T;
4
+
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_MAX_STRING=exports.MASK=void 0;exports.scrubSecrets=t;exports.MASK="***REDACTED***";exports.DEFAULT_MAX_STRING=4e3;const S=[{re:/(authorization)(\s*[:=]\s*)[^\r\n]+/gi,replace:`$1$2${exports.MASK}`},{re:/(set-cookie|cookie)(\s*[:=]\s*)[^\r\n]+/gi,replace:`$1$2${exports.MASK}`},{re:/(bearer\s+)[A-Za-z0-9._\-]+/gi,replace:`$1${exports.MASK}`},{re:/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/gi,replace:`-----BEGIN PRIVATE KEY----- ${exports.MASK} -----END PRIVATE KEY-----`},{re:/\b(?:sk|pk|rk)-[A-Za-z0-9]{16,}\b/g,replace:exports.MASK},{re:/\bgh[pousr]_[A-Za-z0-9]{16,}\b/g,replace:exports.MASK},{re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g,replace:exports.MASK},{re:/\bAKIA[0-9A-Z]{16}\b/g,replace:exports.MASK},{re:/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{4,}\b/g,replace:exports.MASK}];const s={re:/\b([A-Za-z0-9_]*(?:TOKEN|SECRET|PASSWORD|PASSWD|API[_-]?KEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|SESSION[_-]?ID|AUTH)[A-Za-z0-9_]*)(\s*[:=]\s*)(["']?)([^\s"']+)\3/gi,replace:`$1$2$3${exports.MASK}$3`};function E(r){let e=r;for(const{re:A,replace:c}of S)e=e.replace(A,c);e=e.replace(s.re,s.replace);return e}function n(r,e){const A=E(r);if(e>0&&A.length>e){return A.slice(0,e)+`\u2026[truncated ${A.length-e} chars]`}return A}function t(r,e=exports.DEFAULT_MAX_STRING){if(typeof r==="string"){return n(r,e)}if(Array.isArray(r)){return r.map(A=>t(A,e))}if(r&&typeof r==="object"){const A={};for(const[c,o]of Object.entries(r)){A[c]=t(o,e)}return A}return r}
@@ -34,6 +34,9 @@ export interface TaskAnalysis {
34
34
  promptSummary: string | null;
35
35
  resultSummary: string | null;
36
36
  duration: number | null;
37
+ startedAt: string | null;
38
+ completedAt: string | null;
39
+ durationMs: number | null;
37
40
  toolCount: number;
38
41
  timeline: TimelineEntry[];
39
42
  patterns: {
@@ -72,6 +75,43 @@ export interface TaskSummaryRow {
72
75
  startedAt: string | null;
73
76
  duration: number | null;
74
77
  }
78
+ export interface TaskActivitySummary {
79
+ taskId: string;
80
+ agentId: string;
81
+ status: string;
82
+ duration: number | null;
83
+ startedAt: string | null;
84
+ completedAt: string | null;
85
+ toolCount: number;
86
+ toolCounts: Record<string, number>;
87
+ editFiles: string[];
88
+ readFiles: string[];
89
+ hasStruggles: boolean;
90
+ promptSummary: string | null;
91
+ }
92
+ export interface ContinueResult {
93
+ mode: 'continue';
94
+ thread: string;
95
+ agent: string;
96
+ latest: TaskAnalysis | null;
97
+ previous: TaskActivitySummary[];
98
+ }
99
+ export interface ActivityLogEntry {
100
+ tool: string;
101
+ cmd: string | null;
102
+ result: string | null;
103
+ filePath: string | null;
104
+ status: 'ok' | 'stale' | 'unknown';
105
+ }
106
+ export interface ActivityLog {
107
+ threadId: string;
108
+ agentId: string;
109
+ lookback: number;
110
+ totalEntries: number;
111
+ entries: ActivityLogEntry[];
112
+ truncated: boolean;
113
+ budgetUsed: number;
114
+ }
75
115
  export interface DreamingFlags {
76
116
  task: string | null;
77
117
  thread: string | null;
@@ -80,5 +120,9 @@ export interface DreamingFlags {
80
120
  recent: number | null;
81
121
  json: boolean;
82
122
  all: boolean;
123
+ continue: boolean;
124
+ full: boolean;
125
+ lookback: number;
126
+ activityLog: boolean;
83
127
  }
84
- //# sourceMappingURL=types.d.ts.map
128
+
package/dist/src/types.js CHANGED
@@ -1,3 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewx/dreaming",
3
- "version": "0.1.0-rc.2",
3
+ "version": "0.1.0-rc.200",
4
4
  "description": "Dreaming — mandatory retrospection skill for CrewX agents (task/thread review)",
5
5
  "type": "commonjs",
6
6
  "main": "dist/cli.js",
@@ -31,8 +31,8 @@
31
31
  ],
32
32
  "license": "MIT",
33
33
  "dependencies": {
34
- "@crewx/sdk": "0.8.8-rc.20",
35
- "@crewx/shared": "0.0.5"
34
+ "@crewx/sdk": "0.9.0-rc.174",
35
+ "@crewx/shared": "0.0.6-rc.89"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^20.0.0",
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
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.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/analyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}