thatgfsj-code 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -1
- package/dist/cmd/index.js +1 -1
- package/dist/tools/file.d.ts.map +1 -1
- package/dist/tools/file.js +21 -2
- package/dist/tools/file.js.map +1 -1
- package/dist/tools/nwt.d.ts +14 -4
- package/dist/tools/nwt.d.ts.map +1 -1
- package/dist/tools/nwt.js +160 -13
- package/dist/tools/nwt.js.map +1 -1
- package/dist/tui/components/Header.js +1 -1
- package/package.json +1 -1
- package/src/cmd/index.tsx +1 -1
- package/src/tools/file.ts +23 -2
- package/src/tools/nwt.ts +181 -13
- package/src/tui/components/Header.tsx +1 -1
package/README.md
CHANGED
|
@@ -121,7 +121,29 @@ AI 工作时可以继续输入,消息会排队等待:
|
|
|
121
121
|
| `shell` | 执行 shell 命令 |
|
|
122
122
|
| `git` | Git 操作 |
|
|
123
123
|
| `search` | 代码搜索 |
|
|
124
|
-
| `nwt` |
|
|
124
|
+
| `nwt` | 项目演进记忆(见下方说明) |
|
|
125
|
+
|
|
126
|
+
### NWT - NeuroWeave Timeline
|
|
127
|
+
|
|
128
|
+
项目演进记忆系统,自动记录开发过程中的重要事件。
|
|
129
|
+
|
|
130
|
+
**操作:**
|
|
131
|
+
| 命令 | 说明 |
|
|
132
|
+
|------|------|
|
|
133
|
+
| `nwt log` | 记录事件 |
|
|
134
|
+
| `nwt history` | 查看历史 |
|
|
135
|
+
| `nwt search` | 搜索事件 |
|
|
136
|
+
| `nwt story` | 项目故事 |
|
|
137
|
+
| `nwt explain <file>` | 文件历史 |
|
|
138
|
+
| `nwt diff <from> <to>` | 两个事件之间的变化 |
|
|
139
|
+
| `nwt compact` | 合并连续小事件 |
|
|
140
|
+
| `nwt archive` | 手动归档 |
|
|
141
|
+
|
|
142
|
+
**自动归档:** 超过 30 天的事件会在启动时自动归档到 `archives/` 目录。如需更长保留期,可定期手动备份 `.nwt/` 目录。
|
|
143
|
+
|
|
144
|
+
**事件重要性:** `low` / `normal` / `high` / `milestone`,用于 `story` 命令筛选。
|
|
145
|
+
|
|
146
|
+
**SQLite 支持:** 当前使用 JSON 文件存储。如需更高效的查询,可自行迁移至 SQLite。
|
|
125
147
|
|
|
126
148
|
---
|
|
127
149
|
|
package/dist/cmd/index.js
CHANGED
|
@@ -24,7 +24,7 @@ process.on('unhandledRejection', (reason) => {
|
|
|
24
24
|
program
|
|
25
25
|
.name('gfcode')
|
|
26
26
|
.description('Thatgfsj Code - AI Coding Assistant')
|
|
27
|
-
.version('1.0.
|
|
27
|
+
.version('1.0.3')
|
|
28
28
|
.argument('[prompt]', 'Task to execute (omit to start interactive mode)')
|
|
29
29
|
.option('-m, --model <model>', 'Specify model')
|
|
30
30
|
.option('-i, --interactive', 'Force interactive mode')
|
package/dist/tools/file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,qBAAa,QAAS,YAAW,IAAI;IACnC,IAAI,SAAU;IACd,WAAW,SAA8D;IAEzE,WAAW;;;;;;;;;;;;;;;;;MAQT;IAEF,QAAQ;qBAC4B,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE;;;;MAI9E;IAEF,UAAU;;;;;QAIR;IAEI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB/D,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,qBAAa,QAAS,YAAW,IAAI;IACnC,IAAI,SAAU;IACd,WAAW,SAA8D;IAEzE,WAAW;;;;;;;;;;;;;;;;;MAQT;IAEF,QAAQ;qBAC4B,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE;;;;MAI9E;IAEF,UAAU;;;;;QAIR;IAEI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB/D,OAAO,CAAC,QAAQ;IAmChB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,KAAK;CAId"}
|
package/dist/tools/file.js
CHANGED
|
@@ -54,8 +54,27 @@ export class FileTool {
|
|
|
54
54
|
if (!existsSync(path)) {
|
|
55
55
|
return { success: false, error: `File not found: ${path}` };
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
//
|
|
57
|
+
const buffer = readFileSync(path);
|
|
58
|
+
// Check for binary files (first 8KB)
|
|
59
|
+
const sample = buffer.slice(0, 8192);
|
|
60
|
+
for (let i = 0; i < sample.length; i++) {
|
|
61
|
+
if (sample[i] === 0) {
|
|
62
|
+
return { success: false, error: `Binary file detected: ${path}` };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Try UTF-8 first, fallback to latin1
|
|
66
|
+
let content;
|
|
67
|
+
try {
|
|
68
|
+
content = buffer.toString('utf-8');
|
|
69
|
+
// Check for replacement characters (encoding error indicator)
|
|
70
|
+
if (content.includes('\uFFFD')) {
|
|
71
|
+
content = buffer.toString('latin1');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
content = buffer.toString('latin1');
|
|
76
|
+
}
|
|
77
|
+
// Truncate large files
|
|
59
78
|
const MAX_SIZE = 8000;
|
|
60
79
|
if (content.length > MAX_SIZE) {
|
|
61
80
|
content = content.slice(0, MAX_SIZE) + '\n\n... [truncated, file too large]';
|
package/dist/tools/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAqB,MAAM,MAAM,CAAC;AAExD,MAAM,OAAO,QAAQ;IACnB,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,0DAA0D,CAAC;IAEzE,WAAW,GAAG;QACZ,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;YAC3F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC/D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;SAChF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC7B,CAAC;IAEF,QAAQ,GAAG;QACT,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAiD;QAC9E,IAAI,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;QAC5B,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,OAAO;KACjB,CAAC;IAEF,UAAU,GAAG;QACX,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvH,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,KAAK,EAAE;KACzG,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAA2B;QACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAEzC,IAAI,CAAC;YACH,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7B,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;gBAC7C,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,KAAK,QAAQ;oBACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,KAAK,QAAQ;oBACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAChC,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1B;oBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,MAAM,EAAE,EAAE,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAY;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,IAAI,EAAE,EAAE,CAAC;QAC9D,CAAC;QAED,IAAI,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/nwt.d.ts
CHANGED
|
@@ -36,6 +36,10 @@ export declare class NwtTool implements Tool {
|
|
|
36
36
|
type: string;
|
|
37
37
|
description: string;
|
|
38
38
|
};
|
|
39
|
+
importance: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
39
43
|
query: {
|
|
40
44
|
type: string;
|
|
41
45
|
description: string;
|
|
@@ -44,6 +48,14 @@ export declare class NwtTool implements Tool {
|
|
|
44
48
|
type: string;
|
|
45
49
|
description: string;
|
|
46
50
|
};
|
|
51
|
+
from_id: {
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
to_id: {
|
|
56
|
+
type: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
47
59
|
};
|
|
48
60
|
required: string[];
|
|
49
61
|
};
|
|
@@ -64,11 +76,9 @@ export declare class NwtTool implements Tool {
|
|
|
64
76
|
private search;
|
|
65
77
|
private story;
|
|
66
78
|
private explain;
|
|
79
|
+
private diff;
|
|
80
|
+
private compact;
|
|
67
81
|
private archive;
|
|
68
|
-
/**
|
|
69
|
-
* Auto-archive events older than 30 days.
|
|
70
|
-
* Runs silently on init - no output unless something was archived.
|
|
71
|
-
*/
|
|
72
82
|
private autoArchiveIfNeeded;
|
|
73
83
|
private loadEvents;
|
|
74
84
|
}
|
package/dist/tools/nwt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwt.d.ts","sourceRoot":"","sources":["../../src/tools/nwt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"nwt.d.ts","sourceRoot":"","sources":["../../src/tools/nwt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyBnD,qBAAa,OAAQ,YAAW,IAAI;IAClC,IAAI,SAAS;IACb,WAAW,SAgBoC;IAE/C,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmBT;IAEF,QAAQ;qBAC4B,CAAC,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,EAAE;;MAE9E;IAEF,UAAU;;;;;QAYR;IAEI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAkC1E,OAAO,CAAC,IAAI;IAyBZ,OAAO,CAAC,GAAG;IAyDX,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,MAAM;IA2Bd,OAAO,CAAC,KAAK;IAqDb,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,IAAI;IAgDZ,OAAO,CAAC,OAAO;IAiFf,OAAO,CAAC,OAAO;IA2Df,OAAO,CAAC,mBAAmB;IA6D3B,OAAO,CAAC,UAAU;CAiBnB"}
|
package/dist/tools/nwt.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Stores meaningful actions (decisions, refactors, bug fixes) as timeline events
|
|
6
6
|
* in .nwt/ directory. Supports monthly archives (max 1 month per archive).
|
|
7
7
|
*/
|
|
8
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, renameSync } from 'fs';
|
|
8
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from 'fs';
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
const NWT_DIR = '.nwt';
|
|
11
11
|
const EVENTS_DIR = 'events';
|
|
@@ -14,21 +14,40 @@ const MAX_EVENTS = 500;
|
|
|
14
14
|
const ARCHIVE_AFTER_DAYS = 30;
|
|
15
15
|
export class NwtTool {
|
|
16
16
|
name = 'nwt';
|
|
17
|
-
description =
|
|
17
|
+
description = `NeuroWeave Timeline - Project evolution memory.
|
|
18
|
+
Actions: init, log, history, search, story, explain, archive, diff, compact
|
|
19
|
+
|
|
20
|
+
AUTO-LOG TRIGGERS (call nwt log silently when):
|
|
21
|
+
- Created, modified, or deleted 2+ files
|
|
22
|
+
- Made an architectural decision (chose a library, pattern, or approach)
|
|
23
|
+
- Fixed a bug
|
|
24
|
+
- Added a new feature or capability
|
|
25
|
+
- Refactored existing code
|
|
26
|
+
- Set up a new project or module
|
|
27
|
+
- Resolved a security issue
|
|
28
|
+
- Completed a multi-step task
|
|
29
|
+
|
|
30
|
+
DO NOT log:
|
|
31
|
+
- Simple file reads or searches
|
|
32
|
+
- Trivial single-line changes
|
|
33
|
+
- Conversational questions with no code changes`;
|
|
18
34
|
inputSchema = {
|
|
19
35
|
type: 'object',
|
|
20
36
|
properties: {
|
|
21
37
|
action: {
|
|
22
38
|
type: 'string',
|
|
23
|
-
description: 'Action: init, log, history, search, story, explain, archive',
|
|
39
|
+
description: 'Action: init, log, history, search, story, explain, archive, diff, compact',
|
|
24
40
|
},
|
|
25
41
|
task: { type: 'string', description: 'Short imperative title (for log)' },
|
|
26
42
|
summary: { type: 'string', description: 'What was done (for log)' },
|
|
27
43
|
reason: { type: 'string', description: 'Why it was done (for log)' },
|
|
28
44
|
files: { type: 'string', description: 'Comma-separated file paths (for log)' },
|
|
29
45
|
tags: { type: 'string', description: 'Comma-separated tags (for log)' },
|
|
46
|
+
importance: { type: 'string', description: 'Importance: low, normal, high, milestone (for log)' },
|
|
30
47
|
query: { type: 'string', description: 'Search query (for search/explain)' },
|
|
31
48
|
limit: { type: 'number', description: 'Max results (for history/search)' },
|
|
49
|
+
from_id: { type: 'string', description: 'Start event ID (for diff)' },
|
|
50
|
+
to_id: { type: 'string', description: 'End event ID (for diff)' },
|
|
32
51
|
},
|
|
33
52
|
required: ['action'],
|
|
34
53
|
};
|
|
@@ -43,8 +62,11 @@ export class NwtTool {
|
|
|
43
62
|
{ name: 'reason', type: 'string', description: 'Why it was done', required: false },
|
|
44
63
|
{ name: 'files', type: 'string', description: 'Comma-separated file paths', required: false },
|
|
45
64
|
{ name: 'tags', type: 'string', description: 'Comma-separated tags', required: false },
|
|
65
|
+
{ name: 'importance', type: 'string', description: 'low/normal/high/milestone', required: false },
|
|
46
66
|
{ name: 'query', type: 'string', description: 'Search query', required: false },
|
|
47
67
|
{ name: 'limit', type: 'number', description: 'Max results', required: false },
|
|
68
|
+
{ name: 'from_id', type: 'string', description: 'Start event ID for diff', required: false },
|
|
69
|
+
{ name: 'to_id', type: 'string', description: 'End event ID for diff', required: false },
|
|
48
70
|
];
|
|
49
71
|
async execute(params, ctx) {
|
|
50
72
|
const cwd = ctx?.workingDirectory || process.cwd();
|
|
@@ -65,6 +87,10 @@ export class NwtTool {
|
|
|
65
87
|
return this.explain(cwd, params.query || '');
|
|
66
88
|
case 'archive':
|
|
67
89
|
return this.archive(cwd);
|
|
90
|
+
case 'diff':
|
|
91
|
+
return this.diff(cwd, params.from_id || '', params.to_id || '');
|
|
92
|
+
case 'compact':
|
|
93
|
+
return this.compact(cwd);
|
|
68
94
|
default:
|
|
69
95
|
return { success: false, error: `Unknown action: ${action}` };
|
|
70
96
|
}
|
|
@@ -88,7 +114,7 @@ export class NwtTool {
|
|
|
88
114
|
this.autoArchiveIfNeeded(cwd);
|
|
89
115
|
// Write metadata
|
|
90
116
|
const meta = {
|
|
91
|
-
version: '
|
|
117
|
+
version: '2.0.0',
|
|
92
118
|
created: new Date().toISOString(),
|
|
93
119
|
description: 'NeuroWeave Timeline - Project evolution memory',
|
|
94
120
|
};
|
|
@@ -101,7 +127,7 @@ export class NwtTool {
|
|
|
101
127
|
if (!existsSync(nwtDir)) {
|
|
102
128
|
this.init(cwd);
|
|
103
129
|
}
|
|
104
|
-
const { task, summary, reason, files, tags } = params;
|
|
130
|
+
const { task, summary, reason, files, tags, importance } = params;
|
|
105
131
|
if (!task || !summary) {
|
|
106
132
|
return { success: false, error: 'task and summary are required' };
|
|
107
133
|
}
|
|
@@ -115,6 +141,9 @@ export class NwtTool {
|
|
|
115
141
|
const parent = existing.length > 0
|
|
116
142
|
? existing.sort().pop()?.replace('.json', '')
|
|
117
143
|
: undefined;
|
|
144
|
+
// Validate importance
|
|
145
|
+
const validImportance = ['low', 'normal', 'high', 'milestone'];
|
|
146
|
+
const eventImportance = validImportance.includes(importance) ? importance : 'normal';
|
|
118
147
|
const event = {
|
|
119
148
|
id: nextId,
|
|
120
149
|
timestamp: new Date().toISOString(),
|
|
@@ -124,6 +153,7 @@ export class NwtTool {
|
|
|
124
153
|
files: files ? files.split(',').map((f) => f.trim()).filter(Boolean) : [],
|
|
125
154
|
tags: tags ? tags.split(',').map((t) => t.trim().toLowerCase()).filter(Boolean) : [],
|
|
126
155
|
parent: parent || undefined,
|
|
156
|
+
importance: eventImportance,
|
|
127
157
|
};
|
|
128
158
|
writeFileSync(join(eventsDir, `${nextId}.json`), JSON.stringify(event, null, 2));
|
|
129
159
|
// Auto-archive if too many events
|
|
@@ -146,7 +176,8 @@ export class NwtTool {
|
|
|
146
176
|
const time = e.timestamp.split('T')[0];
|
|
147
177
|
const files = e.files.length > 0 ? ` [${e.files.join(', ')}]` : '';
|
|
148
178
|
const tags = e.tags.length > 0 ? ` {${e.tags.join(', ')}}` : '';
|
|
149
|
-
|
|
179
|
+
const imp = e.importance && e.importance !== 'normal' ? ` (${e.importance})` : '';
|
|
180
|
+
return `[${e.id}] ${time} ${e.task}${imp}${files}${tags}`;
|
|
150
181
|
});
|
|
151
182
|
return { success: true, output: lines.join('\n') };
|
|
152
183
|
}
|
|
@@ -176,8 +207,9 @@ export class NwtTool {
|
|
|
176
207
|
if (events.length === 0) {
|
|
177
208
|
return { success: true, output: 'No events yet.' };
|
|
178
209
|
}
|
|
179
|
-
// Group by
|
|
180
|
-
const milestones = events.filter(e => e.tags.includes('milestone'));
|
|
210
|
+
// Group by importance
|
|
211
|
+
const milestones = events.filter(e => e.importance === 'milestone' || e.tags.includes('milestone'));
|
|
212
|
+
const highImportance = events.filter(e => e.importance === 'high');
|
|
181
213
|
const decisions = events.filter(e => e.tags.includes('decision'));
|
|
182
214
|
const totalFiles = new Set(events.flatMap(e => e.files)).size;
|
|
183
215
|
const lines = [
|
|
@@ -191,6 +223,13 @@ export class NwtTool {
|
|
|
191
223
|
}
|
|
192
224
|
lines.push('');
|
|
193
225
|
}
|
|
226
|
+
if (highImportance.length > 0) {
|
|
227
|
+
lines.push('High Importance:');
|
|
228
|
+
for (const h of highImportance.slice(-5)) {
|
|
229
|
+
lines.push(` [${h.id}] ${h.task} - ${h.summary}`);
|
|
230
|
+
}
|
|
231
|
+
lines.push('');
|
|
232
|
+
}
|
|
194
233
|
if (decisions.length > 0) {
|
|
195
234
|
lines.push('Key Decisions:');
|
|
196
235
|
for (const d of decisions.slice(-5)) {
|
|
@@ -201,7 +240,8 @@ export class NwtTool {
|
|
|
201
240
|
lines.push('Recent Activity:');
|
|
202
241
|
for (const e of events.slice(-5)) {
|
|
203
242
|
const time = e.timestamp.split('T')[0];
|
|
204
|
-
|
|
243
|
+
const imp = e.importance && e.importance !== 'normal' ? ` (${e.importance})` : '';
|
|
244
|
+
lines.push(` ${time} ${e.task}${imp}`);
|
|
205
245
|
}
|
|
206
246
|
return { success: true, output: lines.join('\n') };
|
|
207
247
|
}
|
|
@@ -220,6 +260,117 @@ export class NwtTool {
|
|
|
220
260
|
});
|
|
221
261
|
return { success: true, output: `History of ${filePath}:\n\n${lines.join('\n\n')}` };
|
|
222
262
|
}
|
|
263
|
+
// ── Diff ──────────────────────────────────────────────
|
|
264
|
+
diff(cwd, fromId, toId) {
|
|
265
|
+
if (!fromId || !toId) {
|
|
266
|
+
return { success: false, error: 'from_id and to_id are required' };
|
|
267
|
+
}
|
|
268
|
+
const events = this.loadEvents(cwd);
|
|
269
|
+
const fromEvent = events.find(e => e.id === fromId.padStart(6, '0'));
|
|
270
|
+
const toEvent = events.find(e => e.id === toId.padStart(6, '0'));
|
|
271
|
+
if (!fromEvent)
|
|
272
|
+
return { success: false, error: `Event ${fromId} not found` };
|
|
273
|
+
if (!toEvent)
|
|
274
|
+
return { success: false, error: `Event ${toId} not found` };
|
|
275
|
+
// Get events between from and to
|
|
276
|
+
const fromIdx = events.indexOf(fromEvent);
|
|
277
|
+
const toIdx = events.indexOf(toEvent);
|
|
278
|
+
const between = events.slice(fromIdx, toIdx + 1);
|
|
279
|
+
// Collect all files touched
|
|
280
|
+
const allFiles = new Set(between.flatMap(e => e.files));
|
|
281
|
+
const fromFiles = new Set(fromEvent.files);
|
|
282
|
+
const toFiles = new Set(toEvent.files);
|
|
283
|
+
// Files added/removed/modified
|
|
284
|
+
const added = [...toFiles].filter(f => !fromFiles.has(f));
|
|
285
|
+
const removed = [...fromFiles].filter(f => !toFiles.has(f));
|
|
286
|
+
const modified = [...allFiles].filter(f => fromFiles.has(f) && toFiles.has(f));
|
|
287
|
+
const lines = [
|
|
288
|
+
`Diff: [${fromEvent.id}] → [${toEvent.id}]`,
|
|
289
|
+
`Events: ${between.length} between these points`,
|
|
290
|
+
'',
|
|
291
|
+
];
|
|
292
|
+
if (added.length > 0)
|
|
293
|
+
lines.push(`Added: ${added.join(', ')}`);
|
|
294
|
+
if (removed.length > 0)
|
|
295
|
+
lines.push(`Removed: ${removed.join(', ')}`);
|
|
296
|
+
if (modified.length > 0)
|
|
297
|
+
lines.push(`Modified: ${modified.join(', ')}`);
|
|
298
|
+
lines.push('', 'Events in range:');
|
|
299
|
+
for (const e of between) {
|
|
300
|
+
const time = e.timestamp.split('T')[0];
|
|
301
|
+
lines.push(` [${e.id}] ${time} ${e.task}`);
|
|
302
|
+
}
|
|
303
|
+
return { success: true, output: lines.join('\n') };
|
|
304
|
+
}
|
|
305
|
+
// ── Compact ───────────────────────────────────────────
|
|
306
|
+
compact(cwd) {
|
|
307
|
+
const events = this.loadEvents(cwd);
|
|
308
|
+
if (events.length < 10) {
|
|
309
|
+
return { success: true, output: 'Not enough events to compact (need 10+).' };
|
|
310
|
+
}
|
|
311
|
+
const nwtDir = join(cwd, NWT_DIR);
|
|
312
|
+
const eventsDir = join(nwtDir, EVENTS_DIR);
|
|
313
|
+
// Group consecutive events with same tags
|
|
314
|
+
const groups = [];
|
|
315
|
+
let currentGroup = [events[0]];
|
|
316
|
+
for (let i = 1; i < events.length; i++) {
|
|
317
|
+
const prev = events[i - 1];
|
|
318
|
+
const curr = events[i];
|
|
319
|
+
// Same tags and close in time (within 1 hour)
|
|
320
|
+
const sameTags = curr.tags.join(',') === prev.tags.join(',');
|
|
321
|
+
const timeDiff = new Date(curr.timestamp).getTime() - new Date(prev.timestamp).getTime();
|
|
322
|
+
const closeInTime = timeDiff < 3600000; // 1 hour
|
|
323
|
+
if (sameTags && closeInTime) {
|
|
324
|
+
currentGroup.push(curr);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
groups.push(currentGroup);
|
|
328
|
+
currentGroup = [curr];
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
groups.push(currentGroup);
|
|
332
|
+
// Merge groups with 3+ events
|
|
333
|
+
let merged = 0;
|
|
334
|
+
const newEvents = [];
|
|
335
|
+
for (const group of groups) {
|
|
336
|
+
if (group.length >= 3) {
|
|
337
|
+
// Merge into one summary event
|
|
338
|
+
const first = group[0];
|
|
339
|
+
const last = group[group.length - 1];
|
|
340
|
+
const allFiles = [...new Set(group.flatMap(e => e.files))];
|
|
341
|
+
const allTags = [...new Set(group.flatMap(e => e.tags))];
|
|
342
|
+
newEvents.push({
|
|
343
|
+
id: first.id,
|
|
344
|
+
timestamp: first.timestamp,
|
|
345
|
+
task: `${first.task} ... ${last.task}`,
|
|
346
|
+
summary: `Compacted ${group.length} events: ${group.map(e => e.task).join(', ')}`,
|
|
347
|
+
files: allFiles,
|
|
348
|
+
tags: allTags,
|
|
349
|
+
importance: first.importance,
|
|
350
|
+
});
|
|
351
|
+
merged += group.length - 1;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
newEvents.push(...group);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (merged === 0) {
|
|
358
|
+
return { success: true, output: 'No events to compact.' };
|
|
359
|
+
}
|
|
360
|
+
// Re-write events
|
|
361
|
+
for (const file of readdirSync(eventsDir).filter(f => f.endsWith('.json'))) {
|
|
362
|
+
unlinkSync(join(eventsDir, file));
|
|
363
|
+
}
|
|
364
|
+
for (let i = 0; i < newEvents.length; i++) {
|
|
365
|
+
const event = newEvents[i];
|
|
366
|
+
event.id = (i + 1).toString().padStart(6, '0');
|
|
367
|
+
writeFileSync(join(eventsDir, `${event.id}.json`), JSON.stringify(event, null, 2));
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
success: true,
|
|
371
|
+
output: `Compacted: ${events.length} → ${newEvents.length} events (merged ${merged})`,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
223
374
|
// ── Archive ───────────────────────────────────────────
|
|
224
375
|
archive(cwd) {
|
|
225
376
|
const nwtDir = join(cwd, NWT_DIR);
|
|
@@ -271,10 +422,6 @@ export class NwtTool {
|
|
|
271
422
|
};
|
|
272
423
|
}
|
|
273
424
|
// ── Auto Archive ──────────────────────────────────────
|
|
274
|
-
/**
|
|
275
|
-
* Auto-archive events older than 30 days.
|
|
276
|
-
* Runs silently on init - no output unless something was archived.
|
|
277
|
-
*/
|
|
278
425
|
autoArchiveIfNeeded(cwd) {
|
|
279
426
|
try {
|
|
280
427
|
const nwtDir = join(cwd, NWT_DIR);
|
package/dist/tools/nwt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwt.js","sourceRoot":"","sources":["../../src/tools/nwt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nwt.js","sourceRoot":"","sources":["../../src/tools/nwt.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { Box, Text } from 'ink';
|
|
5
5
|
export const Header = React.memo(function Header({ provider, model }) {
|
|
6
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, children: [_jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsxs(Box, { children: [_jsx(Text, { color: "#06B6D4", bold: true, children: " \u26A1 " }), _jsx(Text, { color: "#22D3EE", bold: true, children: "THATGFSJ CODE" }), _jsx(Text, { dimColor: true, children: " v1.0.
|
|
6
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 0, children: [_jsxs(Box, { justifyContent: "space-between", width: "100%", children: [_jsxs(Box, { children: [_jsx(Text, { color: "#06B6D4", bold: true, children: " \u26A1 " }), _jsx(Text, { color: "#22D3EE", bold: true, children: "THATGFSJ CODE" }), _jsx(Text, { dimColor: true, children: " v1.0.3" })] }), _jsxs(Box, { children: [_jsxs(Text, { color: "#06B6D4", bold: true, children: [" ", provider, " "] }), _jsx(Text, { dimColor: true, children: "/" }), _jsxs(Text, { color: "#22D3EE", children: [" ", model, " "] })] })] }), _jsx(Text, { color: "#374151", children: '─'.repeat(80) })] }));
|
|
7
7
|
});
|
|
8
8
|
//# sourceMappingURL=Header.js.map
|
package/package.json
CHANGED
package/src/cmd/index.tsx
CHANGED
|
@@ -28,7 +28,7 @@ process.on('unhandledRejection', (reason) => {
|
|
|
28
28
|
program
|
|
29
29
|
.name('gfcode')
|
|
30
30
|
.description('Thatgfsj Code - AI Coding Assistant')
|
|
31
|
-
.version('1.0.
|
|
31
|
+
.version('1.0.3')
|
|
32
32
|
.argument('[prompt]', 'Task to execute (omit to start interactive mode)')
|
|
33
33
|
.option('-m, --model <model>', 'Specify model')
|
|
34
34
|
.option('-i, --interactive', 'Force interactive mode')
|
package/src/tools/file.ts
CHANGED
|
@@ -63,8 +63,29 @@ export class FileTool implements Tool {
|
|
|
63
63
|
return { success: false, error: `File not found: ${path}` };
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
const buffer = readFileSync(path);
|
|
67
|
+
|
|
68
|
+
// Check for binary files (first 8KB)
|
|
69
|
+
const sample = buffer.slice(0, 8192);
|
|
70
|
+
for (let i = 0; i < sample.length; i++) {
|
|
71
|
+
if (sample[i] === 0) {
|
|
72
|
+
return { success: false, error: `Binary file detected: ${path}` };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Try UTF-8 first, fallback to latin1
|
|
77
|
+
let content: string;
|
|
78
|
+
try {
|
|
79
|
+
content = buffer.toString('utf-8');
|
|
80
|
+
// Check for replacement characters (encoding error indicator)
|
|
81
|
+
if (content.includes('\uFFFD')) {
|
|
82
|
+
content = buffer.toString('latin1');
|
|
83
|
+
}
|
|
84
|
+
} catch {
|
|
85
|
+
content = buffer.toString('latin1');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Truncate large files
|
|
68
89
|
const MAX_SIZE = 8000;
|
|
69
90
|
if (content.length > MAX_SIZE) {
|
|
70
91
|
content = content.slice(0, MAX_SIZE) + '\n\n... [truncated, file too large]';
|
package/src/tools/nwt.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import type { Tool, ToolResult } from './types.js';
|
|
10
10
|
import {
|
|
11
11
|
readFileSync, writeFileSync, existsSync, mkdirSync,
|
|
12
|
-
readdirSync, renameSync
|
|
12
|
+
readdirSync, renameSync, unlinkSync
|
|
13
13
|
} from 'fs';
|
|
14
14
|
import { join } from 'path';
|
|
15
15
|
|
|
@@ -22,6 +22,7 @@ interface TimelineEvent {
|
|
|
22
22
|
files: string[];
|
|
23
23
|
tags: string[];
|
|
24
24
|
parent?: string;
|
|
25
|
+
importance: 'low' | 'normal' | 'high' | 'milestone';
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
const NWT_DIR = '.nwt';
|
|
@@ -32,22 +33,41 @@ const ARCHIVE_AFTER_DAYS = 30;
|
|
|
32
33
|
|
|
33
34
|
export class NwtTool implements Tool {
|
|
34
35
|
name = 'nwt';
|
|
35
|
-
description =
|
|
36
|
+
description = `NeuroWeave Timeline - Project evolution memory.
|
|
37
|
+
Actions: init, log, history, search, story, explain, archive, diff, compact
|
|
38
|
+
|
|
39
|
+
AUTO-LOG TRIGGERS (call nwt log silently when):
|
|
40
|
+
- Created, modified, or deleted 2+ files
|
|
41
|
+
- Made an architectural decision (chose a library, pattern, or approach)
|
|
42
|
+
- Fixed a bug
|
|
43
|
+
- Added a new feature or capability
|
|
44
|
+
- Refactored existing code
|
|
45
|
+
- Set up a new project or module
|
|
46
|
+
- Resolved a security issue
|
|
47
|
+
- Completed a multi-step task
|
|
48
|
+
|
|
49
|
+
DO NOT log:
|
|
50
|
+
- Simple file reads or searches
|
|
51
|
+
- Trivial single-line changes
|
|
52
|
+
- Conversational questions with no code changes`;
|
|
36
53
|
|
|
37
54
|
inputSchema = {
|
|
38
55
|
type: 'object' as const,
|
|
39
56
|
properties: {
|
|
40
57
|
action: {
|
|
41
58
|
type: 'string',
|
|
42
|
-
description: 'Action: init, log, history, search, story, explain, archive',
|
|
59
|
+
description: 'Action: init, log, history, search, story, explain, archive, diff, compact',
|
|
43
60
|
},
|
|
44
61
|
task: { type: 'string', description: 'Short imperative title (for log)' },
|
|
45
62
|
summary: { type: 'string', description: 'What was done (for log)' },
|
|
46
63
|
reason: { type: 'string', description: 'Why it was done (for log)' },
|
|
47
64
|
files: { type: 'string', description: 'Comma-separated file paths (for log)' },
|
|
48
65
|
tags: { type: 'string', description: 'Comma-separated tags (for log)' },
|
|
66
|
+
importance: { type: 'string', description: 'Importance: low, normal, high, milestone (for log)' },
|
|
49
67
|
query: { type: 'string', description: 'Search query (for search/explain)' },
|
|
50
68
|
limit: { type: 'number', description: 'Max results (for history/search)' },
|
|
69
|
+
from_id: { type: 'string', description: 'Start event ID (for diff)' },
|
|
70
|
+
to_id: { type: 'string', description: 'End event ID (for diff)' },
|
|
51
71
|
},
|
|
52
72
|
required: ['action'],
|
|
53
73
|
};
|
|
@@ -64,8 +84,11 @@ export class NwtTool implements Tool {
|
|
|
64
84
|
{ name: 'reason', type: 'string', description: 'Why it was done', required: false },
|
|
65
85
|
{ name: 'files', type: 'string', description: 'Comma-separated file paths', required: false },
|
|
66
86
|
{ name: 'tags', type: 'string', description: 'Comma-separated tags', required: false },
|
|
87
|
+
{ name: 'importance', type: 'string', description: 'low/normal/high/milestone', required: false },
|
|
67
88
|
{ name: 'query', type: 'string', description: 'Search query', required: false },
|
|
68
89
|
{ name: 'limit', type: 'number', description: 'Max results', required: false },
|
|
90
|
+
{ name: 'from_id', type: 'string', description: 'Start event ID for diff', required: false },
|
|
91
|
+
{ name: 'to_id', type: 'string', description: 'End event ID for diff', required: false },
|
|
69
92
|
];
|
|
70
93
|
|
|
71
94
|
async execute(params: Record<string, any>, ctx?: any): Promise<ToolResult> {
|
|
@@ -88,6 +111,10 @@ export class NwtTool implements Tool {
|
|
|
88
111
|
return this.explain(cwd, params.query || '');
|
|
89
112
|
case 'archive':
|
|
90
113
|
return this.archive(cwd);
|
|
114
|
+
case 'diff':
|
|
115
|
+
return this.diff(cwd, params.from_id || '', params.to_id || '');
|
|
116
|
+
case 'compact':
|
|
117
|
+
return this.compact(cwd);
|
|
91
118
|
default:
|
|
92
119
|
return { success: false, error: `Unknown action: ${action}` };
|
|
93
120
|
}
|
|
@@ -112,7 +139,7 @@ export class NwtTool implements Tool {
|
|
|
112
139
|
|
|
113
140
|
// Write metadata
|
|
114
141
|
const meta = {
|
|
115
|
-
version: '
|
|
142
|
+
version: '2.0.0',
|
|
116
143
|
created: new Date().toISOString(),
|
|
117
144
|
description: 'NeuroWeave Timeline - Project evolution memory',
|
|
118
145
|
};
|
|
@@ -129,7 +156,7 @@ export class NwtTool implements Tool {
|
|
|
129
156
|
this.init(cwd);
|
|
130
157
|
}
|
|
131
158
|
|
|
132
|
-
const { task, summary, reason, files, tags } = params;
|
|
159
|
+
const { task, summary, reason, files, tags, importance } = params;
|
|
133
160
|
if (!task || !summary) {
|
|
134
161
|
return { success: false, error: 'task and summary are required' };
|
|
135
162
|
}
|
|
@@ -146,6 +173,10 @@ export class NwtTool implements Tool {
|
|
|
146
173
|
? existing.sort().pop()?.replace('.json', '')
|
|
147
174
|
: undefined;
|
|
148
175
|
|
|
176
|
+
// Validate importance
|
|
177
|
+
const validImportance = ['low', 'normal', 'high', 'milestone'];
|
|
178
|
+
const eventImportance = validImportance.includes(importance) ? importance : 'normal';
|
|
179
|
+
|
|
149
180
|
const event: TimelineEvent = {
|
|
150
181
|
id: nextId,
|
|
151
182
|
timestamp: new Date().toISOString(),
|
|
@@ -155,6 +186,7 @@ export class NwtTool implements Tool {
|
|
|
155
186
|
files: files ? files.split(',').map((f: string) => f.trim()).filter(Boolean) : [],
|
|
156
187
|
tags: tags ? tags.split(',').map((t: string) => t.trim().toLowerCase()).filter(Boolean) : [],
|
|
157
188
|
parent: parent || undefined,
|
|
189
|
+
importance: eventImportance as TimelineEvent['importance'],
|
|
158
190
|
};
|
|
159
191
|
|
|
160
192
|
writeFileSync(
|
|
@@ -186,7 +218,8 @@ export class NwtTool implements Tool {
|
|
|
186
218
|
const time = e.timestamp.split('T')[0];
|
|
187
219
|
const files = e.files.length > 0 ? ` [${e.files.join(', ')}]` : '';
|
|
188
220
|
const tags = e.tags.length > 0 ? ` {${e.tags.join(', ')}}` : '';
|
|
189
|
-
|
|
221
|
+
const imp = e.importance && e.importance !== 'normal' ? ` (${e.importance})` : '';
|
|
222
|
+
return `[${e.id}] ${time} ${e.task}${imp}${files}${tags}`;
|
|
190
223
|
});
|
|
191
224
|
|
|
192
225
|
return { success: true, output: lines.join('\n') };
|
|
@@ -227,8 +260,9 @@ export class NwtTool implements Tool {
|
|
|
227
260
|
return { success: true, output: 'No events yet.' };
|
|
228
261
|
}
|
|
229
262
|
|
|
230
|
-
// Group by
|
|
231
|
-
const milestones = events.filter(e => e.tags.includes('milestone'));
|
|
263
|
+
// Group by importance
|
|
264
|
+
const milestones = events.filter(e => e.importance === 'milestone' || e.tags.includes('milestone'));
|
|
265
|
+
const highImportance = events.filter(e => e.importance === 'high');
|
|
232
266
|
const decisions = events.filter(e => e.tags.includes('decision'));
|
|
233
267
|
const totalFiles = new Set(events.flatMap(e => e.files)).size;
|
|
234
268
|
|
|
@@ -245,6 +279,14 @@ export class NwtTool implements Tool {
|
|
|
245
279
|
lines.push('');
|
|
246
280
|
}
|
|
247
281
|
|
|
282
|
+
if (highImportance.length > 0) {
|
|
283
|
+
lines.push('High Importance:');
|
|
284
|
+
for (const h of highImportance.slice(-5)) {
|
|
285
|
+
lines.push(` [${h.id}] ${h.task} - ${h.summary}`);
|
|
286
|
+
}
|
|
287
|
+
lines.push('');
|
|
288
|
+
}
|
|
289
|
+
|
|
248
290
|
if (decisions.length > 0) {
|
|
249
291
|
lines.push('Key Decisions:');
|
|
250
292
|
for (const d of decisions.slice(-5)) {
|
|
@@ -256,7 +298,8 @@ export class NwtTool implements Tool {
|
|
|
256
298
|
lines.push('Recent Activity:');
|
|
257
299
|
for (const e of events.slice(-5)) {
|
|
258
300
|
const time = e.timestamp.split('T')[0];
|
|
259
|
-
|
|
301
|
+
const imp = e.importance && e.importance !== 'normal' ? ` (${e.importance})` : '';
|
|
302
|
+
lines.push(` ${time} ${e.task}${imp}`);
|
|
260
303
|
}
|
|
261
304
|
|
|
262
305
|
return { success: true, output: lines.join('\n') };
|
|
@@ -284,6 +327,135 @@ export class NwtTool implements Tool {
|
|
|
284
327
|
return { success: true, output: `History of ${filePath}:\n\n${lines.join('\n\n')}` };
|
|
285
328
|
}
|
|
286
329
|
|
|
330
|
+
// ── Diff ──────────────────────────────────────────────
|
|
331
|
+
|
|
332
|
+
private diff(cwd: string, fromId: string, toId: string): ToolResult {
|
|
333
|
+
if (!fromId || !toId) {
|
|
334
|
+
return { success: false, error: 'from_id and to_id are required' };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const events = this.loadEvents(cwd);
|
|
338
|
+
const fromEvent = events.find(e => e.id === fromId.padStart(6, '0'));
|
|
339
|
+
const toEvent = events.find(e => e.id === toId.padStart(6, '0'));
|
|
340
|
+
|
|
341
|
+
if (!fromEvent) return { success: false, error: `Event ${fromId} not found` };
|
|
342
|
+
if (!toEvent) return { success: false, error: `Event ${toId} not found` };
|
|
343
|
+
|
|
344
|
+
// Get events between from and to
|
|
345
|
+
const fromIdx = events.indexOf(fromEvent);
|
|
346
|
+
const toIdx = events.indexOf(toEvent);
|
|
347
|
+
const between = events.slice(fromIdx, toIdx + 1);
|
|
348
|
+
|
|
349
|
+
// Collect all files touched
|
|
350
|
+
const allFiles = new Set(between.flatMap(e => e.files));
|
|
351
|
+
const fromFiles = new Set(fromEvent.files);
|
|
352
|
+
const toFiles = new Set(toEvent.files);
|
|
353
|
+
|
|
354
|
+
// Files added/removed/modified
|
|
355
|
+
const added = [...toFiles].filter(f => !fromFiles.has(f));
|
|
356
|
+
const removed = [...fromFiles].filter(f => !toFiles.has(f));
|
|
357
|
+
const modified = [...allFiles].filter(f => fromFiles.has(f) && toFiles.has(f));
|
|
358
|
+
|
|
359
|
+
const lines = [
|
|
360
|
+
`Diff: [${fromEvent.id}] → [${toEvent.id}]`,
|
|
361
|
+
`Events: ${between.length} between these points`,
|
|
362
|
+
'',
|
|
363
|
+
];
|
|
364
|
+
|
|
365
|
+
if (added.length > 0) lines.push(`Added: ${added.join(', ')}`);
|
|
366
|
+
if (removed.length > 0) lines.push(`Removed: ${removed.join(', ')}`);
|
|
367
|
+
if (modified.length > 0) lines.push(`Modified: ${modified.join(', ')}`);
|
|
368
|
+
|
|
369
|
+
lines.push('', 'Events in range:');
|
|
370
|
+
for (const e of between) {
|
|
371
|
+
const time = e.timestamp.split('T')[0];
|
|
372
|
+
lines.push(` [${e.id}] ${time} ${e.task}`);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return { success: true, output: lines.join('\n') };
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// ── Compact ───────────────────────────────────────────
|
|
379
|
+
|
|
380
|
+
private compact(cwd: string): ToolResult {
|
|
381
|
+
const events = this.loadEvents(cwd);
|
|
382
|
+
if (events.length < 10) {
|
|
383
|
+
return { success: true, output: 'Not enough events to compact (need 10+).' };
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
const nwtDir = join(cwd, NWT_DIR);
|
|
387
|
+
const eventsDir = join(nwtDir, EVENTS_DIR);
|
|
388
|
+
|
|
389
|
+
// Group consecutive events with same tags
|
|
390
|
+
const groups: TimelineEvent[][] = [];
|
|
391
|
+
let currentGroup: TimelineEvent[] = [events[0]];
|
|
392
|
+
|
|
393
|
+
for (let i = 1; i < events.length; i++) {
|
|
394
|
+
const prev = events[i - 1];
|
|
395
|
+
const curr = events[i];
|
|
396
|
+
|
|
397
|
+
// Same tags and close in time (within 1 hour)
|
|
398
|
+
const sameTags = curr.tags.join(',') === prev.tags.join(',');
|
|
399
|
+
const timeDiff = new Date(curr.timestamp).getTime() - new Date(prev.timestamp).getTime();
|
|
400
|
+
const closeInTime = timeDiff < 3600000; // 1 hour
|
|
401
|
+
|
|
402
|
+
if (sameTags && closeInTime) {
|
|
403
|
+
currentGroup.push(curr);
|
|
404
|
+
} else {
|
|
405
|
+
groups.push(currentGroup);
|
|
406
|
+
currentGroup = [curr];
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
groups.push(currentGroup);
|
|
410
|
+
|
|
411
|
+
// Merge groups with 3+ events
|
|
412
|
+
let merged = 0;
|
|
413
|
+
const newEvents: TimelineEvent[] = [];
|
|
414
|
+
|
|
415
|
+
for (const group of groups) {
|
|
416
|
+
if (group.length >= 3) {
|
|
417
|
+
// Merge into one summary event
|
|
418
|
+
const first = group[0];
|
|
419
|
+
const last = group[group.length - 1];
|
|
420
|
+
const allFiles = [...new Set(group.flatMap(e => e.files))];
|
|
421
|
+
const allTags = [...new Set(group.flatMap(e => e.tags))];
|
|
422
|
+
|
|
423
|
+
newEvents.push({
|
|
424
|
+
id: first.id,
|
|
425
|
+
timestamp: first.timestamp,
|
|
426
|
+
task: `${first.task} ... ${last.task}`,
|
|
427
|
+
summary: `Compacted ${group.length} events: ${group.map(e => e.task).join(', ')}`,
|
|
428
|
+
files: allFiles,
|
|
429
|
+
tags: allTags,
|
|
430
|
+
importance: first.importance,
|
|
431
|
+
});
|
|
432
|
+
merged += group.length - 1;
|
|
433
|
+
} else {
|
|
434
|
+
newEvents.push(...group);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (merged === 0) {
|
|
439
|
+
return { success: true, output: 'No events to compact.' };
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Re-write events
|
|
443
|
+
for (const file of readdirSync(eventsDir).filter(f => f.endsWith('.json'))) {
|
|
444
|
+
unlinkSync(join(eventsDir, file));
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
for (let i = 0; i < newEvents.length; i++) {
|
|
448
|
+
const event = newEvents[i];
|
|
449
|
+
event.id = (i + 1).toString().padStart(6, '0');
|
|
450
|
+
writeFileSync(join(eventsDir, `${event.id}.json`), JSON.stringify(event, null, 2));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return {
|
|
454
|
+
success: true,
|
|
455
|
+
output: `Compacted: ${events.length} → ${newEvents.length} events (merged ${merged})`,
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
|
|
287
459
|
// ── Archive ───────────────────────────────────────────
|
|
288
460
|
|
|
289
461
|
private archive(cwd: string): ToolResult {
|
|
@@ -345,10 +517,6 @@ export class NwtTool implements Tool {
|
|
|
345
517
|
|
|
346
518
|
// ── Auto Archive ──────────────────────────────────────
|
|
347
519
|
|
|
348
|
-
/**
|
|
349
|
-
* Auto-archive events older than 30 days.
|
|
350
|
-
* Runs silently on init - no output unless something was archived.
|
|
351
|
-
*/
|
|
352
520
|
private autoArchiveIfNeeded(cwd: string): void {
|
|
353
521
|
try {
|
|
354
522
|
const nwtDir = join(cwd, NWT_DIR);
|
|
@@ -14,7 +14,7 @@ export const Header = React.memo(function Header({ provider, model }: Props) {
|
|
|
14
14
|
<Box>
|
|
15
15
|
<Text color="#06B6D4" bold> ⚡ </Text>
|
|
16
16
|
<Text color="#22D3EE" bold>THATGFSJ CODE</Text>
|
|
17
|
-
<Text dimColor> v1.0.
|
|
17
|
+
<Text dimColor> v1.0.3</Text>
|
|
18
18
|
</Box>
|
|
19
19
|
<Box>
|
|
20
20
|
<Text color="#06B6D4" bold> {provider} </Text>
|