compact-agent 1.30.0 → 1.30.2
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/config.d.ts +3 -4
- package/dist/config.js +25 -14
- package/dist/config.js.map +1 -1
- package/dist/index.js +130 -17
- package/dist/index.js.map +1 -1
- package/dist/sessions.d.ts +46 -1
- package/dist/sessions.js +92 -6
- package/dist/sessions.js.map +1 -1
- package/package.json +1 -1
package/dist/sessions.d.ts
CHANGED
|
@@ -11,11 +11,56 @@ export interface Session {
|
|
|
11
11
|
tokenCount: number;
|
|
12
12
|
turnCount: number;
|
|
13
13
|
mode: string;
|
|
14
|
+
/**
|
|
15
|
+
* Permission mode active when the session was last saved. Optional
|
|
16
|
+
* for back-compat — pre-v1.30.2 session files don't have this field.
|
|
17
|
+
* Restored by /resume so a yolo session resumes in yolo, not in
|
|
18
|
+
* whatever mode the current REPL happens to be in.
|
|
19
|
+
*/
|
|
20
|
+
permissionMode?: 'ask' | 'auto' | 'yolo';
|
|
14
21
|
}
|
|
15
22
|
export declare function generateSessionId(): string;
|
|
16
23
|
export declare function saveSession(session: Session): Promise<void>;
|
|
17
24
|
export declare function loadSession(id: string): Session | null;
|
|
18
25
|
export declare function listSessions(): Pick<Session, 'id' | 'name' | 'cwd' | 'model' | 'createdAt' | 'updatedAt' | 'turnCount'>[];
|
|
19
26
|
export declare function deleteSession(id: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a user-provided session reference to a canonical session ID.
|
|
29
|
+
* Accepts:
|
|
30
|
+
* - Exact session ID (any length)
|
|
31
|
+
* - Unique prefix match (like `git checkout <short-sha>`). If multiple
|
|
32
|
+
* sessions share the prefix, returns null + the candidate list via
|
|
33
|
+
* the second return slot so the caller can show a helpful error.
|
|
34
|
+
* - "last" or "latest" → the most-recently-updated session
|
|
35
|
+
*
|
|
36
|
+
* Wrappers (`<id>`, `"id"`, etc.) are stripped before matching — the
|
|
37
|
+
* same forgiving input handling as /stitch-config. This matches user
|
|
38
|
+
* muscle memory: "/resume <id>" gets typed instinctively because the
|
|
39
|
+
* /help line shows `<session-id>` as a placeholder.
|
|
40
|
+
*
|
|
41
|
+
* Returns:
|
|
42
|
+
* { id: string } on success
|
|
43
|
+
* { error: string, candidates?: string[] } on ambiguity or no match
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveSessionRef(raw: string): {
|
|
46
|
+
id: string;
|
|
47
|
+
} | {
|
|
48
|
+
error: string;
|
|
49
|
+
candidates?: string[];
|
|
50
|
+
};
|
|
20
51
|
export declare function createSession(cwd: string, model: string, provider: string, mode: string): Session;
|
|
21
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Optional snapshot of the live state that should be written into the
|
|
54
|
+
* session file alongside messages. Without this, the saved session
|
|
55
|
+
* captures only the values that happened to be on the Session object
|
|
56
|
+
* at create time — mode/perm switches mid-session never make it to
|
|
57
|
+
* disk, and /resume restores stale values.
|
|
58
|
+
*/
|
|
59
|
+
export interface AutoSaveSnapshot {
|
|
60
|
+
model?: string;
|
|
61
|
+
provider?: string;
|
|
62
|
+
mode?: string;
|
|
63
|
+
permissionMode?: 'ask' | 'auto' | 'yolo';
|
|
64
|
+
cwd?: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function autoSave(session: Session, messages: Message[], snapshot?: AutoSaveSnapshot): Promise<void>;
|
package/dist/sessions.js
CHANGED
|
@@ -5,7 +5,14 @@
|
|
|
5
5
|
import { readFileSync, writeFileSync, readdirSync, unlinkSync, mkdirSync, existsSync } from 'node:fs';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { getConfigDir } from './config.js';
|
|
8
|
-
|
|
8
|
+
// Lazy — evaluated per call instead of cached at module load. The
|
|
9
|
+
// cached form prevented tests + sandboxed runs from overriding the
|
|
10
|
+
// state dir via COMPACT_AGENT_HOME, because the first import froze
|
|
11
|
+
// it at the user's real ~/.compact-agent/sessions. getConfigDir()
|
|
12
|
+
// is itself cheap; recomputing per call has zero observable cost.
|
|
13
|
+
function getSessionsDir() {
|
|
14
|
+
return join(getConfigDir(), 'sessions');
|
|
15
|
+
}
|
|
9
16
|
// Simple write lock to prevent concurrent writes
|
|
10
17
|
let isWriting = false;
|
|
11
18
|
const writeQueue = [];
|
|
@@ -30,10 +37,10 @@ async function acquireWriteLock(fn) {
|
|
|
30
37
|
});
|
|
31
38
|
}
|
|
32
39
|
function ensureDir() {
|
|
33
|
-
mkdirSync(
|
|
40
|
+
mkdirSync(getSessionsDir(), { recursive: true });
|
|
34
41
|
}
|
|
35
42
|
function sessionPath(id) {
|
|
36
|
-
return join(
|
|
43
|
+
return join(getSessionsDir(), `${id}.json`);
|
|
37
44
|
}
|
|
38
45
|
export function generateSessionId() {
|
|
39
46
|
const ts = Date.now().toString(36);
|
|
@@ -61,11 +68,11 @@ export function loadSession(id) {
|
|
|
61
68
|
}
|
|
62
69
|
export function listSessions() {
|
|
63
70
|
ensureDir();
|
|
64
|
-
const files = readdirSync(
|
|
71
|
+
const files = readdirSync(getSessionsDir()).filter((f) => f.endsWith('.json'));
|
|
65
72
|
const sessions = [];
|
|
66
73
|
for (const file of files) {
|
|
67
74
|
try {
|
|
68
|
-
const raw = readFileSync(join(
|
|
75
|
+
const raw = readFileSync(join(getSessionsDir(), file), 'utf-8');
|
|
69
76
|
const s = JSON.parse(raw);
|
|
70
77
|
sessions.push({
|
|
71
78
|
id: s.id,
|
|
@@ -90,6 +97,68 @@ export function deleteSession(id) {
|
|
|
90
97
|
unlinkSync(p);
|
|
91
98
|
return true;
|
|
92
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolve a user-provided session reference to a canonical session ID.
|
|
102
|
+
* Accepts:
|
|
103
|
+
* - Exact session ID (any length)
|
|
104
|
+
* - Unique prefix match (like `git checkout <short-sha>`). If multiple
|
|
105
|
+
* sessions share the prefix, returns null + the candidate list via
|
|
106
|
+
* the second return slot so the caller can show a helpful error.
|
|
107
|
+
* - "last" or "latest" → the most-recently-updated session
|
|
108
|
+
*
|
|
109
|
+
* Wrappers (`<id>`, `"id"`, etc.) are stripped before matching — the
|
|
110
|
+
* same forgiving input handling as /stitch-config. This matches user
|
|
111
|
+
* muscle memory: "/resume <id>" gets typed instinctively because the
|
|
112
|
+
* /help line shows `<session-id>` as a placeholder.
|
|
113
|
+
*
|
|
114
|
+
* Returns:
|
|
115
|
+
* { id: string } on success
|
|
116
|
+
* { error: string, candidates?: string[] } on ambiguity or no match
|
|
117
|
+
*/
|
|
118
|
+
export function resolveSessionRef(raw) {
|
|
119
|
+
let ref = raw.trim();
|
|
120
|
+
// Strip a paired wrap: <>, "", '', ``, [], ()
|
|
121
|
+
const wraps = [
|
|
122
|
+
['<', '>'], ['"', '"'], ["'", "'"], ['`', '`'], ['[', ']'], ['(', ')'],
|
|
123
|
+
];
|
|
124
|
+
for (const [open, close] of wraps) {
|
|
125
|
+
if (ref.startsWith(open) && ref.endsWith(close) && ref.length > 2) {
|
|
126
|
+
ref = ref.slice(1, -1).trim();
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (!ref)
|
|
131
|
+
return { error: 'empty session reference' };
|
|
132
|
+
// Shortcut: "last" / "latest" → most-recent by updatedAt
|
|
133
|
+
if (ref === 'last' || ref === 'latest') {
|
|
134
|
+
const sessions = listSessions();
|
|
135
|
+
if (sessions.length === 0)
|
|
136
|
+
return { error: 'no saved sessions' };
|
|
137
|
+
return { id: sessions[0].id };
|
|
138
|
+
}
|
|
139
|
+
// Exact match — fastest path, also lets the user re-resume the
|
|
140
|
+
// currently-active session by its full ID.
|
|
141
|
+
if (existsSync(sessionPath(ref)))
|
|
142
|
+
return { id: ref };
|
|
143
|
+
// Prefix match — the /sessions display previously truncated IDs
|
|
144
|
+
// to 12 chars, so users naturally copy a partial ID. Behave like
|
|
145
|
+
// git: if exactly one session starts with the prefix, use it; if
|
|
146
|
+
// multiple, list them.
|
|
147
|
+
ensureDir();
|
|
148
|
+
const ids = readdirSync(getSessionsDir())
|
|
149
|
+
.filter((f) => f.endsWith('.json'))
|
|
150
|
+
.map((f) => f.slice(0, -5));
|
|
151
|
+
const matches = ids.filter((id) => id.startsWith(ref));
|
|
152
|
+
if (matches.length === 1)
|
|
153
|
+
return { id: matches[0] };
|
|
154
|
+
if (matches.length > 1) {
|
|
155
|
+
return {
|
|
156
|
+
error: `ambiguous prefix "${ref}" — matches ${matches.length} sessions`,
|
|
157
|
+
candidates: matches,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { error: `no session ID starts with "${ref}"` };
|
|
161
|
+
}
|
|
93
162
|
export function createSession(cwd, model, provider, mode) {
|
|
94
163
|
return {
|
|
95
164
|
id: generateSessionId(),
|
|
@@ -105,8 +174,25 @@ export function createSession(cwd, model, provider, mode) {
|
|
|
105
174
|
mode,
|
|
106
175
|
};
|
|
107
176
|
}
|
|
108
|
-
export async function autoSave(session, messages) {
|
|
177
|
+
export async function autoSave(session, messages, snapshot) {
|
|
109
178
|
session.messages = messages;
|
|
179
|
+
// Pull live state forward if the caller passed it. This is what
|
|
180
|
+
// makes /resume actually restore a yolo session as yolo, an
|
|
181
|
+
// architect-mode session as architect, etc. Defensively skip any
|
|
182
|
+
// fields the caller didn't provide so old callsites that don't
|
|
183
|
+
// pass the snapshot still work (just won't see drift captured).
|
|
184
|
+
if (snapshot) {
|
|
185
|
+
if (snapshot.model)
|
|
186
|
+
session.model = snapshot.model;
|
|
187
|
+
if (snapshot.provider)
|
|
188
|
+
session.provider = snapshot.provider;
|
|
189
|
+
if (snapshot.mode)
|
|
190
|
+
session.mode = snapshot.mode;
|
|
191
|
+
if (snapshot.permissionMode)
|
|
192
|
+
session.permissionMode = snapshot.permissionMode;
|
|
193
|
+
if (snapshot.cwd)
|
|
194
|
+
session.cwd = snapshot.cwd;
|
|
195
|
+
}
|
|
110
196
|
await saveSession(session);
|
|
111
197
|
}
|
|
112
198
|
//# sourceMappingURL=sessions.js.map
|
package/dist/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "compact-agent",
|
|
3
|
-
"version": "1.30.
|
|
3
|
+
"version": "1.30.2",
|
|
4
4
|
"description": "Terminal AI coding CLI. Speaks any OpenAI-compatible API (OpenRouter, OpenAI, NVIDIA, Ollama, LM Studio, DeepSeek). Modes, slash commands, multi-agent swarming, key-rotation pool, optional voice + screen-reader, sandbox + permission gates, persistent input box, bundled everything-claude-code skills.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|