@codetreker/daynight 0.31.0 → 0.32.1

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 (105) hide show
  1. package/README.md +81 -15
  2. package/config.example.yml +10 -3
  3. package/dist/cli/agent-cli-aliases.d.ts +21 -0
  4. package/dist/cli/agent-cli-aliases.js +57 -0
  5. package/dist/cli/agent-cli-aliases.js.map +1 -0
  6. package/dist/cli/application.js +5 -0
  7. package/dist/cli/application.js.map +1 -1
  8. package/dist/cli/cancellation.d.ts +1 -1
  9. package/dist/cli/cancellation.js.map +1 -1
  10. package/dist/cli/codex-agent-environment.d.ts +5 -0
  11. package/dist/cli/codex-agent-environment.js +28 -0
  12. package/dist/cli/codex-agent-environment.js.map +1 -0
  13. package/dist/cli/commands.js +1 -0
  14. package/dist/cli/commands.js.map +1 -1
  15. package/dist/cli/schema.d.ts +5 -1
  16. package/dist/cli/schema.js.map +1 -1
  17. package/dist/commands/controller/archive-upload.d.ts +9 -0
  18. package/dist/commands/controller/archive-upload.js +137 -0
  19. package/dist/commands/controller/archive-upload.js.map +1 -0
  20. package/dist/commands/controller/definition.d.ts +1 -0
  21. package/dist/commands/controller/definition.js +9 -1
  22. package/dist/commands/controller/definition.js.map +1 -1
  23. package/dist/commands/controller/independent-archive.d.ts +7 -0
  24. package/dist/commands/controller/independent-archive.js +71 -0
  25. package/dist/commands/controller/independent-archive.js.map +1 -0
  26. package/dist/commands/controller/independent.js +20 -10
  27. package/dist/commands/controller/independent.js.map +1 -1
  28. package/dist/commands/controller/index.js +14 -1
  29. package/dist/commands/controller/index.js.map +1 -1
  30. package/dist/commands/controller/journal-format.js +25 -1
  31. package/dist/commands/controller/journal-format.js.map +1 -1
  32. package/dist/commands/controller/launch-ticket.js +3 -2
  33. package/dist/commands/controller/launch-ticket.js.map +1 -1
  34. package/dist/commands/controller/lifecycle-store.js +19 -7
  35. package/dist/commands/controller/lifecycle-store.js.map +1 -1
  36. package/dist/commands/controller/local-content.d.ts +2 -2
  37. package/dist/commands/controller/local-content.js +22 -20
  38. package/dist/commands/controller/local-content.js.map +1 -1
  39. package/dist/commands/controller/paths.d.ts +2 -0
  40. package/dist/commands/controller/paths.js +34 -0
  41. package/dist/commands/controller/paths.js.map +1 -0
  42. package/dist/commands/controller/pending-content.d.ts +20 -0
  43. package/dist/commands/controller/pending-content.js +159 -0
  44. package/dist/commands/controller/pending-content.js.map +1 -0
  45. package/dist/commands/controller/providers/codex.js +5 -1
  46. package/dist/commands/controller/providers/codex.js.map +1 -1
  47. package/dist/commands/controller/providers/types.d.ts +4 -0
  48. package/dist/commands/controller/resume.js +3 -2
  49. package/dist/commands/controller/resume.js.map +1 -1
  50. package/dist/commands/controller/runtime.js +11 -1
  51. package/dist/commands/controller/runtime.js.map +1 -1
  52. package/dist/commands/controller/sqlite/journal/006-pending-content.sql +12 -0
  53. package/dist/commands/project/definition.js +1 -1
  54. package/dist/commands/project/definition.js.map +1 -1
  55. package/dist/commands/review/definition.js +3 -3
  56. package/dist/commands/review/definition.js.map +1 -1
  57. package/dist/commands/skill/read.d.ts +2 -0
  58. package/dist/commands/skill/read.js +36 -0
  59. package/dist/commands/skill/read.js.map +1 -0
  60. package/dist/commands/skill/skills/using-daynight/references/authorization.md +1 -0
  61. package/dist/commands/skill/skills/using-daynight/references/goal.md +33 -8
  62. package/dist/commands/skill/skills/using-daynight/references/run-task.md +1 -1
  63. package/dist/commands/skill/skills/using-daynight/references/task-content.md +1 -0
  64. package/dist/commands/skill/usage.md +162 -0
  65. package/dist/commands/task/definition.js +1 -1
  66. package/dist/commands/task/definition.js.map +1 -1
  67. package/dist/commands/worker/backends/web-process.js +5 -8
  68. package/dist/commands/worker/backends/web-process.js.map +1 -1
  69. package/dist/commands/worker/backends/web-store.d.ts +1 -0
  70. package/dist/commands/worker/backends/web-store.js +1 -0
  71. package/dist/commands/worker/backends/web-store.js.map +1 -1
  72. package/dist/commands/worker/backends/web.d.ts +1 -0
  73. package/dist/commands/worker/backends/web.js +8 -0
  74. package/dist/commands/worker/backends/web.js.map +1 -1
  75. package/dist/commands/worker/definition.js +2 -2
  76. package/dist/commands/worker/definition.js.map +1 -1
  77. package/dist/commands/worker/herdr/agents.d.ts +3 -0
  78. package/dist/commands/worker/herdr/agents.js +14 -3
  79. package/dist/commands/worker/herdr/agents.js.map +1 -1
  80. package/dist/commands/worker/herdr/arguments.d.ts +4 -0
  81. package/dist/commands/worker/herdr/arguments.js +17 -0
  82. package/dist/commands/worker/herdr/arguments.js.map +1 -1
  83. package/dist/commands/worker/herdr/codex-config.d.ts +8 -0
  84. package/dist/commands/worker/herdr/codex-config.js +75 -0
  85. package/dist/commands/worker/herdr/codex-config.js.map +1 -0
  86. package/dist/commands/worker/herdr/preflight.js +1 -18
  87. package/dist/commands/worker/herdr/preflight.js.map +1 -1
  88. package/dist/commands/worker/herdr.d.ts +4 -0
  89. package/dist/commands/worker/herdr.js +3 -2
  90. package/dist/commands/worker/herdr.js.map +1 -1
  91. package/dist/commands/worker/runtime.js +60 -4
  92. package/dist/commands/worker/runtime.js.map +1 -1
  93. package/dist/config/agent-cli-aliases.d.ts +5 -0
  94. package/dist/config/agent-cli-aliases.js +37 -0
  95. package/dist/config/agent-cli-aliases.js.map +1 -0
  96. package/dist/config/paths.d.ts +1 -1
  97. package/dist/config/paths.js +6 -2
  98. package/dist/config/paths.js.map +1 -1
  99. package/dist/platform/sqlite-format.d.ts +1 -1
  100. package/dist/platform/sqlite-format.js +1 -1
  101. package/dist/platform/sqlite-format.js.map +1 -1
  102. package/dist/session/archive.d.ts +25 -0
  103. package/dist/session/archive.js +100 -0
  104. package/dist/session/archive.js.map +1 -0
  105. package/package.json +2 -2
