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.
@@ -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
- export declare function autoSave(session: Session, messages: Message[]): Promise<void>;
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
- const SESSIONS_DIR = join(getConfigDir(), 'sessions');
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(SESSIONS_DIR, { recursive: true });
40
+ mkdirSync(getSessionsDir(), { recursive: true });
34
41
  }
35
42
  function sessionPath(id) {
36
- return join(SESSIONS_DIR, `${id}.json`);
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(SESSIONS_DIR).filter((f) => f.endsWith('.json'));
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(SESSIONS_DIR, file), 'utf-8');
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
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
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.0",
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",