picocode-core 0.9.140 → 0.9.141
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/package.json +1 -1
- package/src/controller.js +3 -3
- package/src/session.js +8 -1
package/package.json
CHANGED
package/src/controller.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync } from 'node:fs'
|
|
|
2
2
|
import { writeFile } from 'node:fs/promises'
|
|
3
3
|
import { join } from 'node:path'
|
|
4
4
|
import { makeEvent } from './events.js'
|
|
5
|
-
import { createSession, forkSession, openSession, loadSession, listSessions, deleteSession, appendSessionEvent, onSessionWriteError } from './session.js'
|
|
5
|
+
import { createSession, createEphemeralSession, forkSession, openSession, loadSession, listSessions, deleteSession, appendSessionEvent, onSessionWriteError } from './session.js'
|
|
6
6
|
import { createContextTracker } from './context.js'
|
|
7
7
|
import { deriveState, userEntries, rewindStats } from './derive.js'
|
|
8
8
|
import { appendPrompt } from './history.js'
|
|
@@ -154,7 +154,7 @@ export function createController({ boot }) {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
function ensureSession() {
|
|
157
|
-
if (!state.session) state.session = createSession({ cwd: boot.cwd, root: boot.root })
|
|
157
|
+
if (!state.session) state.session = (boot.ephemeral ? createEphemeralSession : createSession)({ cwd: boot.cwd, root: boot.root })
|
|
158
158
|
while (state.persisted < state.events.length) {
|
|
159
159
|
state.session.append(state.events[state.persisted])
|
|
160
160
|
state.persisted++
|
|
@@ -738,7 +738,7 @@ export function createController({ boot }) {
|
|
|
738
738
|
}
|
|
739
739
|
try {
|
|
740
740
|
await session.flush()
|
|
741
|
-
await deleteSession(session.file)
|
|
741
|
+
if (session.file) await deleteSession(session.file)
|
|
742
742
|
} catch (err) {
|
|
743
743
|
flash(`delete failed: ${errorText(err, 80)}`)
|
|
744
744
|
return false
|
package/src/session.js
CHANGED
|
@@ -90,9 +90,16 @@ export function createSession({ cwd, root, forkedFrom }) {
|
|
|
90
90
|
return session
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
// an ephemeral session keeps its events in memory only: no file, no index
|
|
94
|
+
// entry, nothing to resume once it is closed
|
|
95
|
+
export function createEphemeralSession({ cwd, root, forkedFrom }) {
|
|
96
|
+
const header = makeHeader({ cwd, root, forkedFrom })
|
|
97
|
+
return { id: header.id, file: null, header, ephemeral: true, append() {}, async flush() {} }
|
|
98
|
+
}
|
|
99
|
+
|
|
93
100
|
export async function forkSession({ source, cwd, root, events, label }) {
|
|
94
101
|
await source?.flush()
|
|
95
|
-
const session = createSession({ cwd, root, forkedFrom: source?.id })
|
|
102
|
+
const session = source?.ephemeral ? createEphemeralSession({ cwd, root, forkedFrom: source.id }) : createSession({ cwd, root, forkedFrom: source?.id })
|
|
96
103
|
for (const event of events) session.append(event)
|
|
97
104
|
const title = makeEvent('title', { text: label })
|
|
98
105
|
session.append(title)
|