package/README.md CHANGED
@@ -13,7 +13,9 @@ its exact usage. Review execution additionally requires Git, an authenticated
13
13
  GitHub CLI and Copilot CLI on `PATH`.
14
14
 
15
15
  - [Install and update](#install-and-update)
16
+ - [Configuration root](#configuration-root)
16
17
  - [Client commands](#client-commands)
18
+ - [CLI usage manual](#cli-usage-manual)
17
19
  - [Agent skill installation](#agent-skill-installation)
18
20
  - [Shell completion](#shell-completion)
19
21
  - [Configuration setup](#configuration-setup)
@@ -88,12 +90,35 @@ that file and cause the update to fail. The
88
90
  [self-update decision](../../.agents/notes/archived/feature/2026-10-20-cli-self-update.md)
89
91
  records installation ownership and verification requirements.
90
92
 
93
+ ## Configuration root
94
+
95
+ `DN_CONFIG_DIR` selects the absolute directory containing `config.yml` and all
96
+ Daynight user-local state. When unset, it remains `~/.daynight`. Empty or relative
97
+ values and paths containing control characters are rejected; use an expanded
98
+ absolute path such as `DN_CONFIG_DIR="$HOME/.daynight-test"`. Paths shown under
99
+ `~/.daynight` in this manual describe that default and follow the selected root.
100
+
101
+ The root includes credentials, worker identity, Worker/Review SQLite databases,
102
+ locks, logs, caches, Controller launch tickets, journals, content and resume leases.
103
+ Controller IPC identities are scoped to this root; long Unix socket paths use a
104
+ private owner-checked temporary directory. Herdr retains its native socket length
105
+ limit and reports an error for overly long roots; select a shorter root for
106
+ Herdr mode. Native home and Provider session directories remain unchanged.
107
+ Project `.daynight` bindings, Git worktrees, installed skills, npm installations
108
+ and remote service data are not isolated by this setting.
109
+
110
+ Top-level `agentCliAliases` optionally maps `daynight` and/or `dn` to another
111
+ executable for newly launched Worker/Controller Agents. It defaults to disabled.
112
+ The [development channel guide](../../docs/development.md#keep-the-skills-command-spelling)
113
+ explains the mapping, platform limits, fixed build lifetime and shell verification.
114
+
91
115
  ## Client commands
92
116
 
93
117
  ```text
94
118
  daynight # Show root help
95
119
  daynight --help # Also -h
96
120
  daynight --version # Also -v
121
+ daynight --skill # Print the project/task usage manual
97
122
  daynight update
98
123
  daynight login [--no-browser] # Authorize CLI access through the browser
99
124
  daynight logout # Revoke and remove the current CLI credential
@@ -138,8 +163,8 @@ daynight task attachment remove <task-id> <relative-path> [--project <project-id
138
163
  ```
139
164
 
140
165
  Groups and operations show help when `--help` or `-h` is their sole argument.
141
- Help, version and completion generation do not resolve the user home, load review
142
- configuration, open SQLite or require review tools. `review add-repo` accepts one
166
+ Help, version, usage-manual output and completion generation do not resolve the
167
+ user home, load review configuration, open SQLite or require review tools. `review add-repo` accepts one
143
168
  `--path <path>` before or after its remote; `--path=value` and `--` are invalid.
144
169
  Unknown commands and invalid arguments exit with status 2; operation failures
145
170
  exit with status 1 and retain their cause. The old `--daemon-review` and root
@@ -148,6 +173,31 @@ exit with status 1 and retain their cause. The old `--daemon-review` and root
148
173
  the [composition decision](../../.agents/notes/archived/architecture/2026-10-20-client-command-composition.md)
149
174
  records module ownership and the preserved data layout.
150
175
 
176
+ ## CLI usage manual
177
+
178
+ ```bash
179
+ daynight --skill
180
+ dn --skill
181
+ ```
182
+
183
+ `--skill` prints one standalone English project/task usage manual from the
184
+ current package. It covers project selection, task queries and writes,
185
+ dependencies, properties and attachments. Other capabilities are discovered
186
+ through `daynight --help`, with exact options in each subcommand's help. The
187
+ output preserves the manual's original bytes, including YAML
188
+ frontmatter and the final newline. The document has no package-relative
189
+ references to read separately.
190
+
191
+ The option must be the sole argument. Extra arguments or another option exit
192
+ with status 2 and empty stdout before the manual is read. A missing file, read
193
+ failure or invalid UTF-8 exits with status 1 and retains its cause. Reading and
194
+ validation complete before output; an output failure can leave partial stdout.
195
+ The command requires no login, Git repository, configuration, launcher or
196
+ interactive terminal, and creates no files.
197
+
198
+ The `using-daynight` skill owns task orchestration workflows and is installed
199
+ through the separate command below. The CLI manual explains command use.
200
+
151
201
  ## Agent skill installation
152
202
 
153
203
  The public `using-daynight` skill provides task creation, handoff review and
@@ -396,8 +446,8 @@ messages use stderr so stdout retains its normal text or JSON format.
396
446
  Noninteractive missing review configuration fails with a `review add-repo`
397
447
  command. Shared YAML/schema errors, invalid selected values, explicit empty
398
448
  review lists and read failures retain their errors. Unrelated capability values
399
- remain outside the current command's validation. Help, version, completion,
400
- update and invalid arguments do not prompt.
449
+ remain outside the current command's validation. Help, version, usage-manual
450
+ output, completion, update and invalid arguments do not prompt.
401
451
 
402
452
  Test services and noninteractive automation use the existing
403
453
  `~/.daynight/config.yml` fields. For a test service, provision its origin before
@@ -1120,7 +1170,7 @@ daynight worker run
1120
1170
  ```
1121
1171
 
1122
1172
  First use generates and atomically saves stable root workerId. One instance owns
1123
- fixed `~/.daynight/worker/` state, its SQLite, lock, logs, temporary resources and
1173
+ `worker/` state under the selected configuration root (default `~/.daynight/worker/`), its SQLite, lock, logs, temporary resources and
1124
1174
  private Herdr. Each task uses branch `daynight/<task-id>` and directory
1125
1175
  `<repository>/.worktrees/daynight/<task-id>`. Valid claims retain their dirty
1126
1176
  worktree; task branches and commits remain after terminal cleanup.
@@ -1446,18 +1496,35 @@ for its supported options. These commands do not implement a native TUI or chang
1446
1496
  The command prints the Test Session URL and remains in the foreground. Sign in
1447
1497
  to Daynight as the account that started it; the URL itself grants no access.
1448
1498
  The service's `/test-sessions` page lists that account's online Test Sessions.
1449
- Archived history remains available through the original URL and local resume. Use the sidebar or the Session page's back link to
1450
- return to the list; session IDs do not need to be copied manually.
1499
+ Completed history is available through the original URL after its file archive
1500
+ is ready. Native resume creates a separate execution. Use the sidebar or the
1501
+ Session page's back link to return to the list; session IDs do not need to be
1502
+ copied manually.
1451
1503
  The page, history, resources, WebSocket and commands all enforce that ownership.
1452
1504
  An expired or revoked credential cannot continue authorizing access. Tokens stay
1453
1505
  in private local files and never appear in the URL.
1454
1506
 
1455
1507
  Task and Test pages share the same timeline, composer and interaction handling.
1456
1508
  Refreshing or closing a browser does not create or stop an Agent. Ctrl+C stops
1457
- the owned execution; the service retains its archived history as read-only when
1458
- shutdown registration succeeds. Service unavailability does not prevent local
1459
- process cleanup, but leaves remote archival unconfirmed. The current directory
1460
- and user files are never removed by the launcher.
1509
+ the owned execution. Once the service confirms shutdown, the launcher uploads
1510
+ its recorded timeline and resources to file storage for read-only access. The
1511
+ service database stores archive metadata, not conversation payloads. Service
1512
+ unavailability does not prevent local process cleanup; failed uploads retain
1513
+ their private local source. The current directory and user files are never
1514
+ removed by the launcher.
1515
+
1516
+ Retry a failed upload without starting or resuming the Agent:
1517
+
1518
+ ```sh
1519
+ daynight controller codex archive <test-session-id>
1520
+ ```
1521
+
1522
+ The same command supports `claude` and `copilot`. It verifies the original local
1523
+ execution and stop evidence, and does not require the old working directory to
1524
+ still exist. Use `-- archive` to send the literal word as an initial prompt.
1525
+ Archives are limited to 64 MiB including resource encoding, with at most 8 MiB
1526
+ per resource; incomplete or oversized archives fail explicitly and retain their
1527
+ source. Completed pages disable all Agent controls.
1461
1528
 
1462
1529
  Resume a stopped Test Session with its native context:
1463
1530
 
@@ -1559,8 +1626,7 @@ daynight review run
1559
1626
  ```
1560
1627
 
1561
1628
  For a local build, run `pnpm daynight review run` from the repository root.
1562
- These commands select `~/.daynight/config.yml` using the current OS user's home
1563
- directory. `review add-repo`
1629
+ These commands select `config.yml` under the [configuration root](#configuration-root). `review add-repo`
1564
1630
  creates the configuration when absent. It reads, validates and saves configuration;
1565
1631
  cloning, authentication checks, GitHub calls, SQLite initialization and PR boundary
1566
1632
  selection belong to review startup. An already running reviewer keeps its loaded
@@ -1643,7 +1709,7 @@ This observes actual case and Unicode rules. Validation removes only the
1643
1709
  directories it created, using nonrecursive removal. Probe permission, inspection,
1644
1710
  or cleanup failures stop validation with an error.
1645
1711
 
1646
- The selected retained-state location is `~/.daynight/` for SQLite, sessions,
1712
+ The selected retained-state location is `DN_CONFIG_DIR` (default `~/.daynight/`) for SQLite, sessions,
1647
1713
  locks, logs, cache, and temporary files. PR worktrees belong to each monitored
1648
1714
  repository root's `.worktrees/` directory. `maxConcurrentWorker` limits concurrent
1649
1715
  review preparation and execution. Startup acquires an exclusive instance lock,
@@ -1744,7 +1810,7 @@ verification.
1744
1810
  Each store's baseline and SQL conversions ship as `.sql` resources with the
1745
1811
  installed dist tree. Top-level SQL files in that store's directory run in lexical
1746
1812
  filename order: the first is its baseline, and consecutive numeric prefixes set
1747
- later versions. Five baselines and five upgrades form the current SQL inventory.
1813
+ later versions. Five baselines and six upgrades form the current SQL inventory.
1748
1814
  TypeScript keeps JSON conversion, ownership checks and the atomic version-0 reset;
1749
1815
  ordinary non-SQL subdirectories do not enter the normal chain. Resource loading and
1750
1816
  sequence validation finish before user-database access; package checks compare
@@ -1,4 +1,4 @@
1
- # Shared CLI configuration: ~/.daynight/config.yml.
1
+ # Shared CLI configuration: $DN_CONFIG_DIR/config.yml (default ~/.daynight/config.yml).
2
2
  # Select the sections needed for your commands and replace the example repositories
3
3
  # and local paths. Merge settings into an existing file to retain credentials and
4
4
  # other configuration; this file is a reference, not an automatically loaded config.
@@ -11,6 +11,13 @@ serverUrl: https://daynight.cc
11
11
  # Remove or replace an old token before changing serverUrl manually. Keep secrets
12
12
  # out of repositories and logs; files containing a token need POSIX mode 0600.
13
13
 
14
+ # Optional Agent-only CLI mappings (macOS/Linux), disabled when omitted or {}.
15
+ # Keys are commands the Agent uses; values are executable names or absolute paths.
16
+ # Only new Worker/Controller Agent environments receive these aliases.
17
+ # agentCliAliases:
18
+ # daynight: daynight-dev
19
+ # dn: daynight-dev
20
+
14
21
  # Review configuration. The numeric values below are the defaults; all are positive
15
22
  # integers, and fields ending in Ms use milliseconds.
16
23
  # Only repositoryRoot expands ~. It selects paths for future review add-repo calls
@@ -28,8 +35,8 @@ review:
28
35
  # copilotReasoningEffort: high
29
36
  repositories:
30
37
  - remote: https://github.com/OWNER/REPO.git
31
- # Repository paths are absolute or relative to ~/.daynight/, never the launch
32
- # directory, and do not expand ~. Keep review clones outside ~/.daynight/.
38
+ # Repository paths are absolute or relative to the selected config directory, never the launch
39
+ # directory, and do not expand ~. Keep review clones outside that directory.
33
40
  path: ../daynights/github.com/owner/repo
34
41
 
35
42
  # Worker configuration. Run daynight worker setup to inspect prerequisites,
@@ -0,0 +1,21 @@
1
+ import type { AgentCliAliases, AgentCliAliasName } from "../config/agent-cli-aliases.js";
2
+ export type AgentCliAliasBinding = {
3
+ name: AgentCliAliasName;
4
+ target: string;
5
+ executable: string;
6
+ };
7
+ export type PreparedAgentCliAliases = {
8
+ environment: NodeJS.ProcessEnv;
9
+ bindings: readonly AgentCliAliasBinding[];
10
+ directory: string | null;
11
+ };
12
+ /**
13
+ * Prepare private command shims for a newly launched Agent. The caller retains
14
+ * the directory while any descendant can use it; successful preparation does
15
+ * not change process.env or remove another execution's shims.
16
+ */
17
+ export declare const prepareAgentCliAliases: (options: {
18
+ aliases: AgentCliAliases;
19
+ environment: NodeJS.ProcessEnv;
20
+ stateDirectory: string;
21
+ }) => Promise<PreparedAgentCliAliases>;
@@ -0,0 +1,57 @@
1
+ import { constants } from "node:fs";
2
+ import { access, chmod, mkdir, mkdtemp, realpath, rm, stat, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import which from "which";
5
+ const shellQuote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
6
+ /**
7
+ * Prepare private command shims for a newly launched Agent. The caller retains
8
+ * the directory while any descendant can use it; successful preparation does
9
+ * not change process.env or remove another execution's shims.
10
+ */
11
+ export const prepareAgentCliAliases = async (options) => {
12
+ const entries = Object.entries(options.aliases);
13
+ if (entries.length === 0)
14
+ return { environment: options.environment, bindings: [], directory: null };
15
+ if (process.platform === "win32")
16
+ throw new Error("agentCliAliases is supported only on macOS and Linux; remove the setting to use the unchanged Agent environment on Windows.");
17
+ if (!path.isAbsolute(options.stateDirectory))
18
+ throw new TypeError("Agent CLI alias state directory must be absolute.");
19
+ if (options.stateDirectory.includes(path.delimiter))
20
+ throw new TypeError("agentCliAliases requires DN_CONFIG_DIR without the PATH delimiter; choose a state directory without colons.");
21
+ const bindings = [];
22
+ // Resolve every target against the original PATH before creating any alias.
23
+ // realpath pins a development entry's symlink to its immutable build snapshot.
24
+ for (const [name, target] of entries) {
25
+ let executable;
26
+ try {
27
+ const candidate = path.isAbsolute(target) ? target : await which(target, { path: options.environment.PATH ?? "", nothrow: false });
28
+ executable = await realpath(candidate);
29
+ if (!(await stat(executable)).isFile())
30
+ throw new Error("Target is not a regular file.");
31
+ await access(executable, constants.X_OK);
32
+ }
33
+ catch (cause) {
34
+ throw new Error(`Cannot resolve agentCliAliases.${name} to an executable; install its target or configure an absolute executable path.`, { cause });
35
+ }
36
+ bindings.push({ name, target, executable });
37
+ }
38
+ const parent = path.join(options.stateDirectory, "agent-cli-aliases");
39
+ await mkdir(parent, { recursive: true, mode: 0o700 });
40
+ const directory = await mkdtemp(path.join(parent, "execution-"));
41
+ try {
42
+ await chmod(directory, 0o700);
43
+ for (const binding of bindings) {
44
+ await writeFile(path.join(directory, binding.name), `#!/bin/sh\nexec ${shellQuote(binding.executable)} "$@"\n`, { flag: "wx", mode: 0o700 });
45
+ }
46
+ }
47
+ catch (cause) {
48
+ await rm(directory, { recursive: true, force: true });
49
+ throw cause;
50
+ }
51
+ return {
52
+ environment: { ...options.environment, DN_CONFIG_DIR: options.stateDirectory, PATH: [directory, options.environment.PATH].filter(value => value !== undefined).join(path.delimiter) },
53
+ bindings,
54
+ directory,
55
+ };
56
+ };
57
+ //# sourceMappingURL=agent-cli-aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cli-aliases.js","sourceRoot":"","sources":["../../src/cli/agent-cli-aliases.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,11 @@ export const runCli = async (args, context, registry = commands) => {
14
14
  context.stdout(`${context.version}\n`);
15
15
  return 0;
16
16
  }
17
+ if (selection.kind === "skill") {
18
+ const { runSkillRead } = await import("../commands/skill/read.js");
19
+ await runSkillRead(context);
20
+ return 0;
21
+ }
17
22
  const registration = registry.find(({ name }) => name === selection.command.name);
18
23
  const command = await registration.load();
19
24
  await command.run(selection.remaining, context);
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/cli/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,IAAuB,EACvB,OAAmB,EACnB,QAAQ,GAAmC,QAAQ,EAClC,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChG,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,WAAW,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/cli/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,IAAuB,EACvB,OAAmB,EACnB,QAAQ,GAAmC,QAAQ,EAClC,EAAE;IACnB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChG,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACnE,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;QACnF,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,WAAW,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC"}
@@ -2,4 +2,4 @@ import type { CliContext } from "./context.js";
2
2
  export declare class CliCancelledError extends Error {
3
3
  constructor(message?: string, options?: ErrorOptions);
4
4
  }
5
- export declare const withCliCancellation: <Result>(context: CliContext, action: (signal: AbortSignal) => Promise<Result>, supplied?: AbortSignal, cancellation?: () => Error) => Promise<Result>;
5
+ export declare const withCliCancellation: <Result>(context: Pick<CliContext, "prompt">, action: (signal: AbortSignal) => Promise<Result>, supplied?: AbortSignal, cancellation?: () => Error) => Promise<Result>;
@@ -1 +1 @@
1
- {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../../src/cli/cancellation.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,GAAG,sBAAsB,EAAE,OAAsB;QAClE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAmB,EACnB,MAAgD,EAChD,QAAsB,EACtB,YAAY,GAAgB,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE,EACxC,EAAE;IACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAqB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,SAAS;QAAE,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrF,IAAI,CAAC;QAAC,OAAO,MAAM,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;YACnD,CAAC;QACP,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,MAAM,MAAM,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"cancellation.js","sourceRoot":"","sources":["../../src/cli/cancellation.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,GAAG,sBAAsB,EAAE,OAAsB;QAClE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAmC,EACnC,MAAgD,EAChD,QAAsB,EACtB,YAAY,GAAgB,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE,EACxC,EAAE;IACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAqB,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,SAAS;QAAE,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrF,IAAI,CAAC;QAAC,OAAO,MAAM,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;YACnD,CAAC;QACP,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,MAAM,MAAM,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Preserve the native configuration's PATH while keeping opted-in aliases first. */
2
+ export declare const codexAgentCliOverrides: (environment: Readonly<{
3
+ PATH: string;
4
+ DN_CONFIG_DIR?: string;
5
+ }>, response: unknown) => Record<string, string>;
@@ -0,0 +1,28 @@
1
+ import path from "node:path";
2
+ const object = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
3
+ /** Preserve the native configuration's PATH while keeping opted-in aliases first. */
4
+ export const codexAgentCliOverrides = (environment, response) => {
5
+ const config = object(object(response)?.config);
6
+ if (!config)
7
+ throw new Error("Codex did not return its effective configuration; Agent CLI aliases cannot be applied safely.");
8
+ const rawPolicy = config.shell_environment_policy;
9
+ const policy = object(rawPolicy);
10
+ if (rawPolicy != null && !policy)
11
+ throw new Error("Codex returned an invalid shell environment policy.");
12
+ const set = object(policy?.set);
13
+ if (policy?.set != null && !set)
14
+ throw new Error("Codex returned invalid shell environment overrides.");
15
+ const configuredPath = set?.PATH;
16
+ if (configuredPath !== undefined && typeof configuredPath !== "string")
17
+ throw new Error("Codex returned a non-string shell PATH override.");
18
+ // Prepared aliases always put their private directory first. Preserve the
19
+ // configured tail verbatim, including an empty PATH and empty path entries.
20
+ const directory = environment.PATH.split(path.delimiter)[0];
21
+ if (!path.isAbsolute(directory))
22
+ throw new Error("Agent CLI aliases require an absolute private PATH directory.");
23
+ return {
24
+ "shell_environment_policy.set.PATH": configuredPath === undefined ? environment.PATH : `${directory}${path.delimiter}${configuredPath}`,
25
+ ...(environment.DN_CONFIG_DIR === undefined ? {} : { "shell_environment_policy.set.DN_CONFIG_DIR": environment.DN_CONFIG_DIR }),
26
+ };
27
+ };
28
+ //# sourceMappingURL=codex-agent-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-agent-environment.js","sourceRoot":"","sources":["../../src/cli/codex-agent-environment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,MAAM,GAAG,CAAC,KAAc,EAAuC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,SAAS,CAAC;AAE5L,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,WAA+D,EAAE,QAAiB,EAA0B,EAAE;IACnJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IAC9H,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzG,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACxG,MAAM,cAAc,GAAG,GAAG,EAAE,IAAI,CAAC;IACjC,IAAI,cAAc,KAAK,SAAS,IAAI,OAAO,cAAc,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC5I,0EAA0E;IAC1E,4EAA4E;IAC5E,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClH,OAAO;QACL,mCAAmC,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,cAAc,EAAE;QACvI,GAAG,CAAC,WAAW,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,4CAA4C,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC;KAChI,CAAC;AACJ,CAAC,CAAC"}
@@ -40,6 +40,7 @@ export const commandTree = {
40
40
  description: "A client command toolkit for development workflows",
41
41
  commands: commands.map(({ load, ...definition }) => definition),
42
42
  options: [
43
+ { names: ["--skill"], description: "Print the bundled CLI usage manual for coding agents", action: "skill" },
43
44
  { names: ["-h", "--help"], description: "Show this help", action: "help" },
44
45
  { names: ["-v", "--version"], description: "Show the installed version", action: "version" },
45
46
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export type CommandOption = {
9
9
  };
10
10
  required?: boolean;
11
11
  repeatable?: boolean;
12
- action?: "help" | "version";
12
+ action?: "help" | "version" | "skill";
13
13
  };
14
14
  export type CommandArgument = {
15
15
  name: string;
@@ -37,6 +37,8 @@ export type CommandSelection = CommandLocation & ({
37
37
  kind: "help";
38
38
  } | {
39
39
  kind: "version";
40
+ } | {
41
+ kind: "skill";
40
42
  } | {
41
43
  kind: "selected";
42
44
  remaining: readonly string[];
@@ -45,6 +47,8 @@ export type ParsedCommand = CommandLocation & ({
45
47
  kind: "help";
46
48
  } | {
47
49
  kind: "version";
50
+ } | {
51
+ kind: "skill";
48
52
  } | {
49
53
  kind: "run";
50
54
  values: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type SessionArchiveStatus } from "../../session/archive.js";
2
+ import type { ControllerLaunchTicket } from "./launch-ticket.js";
3
+ export declare const uploadStoppedControllerArchive: (options: {
4
+ journalPath: string;
5
+ ticket: ControllerLaunchTicket;
6
+ serverToken: string;
7
+ request?: typeof fetch;
8
+ signal?: AbortSignal;
9
+ }) => Promise<SessionArchiveStatus>;
@@ -0,0 +1,137 @@
1
+ import Database from "better-sqlite3";
2
+ import { createHash } from "node:crypto";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { sessionBinding } from "../../session/protocol.js";
5
+ import { parseSessionArchive, parseSessionArchiveStatus, verifySessionArchiveResources } from "../../session/archive.js";
6
+ import { assertJournalMigrationAllowed, controllerJournalFormat } from "./journal-format.js";
7
+ import { assertCurrentSqlite, inspectSqlite } from "../../platform/sqlite-format.js";
8
+ import { closeSqliteDatabase, openSqliteDatabase, runSqliteImmediate, sqliteTransactionOutcome } from "../../platform/sqlite-access.js";
9
+ import { SqliteAccessError } from "../../platform/sqlite-error.js";
10
+ import { reconcilePendingContent, openPendingContent, writeDurableJson } from "./pending-content.js";
11
+ const stoppedSnapshot = (db, ticket) => {
12
+ const version = Number(db.pragma("user_version", { simple: true }));
13
+ if (version < 2 || version > 6)
14
+ throw new SqliteAccessError("unsupported-version", { database: controllerJournalFormat.name, file: db.name, phase: "archive-admission", fromVersion: version, toVersion: 6 });
15
+ inspectSqlite(db, controllerJournalFormat);
16
+ const row = db.prepare("SELECT snapshot FROM execution WHERE id=1").get();
17
+ let observed;
18
+ try {
19
+ observed = row === undefined ? null : JSON.parse(row.snapshot);
20
+ }
21
+ catch (cause) {
22
+ throw new SqliteAccessError("invalid-format", { database: controllerJournalFormat.name, file: db.name, phase: "archive-decode" }, { cause });
23
+ }
24
+ if (!observed || !observed.nativeStopped || observed.lifecycle !== "stopped" || observed.sessionId !== ticket.sessionId || observed.executionGeneration !== ticket.executionGeneration || observed.controllerInstanceId !== ticket.controllerInstanceId || observed.executionId !== ticket.executionId || observed.claimId !== ticket.claimId || observed.testExecutionId !== ticket.testExecutionId)
25
+ throw new Error("Session archive requires the original stopped controller generation.");
26
+ return observed;
27
+ };
28
+ const withClosedJournal = (db, action) => {
29
+ let result, failed = false, failure;
30
+ try {
31
+ result = action();
32
+ }
33
+ catch (cause) {
34
+ failed = true;
35
+ failure = cause;
36
+ }
37
+ try {
38
+ closeSqliteDatabase(db, { file: db.name, format: controllerJournalFormat }, failed ? sqliteTransactionOutcome(failure) : "committed");
39
+ }
40
+ catch (close) {
41
+ if (failed)
42
+ throw new AggregateError([failure, close], "Archive journal operation and shutdown failed.");
43
+ throw close;
44
+ }
45
+ if (failed)
46
+ throw failure;
47
+ return result;
48
+ };
49
+ export const uploadStoppedControllerArchive = async (options) => {
50
+ const { ticket, journalPath } = options;
51
+ const fence = { sessionId: ticket.sessionId, ...sessionBinding(ticket), executionGeneration: ticket.executionGeneration, controllerId: ticket.controllerId, controllerInstanceId: ticket.controllerInstanceId };
52
+ const root = ticket.testExecutionId !== undefined ? `/api/v1/test-sessions/${ticket.sessionId}` : `/api/v1/projects/${ticket.projectId}/tasks/${ticket.taskId}/sessions/${ticket.sessionId}`;
53
+ const request = options.request ?? fetch;
54
+ const signal = options.signal ? AbortSignal.any([options.signal, AbortSignal.timeout(30_000)]) : AbortSignal.timeout(30_000);
55
+ const call = async (method, body) => {
56
+ const response = await request(`${ticket.serverOrigin}${root}/archive`, { method, redirect: "error", headers: { Authorization: `Bearer ${options.serverToken}`, ...(body === undefined ? {} : { "Content-Type": "application/json" }) }, ...(body === undefined ? {} : { body }), signal });
57
+ if (!response.ok)
58
+ throw new Error(`Session archive request failed (${response.status}).`);
59
+ return parseSessionArchiveStatus((await response.json()).archive);
60
+ };
61
+ // Inspect the original schema and stop evidence without auto-upgrading first:
62
+ // archive admission deliberately excludes v1 and unproven native generations.
63
+ let original;
64
+ try {
65
+ original = new Database(journalPath, { readonly: true, fileMustExist: true });
66
+ }
67
+ catch (cause) {
68
+ throw new SqliteAccessError("invalid-format", { database: controllerJournalFormat.name, file: journalPath, phase: "archive-open" }, { cause, connectionClosed: true });
69
+ }
70
+ const observed = withClosedJournal(original, () => original.transaction(() => stoppedSnapshot(original, ticket)).deferred());
71
+ const receiptPath = `${journalPath}.archive-receipt-${ticket.executionGeneration}.json`;
72
+ let receipt = null;
73
+ if (existsSync(receiptPath)) {
74
+ receipt = parseSessionArchiveStatus(JSON.parse(readFileSync(receiptPath, "utf8")));
75
+ if (receipt.state !== "ready")
76
+ throw new Error("Invalid local archive receipt.");
77
+ const current = await call("GET");
78
+ if (current.state === "ready") {
79
+ if (current.sha256 !== receipt.sha256 || current.byteLength !== receipt.byteLength)
80
+ throw new Error("Server archive differs from the confirmed receipt.");
81
+ return current;
82
+ }
83
+ }
84
+ let body;
85
+ try {
86
+ const assertOriginal = (db) => {
87
+ if (JSON.stringify(stoppedSnapshot(db, ticket)) !== JSON.stringify(observed))
88
+ throw new Error("The stopped controller evidence changed before archival.");
89
+ };
90
+ const db = openSqliteDatabase({ file: journalPath, format: controllerJournalFormat, allowCreate: false,
91
+ assertMigrationAllowed: (db, source) => { assertOriginal(db); assertJournalMigrationAllowed(db, source); },
92
+ onReady: assertOriginal,
93
+ });
94
+ const archive = withClosedJournal(db, () => runSqliteImmediate(db, () => {
95
+ assertCurrentSqlite(db, controllerJournalFormat);
96
+ assertOriginal(db);
97
+ if (!existsSync(`${journalPath}.pending-content/manifest.json`))
98
+ throw new Error("Pending archive source is missing.");
99
+ const content = openPendingContent(journalPath, ticket.sessionId);
100
+ reconcilePendingContent(db, content);
101
+ const gap = db.prepare("SELECT projection_gap,archive_incomplete FROM execution WHERE id=1").get();
102
+ if (gap.archive_incomplete !== 0 || gap.projection_gap !== null && gap.projection_gap !== "Recovered pending timeline requires full relay resynchronization.")
103
+ throw new Error("Pending archive has an unresolved projection gap.");
104
+ return parseSessionArchive({ schemaVersion: 1, ...fence, provider: ticket.provider, nativeSessionId: observed.nativeSessionId, entries: [...content.entries.values()].sort((a, b) => BigInt(a.entrySeq) < BigInt(b.entrySeq) ? -1 : 1), resources: [...content.resources.values()].sort((a, b) => a.resource.resourceId.localeCompare(b.resource.resourceId)) });
105
+ }));
106
+ await verifySessionArchiveResources(archive);
107
+ body = JSON.stringify(archive);
108
+ }
109
+ catch (error) {
110
+ await call("POST", JSON.stringify({ ...fence, state: "failed", errorCode: "archive_incomplete" })).catch(() => { });
111
+ throw error;
112
+ }
113
+ const sha256 = createHash("sha256").update(body).digest("hex"), byteLength = String(Buffer.byteLength(body));
114
+ const matches = (status) => status.state === "ready" && status.sha256 === sha256 && status.byteLength === byteLength;
115
+ if (receipt && !matches(receipt))
116
+ throw new Error("Archive receipt does not match the original content.");
117
+ try {
118
+ const current = await call("GET");
119
+ if (current.state === "ready") {
120
+ if (!matches(current))
121
+ throw new Error("Server archive differs from the stopped execution.");
122
+ writeDurableJson(receiptPath, current);
123
+ return current;
124
+ }
125
+ await call("POST", JSON.stringify({ ...fence, state: "pending", errorCode: null }));
126
+ const uploaded = await call("PUT", body);
127
+ if (!matches(uploaded))
128
+ throw new Error("Session archive upload was not confirmed with matching integrity.");
129
+ writeDurableJson(receiptPath, uploaded);
130
+ return uploaded;
131
+ }
132
+ catch (error) {
133
+ await call("POST", JSON.stringify({ ...fence, state: "failed", errorCode: "upload_failed" })).catch(() => { });
134
+ throw error;
135
+ }
136
+ };
137
+ //# sourceMappingURL=archive-upload.js.map