@bramblex/codex-workbench 0.1.2 → 0.1.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.
Files changed (3) hide show
  1. package/README.md +7 -1
  2. package/package.json +1 -1
  3. package/src/cli.js +27 -4
package/README.md CHANGED
@@ -50,7 +50,7 @@ codex-workbench archive <session>
50
50
  codex-workbench unarchive <session>
51
51
  codex-workbench hide <session>
52
52
  codex-workbench unhide <session>
53
- codex-workbench delete <session> [--force]
53
+ codex-workbench delete <session> [--force] [--file]
54
54
  ```
55
55
 
56
56
  Run without arguments to open the interactive UI:
@@ -82,6 +82,12 @@ codex-workbench unhide <session>
82
82
  codex-workbench list --all
83
83
  ```
84
84
 
85
+ Use `delete --file` only for broken sessions that Codex can no longer remove. It deletes the local session JSONL file directly:
86
+
87
+ ```sh
88
+ codex-workbench delete <session> --file
89
+ ```
90
+
85
91
  Use `doctor` to check which Codex executable the CLI will launch:
86
92
 
87
93
  ```sh
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bramblex/codex-workbench",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Terminal workbench for browsing and managing local Codex sessions.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/cli.js CHANGED
@@ -29,7 +29,7 @@ Usage:
29
29
  codex-workbench unarchive <session>
30
30
  codex-workbench hide <session>
31
31
  codex-workbench unhide <session>
32
- codex-workbench delete <session> [--force]
32
+ codex-workbench delete <session> [--force] [--file]
33
33
 
34
34
  Environment:
35
35
  CODEX_HOME default: ~/.codex
@@ -246,6 +246,18 @@ function updateMetadata(session, patch) {
246
246
  writeJson(META_PATH, meta);
247
247
  }
248
248
 
249
+ function removeMetadata(session) {
250
+ const meta = loadMeta();
251
+ delete meta.sessions[session.id];
252
+ meta.updatedAt = new Date().toISOString();
253
+ writeJson(META_PATH, meta);
254
+ }
255
+
256
+ function deleteSessionFile(session) {
257
+ fs.unlinkSync(session.file);
258
+ removeMetadata(session);
259
+ }
260
+
249
261
  function usableCwd(dir) {
250
262
  const candidates = [dir, process.cwd(), HOME];
251
263
  for (const candidate of candidates) {
@@ -305,6 +317,7 @@ function parseFlags(args) {
305
317
  if (arg === '--json') out.json = true;
306
318
  else if (arg === '--all') out.all = true;
307
319
  else if (arg === '--force') out.force = true;
320
+ else if (arg === '--file') out.file = true;
308
321
  else if (arg === '--cwd') {
309
322
  if (i + 1 >= args.length) throw new Error('--cwd requires a directory.');
310
323
  out.cwd = args[++i];
@@ -717,8 +730,14 @@ async function ui() {
717
730
  }
718
731
  const status = runCodexAndReturn('delete', session, ['--force'], `Deleted ${shortId(session.id)}.`);
719
732
  if (status !== 0) {
720
- const hide = await askConfirm(`Codex could not delete ${shortId(session.id)}. Hide it from workbench?`);
721
- if (hide) {
733
+ const removeFile = await askConfirm(`Codex could not delete ${shortId(session.id)}. Delete its session file?`);
734
+ if (removeFile) {
735
+ deleteSessionFile(session);
736
+ refreshAfterAction(`Deleted file for ${shortId(session.id)}.`);
737
+ return;
738
+ }
739
+ const hideSession = await askConfirm(`Hide ${shortId(session.id)} from workbench instead?`);
740
+ if (hideSession) {
722
741
  updateMetadata(session, { hidden: true });
723
742
  refreshAfterAction(`Hidden ${shortId(session.id)}.`);
724
743
  }
@@ -751,7 +770,11 @@ async function main() {
751
770
  if (cmd === 'unarchive') return codexCommand('unarchive', resolveSession(flags._[0], sessions));
752
771
  if (cmd === 'hide') return updateMetadata(resolveSession(flags._[0], sessions), { hidden: true });
753
772
  if (cmd === 'unhide') return updateMetadata(resolveSession(flags._[0], sessions), { hidden: false });
754
- if (cmd === 'delete') return codexCommand('delete', resolveSession(flags._[0], sessions), flags.force ? ['--force'] : []);
773
+ if (cmd === 'delete') {
774
+ const session = resolveSession(flags._[0], sessions);
775
+ if (flags.file) return deleteSessionFile(session);
776
+ return codexCommand('delete', session, flags.force ? ['--force'] : []);
777
+ }
755
778
 
756
779
  usage();
757
780
  process.exitCode = 2;