@nac3/forge-cli 1.0.32 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat/recent_sessions_recap.d.ts +21 -0
- package/dist/chat/recent_sessions_recap.d.ts.map +1 -0
- package/dist/chat/recent_sessions_recap.js +109 -0
- package/dist/chat/recent_sessions_recap.js.map +1 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +16 -1
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/project_lifecycle.d.ts.map +1 -1
- package/dist/chat/tools/project_lifecycle.js +6 -0
- package/dist/chat/tools/project_lifecycle.js.map +1 -1
- package/dist/core/projects.d.ts +8 -0
- package/dist/core/projects.d.ts.map +1 -1
- package/dist/core/projects.js +11 -1
- package/dist/core/projects.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RecentSessionsRecapOptions {
|
|
2
|
+
/** Active project root. Sessions are read from its cache/chat dir. */
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
/** Only sessions started within this many days are included. Default 5. */
|
|
5
|
+
days_back?: number;
|
|
6
|
+
/** Max sessions to render. Default 5. */
|
|
7
|
+
max_sessions?: number;
|
|
8
|
+
/** Max user requests rendered per session. Default 5. */
|
|
9
|
+
max_asks_per_session?: number;
|
|
10
|
+
/** Hard cap on the rendered block size. Default 1100. */
|
|
11
|
+
char_budget?: number;
|
|
12
|
+
/** Absolute path of the CURRENT session file, excluded from the recap. */
|
|
13
|
+
exclude_file?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RecentSessionsRecapResult {
|
|
16
|
+
rendered_text: string;
|
|
17
|
+
sessions_count: number;
|
|
18
|
+
date_range?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function buildRecentSessionsRecapSection(opts: RecentSessionsRecapOptions): Promise<RecentSessionsRecapResult>;
|
|
21
|
+
//# sourceMappingURL=recent_sessions_recap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recent_sessions_recap.d.ts","sourceRoot":"","sources":["../../src/chat/recent_sessions_recap.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,0BAA0B;IACzC,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuBD,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,yBAAyB,CAAC,CA+DpC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recent_sessions_recap.ts -- automatic "what we did recently" recap.
|
|
3
|
+
*
|
|
4
|
+
* On every turn the chat server injects general project knowledge (graph,
|
|
5
|
+
* wiring, pendings) but NOT a memory of the previous WORK SESSIONS, so the
|
|
6
|
+
* model booted each session blind to what was done the last few days and
|
|
7
|
+
* the user had to manually ask it to read the latest logs. This module
|
|
8
|
+
* builds that recap automatically -- with NO LLM call -- from the per-project
|
|
9
|
+
* persisted transcripts in <projectRoot>/.yujin-forge/cache/chat/*.json.
|
|
10
|
+
*
|
|
11
|
+
* The recap is the list of the user's requests across the recent sessions
|
|
12
|
+
* (the requests ARE the record of what we worked on), newest first, bounded.
|
|
13
|
+
*
|
|
14
|
+
* ASCII-only.
|
|
15
|
+
*/
|
|
16
|
+
import { promises as fs } from 'node:fs';
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
function chatDir(projectRoot) {
|
|
19
|
+
return path.join(projectRoot, '.yujin-forge', 'cache', 'chat');
|
|
20
|
+
}
|
|
21
|
+
function oneLine(s, max) {
|
|
22
|
+
const t = s.replace(/\s+/g, ' ').trim();
|
|
23
|
+
return t.length > max ? t.slice(0, max - 3) + '...' : t;
|
|
24
|
+
}
|
|
25
|
+
/** True for transcript turns that are machine chatter, not real work
|
|
26
|
+
* (inter-instance bridge handshakes, empty turns). */
|
|
27
|
+
function isNoise(content) {
|
|
28
|
+
const c = content.trim();
|
|
29
|
+
if (c.length === 0)
|
|
30
|
+
return true;
|
|
31
|
+
if (c.startsWith('[Coordinacion entre instancias]'))
|
|
32
|
+
return true;
|
|
33
|
+
if (c.startsWith('[Coordinaci'))
|
|
34
|
+
return true;
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
export async function buildRecentSessionsRecapSection(opts) {
|
|
38
|
+
const daysBack = opts.days_back ?? 5;
|
|
39
|
+
const maxSessions = opts.max_sessions ?? 4;
|
|
40
|
+
const maxAsks = opts.max_asks_per_session ?? 3;
|
|
41
|
+
const budget = opts.char_budget ?? 1500;
|
|
42
|
+
const excludeBase = opts.exclude_file ? path.basename(opts.exclude_file) : null;
|
|
43
|
+
let files;
|
|
44
|
+
try {
|
|
45
|
+
files = (await fs.readdir(chatDir(opts.projectRoot))).filter((f) => f.endsWith('.json'));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { rendered_text: '', sessions_count: 0 };
|
|
49
|
+
}
|
|
50
|
+
const cutoff = Date.now() - daysBack * 86_400_000;
|
|
51
|
+
const sessions = [];
|
|
52
|
+
for (const f of files) {
|
|
53
|
+
if (excludeBase && f === excludeBase)
|
|
54
|
+
continue;
|
|
55
|
+
if (f === 'session-mobile.json')
|
|
56
|
+
continue;
|
|
57
|
+
let parsed;
|
|
58
|
+
try {
|
|
59
|
+
parsed = JSON.parse(await fs.readFile(path.join(chatDir(opts.projectRoot), f), 'utf-8'));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const msgs = Array.isArray(parsed.messages) ? parsed.messages : [];
|
|
65
|
+
const startedAt = typeof parsed.meta?.startedAt === 'string' ? parsed.meta.startedAt : '';
|
|
66
|
+
if (startedAt) {
|
|
67
|
+
const t = Date.parse(startedAt);
|
|
68
|
+
if (Number.isFinite(t) && t < cutoff)
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const asks = msgs
|
|
72
|
+
.filter((m) => m && m.role === 'user' && typeof m.content === 'string')
|
|
73
|
+
.map((m) => m.content)
|
|
74
|
+
.filter((c) => !isNoise(c));
|
|
75
|
+
if (asks.length === 0)
|
|
76
|
+
continue; /* skip empty/handshake-only + the just-started current session */
|
|
77
|
+
sessions.push({ startedAt: startedAt || f, turns: msgs.length, asks });
|
|
78
|
+
}
|
|
79
|
+
if (sessions.length === 0)
|
|
80
|
+
return { rendered_text: '', sessions_count: 0 };
|
|
81
|
+
sessions.sort((a, b) => (a.startedAt < b.startedAt ? 1 : -1));
|
|
82
|
+
const top = sessions.slice(0, maxSessions);
|
|
83
|
+
let out = '\n\n=================================================================\n'
|
|
84
|
+
+ 'SESIONES RECIENTES DE ESTE PROYECTO (memoria de continuidad)\n'
|
|
85
|
+
+ '=================================================================\n'
|
|
86
|
+
+ 'Resumen de lo trabajado en sesiones anteriores, reconstruido de los registros\n'
|
|
87
|
+
+ 'locales (sin inferencia). Usalo para CONTINUAR donde quedamos sin volver a\n'
|
|
88
|
+
+ 'preguntar lo ya resuelto. Si el usuario cambia de tema, segui el tema nuevo.\n';
|
|
89
|
+
for (const s of top) {
|
|
90
|
+
const when = s.startedAt.length >= 16 ? s.startedAt.slice(0, 16).replace('T', ' ') : s.startedAt;
|
|
91
|
+
const line = '\n[' + when + '] (' + s.turns + ' turnos)\n';
|
|
92
|
+
if (out.length + line.length > budget)
|
|
93
|
+
break;
|
|
94
|
+
out += line;
|
|
95
|
+
for (const a of s.asks.slice(0, maxAsks)) {
|
|
96
|
+
const bullet = ' - ' + oneLine(a, 120) + '\n';
|
|
97
|
+
if (out.length + bullet.length > budget) {
|
|
98
|
+
out += ' - ...\n';
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
out += bullet;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const first = top[0];
|
|
105
|
+
const last = top[top.length - 1];
|
|
106
|
+
const range = first && last ? last.startedAt.slice(0, 10) + ' .. ' + first.startedAt.slice(0, 10) : undefined;
|
|
107
|
+
return { rendered_text: out, sessions_count: top.length, date_range: range };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=recent_sessions_recap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recent_sessions_recap.js","sourceRoot":"","sources":["../../src/chat/recent_sessions_recap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAA2D,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAKjG,OAAO,EAAoD,KAAK,aAAa,EAAoB,MAAM,aAAa,CAAC;AAErH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAEL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmCjD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;wDAQoD;IACpD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IACnD;;2DAEuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;+CAC2C;IAC3C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;kEAG8D;IAC9D,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;qEACiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAqBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAoahF;AAED,UAAU,GAAG;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IAIvB,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;IAMjD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAKnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAG3G,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAGlE,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpD;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/chat/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAA2D,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAKjG,OAAO,EAAoD,KAAK,aAAa,EAAoB,MAAM,aAAa,CAAC;AAErH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAEL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAczB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmCjD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;wDAQoD;IACpD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IACnD;;2DAEuD;IACvD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B;+CAC2C;IAC3C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;kEAG8D;IAC9D,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;CAClD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;qEACiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAqBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAoahF;AAED,UAAU,GAAG;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,eAAe,CAAC;IAIvB,OAAO,CAAC,EAAE,OAAO,sBAAsB,EAAE,OAAO,CAAC;IAMjD,YAAY,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAKnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAG3G,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAGlE,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;CACpD;AAshJD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,IAAI,GAAE,SAAuB,EAC7B,UAAU,GAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAErF;AACD;;;qDAGqD;AACrD,KAAK,CAAC,EAAE;IAAE,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACrE;;;;;2CAK2C;AAC3C,sBAAsB,GAAE,MAAW;AACnC;;;;;;;4DAO4D;AAC5D,YAAY,GAAE,OAAe;AAC7B;;;;;;;uDAOuD;AACvD,mBAAmB,GAAE,MAAW;AAChC;;;;kEAIkE;AAClE,gBAAgB,GAAE,MAAW;AAC7B;;;;;;;;;;;+BAW+B;AAC/B,SAAS,GAAE,QAAQ,GAAG,YAAY,GAAG,MAAiB,GACrD,MAAM,CAogBR"}
|
package/dist/chat/server.js
CHANGED
|
@@ -4681,6 +4681,21 @@ async function handleChat(req, res, ctx) {
|
|
|
4681
4681
|
* "narro sin invocar"). Plan/CLI ignores this; BYOK + managed honour it. */
|
|
4682
4682
|
const { readLimitsConfig: _readLimForTokens } = await import('../core/limits_config.js');
|
|
4683
4683
|
const _maxTokensPerTurn = (await _readLimForTokens()).max_tokens_per_turn;
|
|
4684
|
+
/* Auto-recall (Pablo 2026-06-21) -- inject a recap of the recent WORK
|
|
4685
|
+
* SESSIONS for this project so the model boots knowing what we did the
|
|
4686
|
+
* last few days, not only general project knowledge. No LLM call; built
|
|
4687
|
+
* from the persisted transcripts, excluding the current live session. */
|
|
4688
|
+
let recentSessionsRecap = '';
|
|
4689
|
+
try {
|
|
4690
|
+
const { buildRecentSessionsRecapSection } = await import('./recent_sessions_recap.js');
|
|
4691
|
+
const r = await buildRecentSessionsRecapSection({
|
|
4692
|
+
projectRoot: ctx.projectRoot,
|
|
4693
|
+
exclude_file: sessionStore.filePath,
|
|
4694
|
+
});
|
|
4695
|
+
if (r.rendered_text)
|
|
4696
|
+
recentSessionsRecap = r.rendered_text;
|
|
4697
|
+
}
|
|
4698
|
+
catch (_) { /* swallow -- chat continues without the recap */ }
|
|
4684
4699
|
const chatRequest = {
|
|
4685
4700
|
messages: turnMessages,
|
|
4686
4701
|
signal: turnSignal,
|
|
@@ -4712,7 +4727,7 @@ async function handleChat(req, res, ctx) {
|
|
|
4712
4727
|
ctx.chatProvider === 'claude-code-cli'
|
|
4713
4728
|
? (ctx.panelPushToken ? 'mcp-bridge' : 'none')
|
|
4714
4729
|
: 'native'),
|
|
4715
|
-
systemDynamic: projectContextSection + snapshotSection + graphSection + wiringSection + toolingSection + workflowSection,
|
|
4730
|
+
systemDynamic: recentSessionsRecap + projectContextSection + snapshotSection + graphSection + wiringSection + toolingSection + workflowSection,
|
|
4716
4731
|
maxTokens: _maxTokensPerTurn,
|
|
4717
4732
|
/* Plan/CLI uses Claude Code's native tools (FORGE_TOOL_SPECS = just
|
|
4718
4733
|
* nac3_invoke via the MCP bridge); the HTTP path (BYOK/Console + managed)
|