@oneciel-ai/ciel-runtime 0.2.22 → 0.2.23

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 (86) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/README.md +150 -57
  3. package/ciel-runtime-stop.cmd +1 -0
  4. package/ciel-runtime.cmd +1 -0
  5. package/ciel-runtimectl.cmd +1 -0
  6. package/ciel_runtime.py +56 -53
  7. package/ciel_runtime_support/anthropic_tool_turns.py +81 -0
  8. package/ciel_runtime_support/architecture.py +17 -0
  9. package/ciel_runtime_support/channel_injection.py +113 -3
  10. package/ciel_runtime_support/channel_message_prompt.py +15 -0
  11. package/ciel_runtime_support/channel_pending_injection.py +28 -4
  12. package/ciel_runtime_support/channel_pending_poll.py +2 -0
  13. package/ciel_runtime_support/channel_terminal_context.py +6 -0
  14. package/ciel_runtime_support/channel_terminal_dispatch.py +2 -0
  15. package/ciel_runtime_support/channel_terminal_proxy.py +8 -2
  16. package/ciel_runtime_support/channel_wake_claim_repository.py +7 -0
  17. package/ciel_runtime_support/channel_wake_context.py +7 -3
  18. package/ciel_runtime_support/cli_parser.py +6 -0
  19. package/ciel_runtime_support/codex_backend_context.py +4 -0
  20. package/ciel_runtime_support/codex_turn_recovery.py +75 -12
  21. package/ciel_runtime_support/config_migrations.py +102 -10
  22. package/ciel_runtime_support/config_repository.py +9 -0
  23. package/ciel_runtime_support/event_settings_cli.py +284 -2
  24. package/ciel_runtime_support/openai_chat_passthrough.py +2 -0
  25. package/ciel_runtime_support/protocols/openai_responses.py +22 -18
  26. package/ciel_runtime_support/provider_adapters.py +7 -0
  27. package/ciel_runtime_support/provider_policy.py +10 -1
  28. package/ciel_runtime_support/provider_request_builder.py +9 -2
  29. package/ciel_runtime_support/provider_responses_passthrough.py +4 -0
  30. package/ciel_runtime_support/providers/__init__.py +2 -0
  31. package/ciel_runtime_support/providers/alibaba.py +33 -10
  32. package/ciel_runtime_support/providers/constants.py +1 -0
  33. package/ciel_runtime_support/providers/opencode.py +25 -5
  34. package/ciel_runtime_support/providers/opencode_go.py +3 -3
  35. package/ciel_runtime_support/providers/openrouter.py +76 -3
  36. package/ciel_runtime_support/providers/tabitoken.py +130 -0
  37. package/ciel_runtime_support/remote_instructions.py +20 -6
  38. package/ciel_runtime_support/remote_memory.py +515 -55
  39. package/ciel_runtime_support/responses_input_compatibility.py +14 -0
  40. package/ciel_runtime_support/router_http.py +5 -0
  41. package/ciel_runtime_support/runtime_constants.py +1 -1
  42. package/ciel_runtime_support/runtime_launch.py +9 -2
  43. package/ciel_runtime_support/runtime_paths.py +2 -0
  44. package/ciel_runtime_support/tool_side_effect_dedupe.py +7 -4
  45. package/ciel_runtime_support/transcript_delta_delivery.py +333 -0
  46. package/ciel_runtime_support/usage_events.py +45 -3
  47. package/ciel_runtime_support/usage_service.py +871 -0
  48. package/ciel_runtime_support/windows_conpty.py +108 -2
  49. package/ciel_runtime_support/workspace_mcp.py +4 -0
  50. package/docs/CLI-Reference.md +11 -0
  51. package/docs/Configuration.md +7 -2
  52. package/docs/MCP-Channels.md +7 -3
  53. package/docs/Module-Map.md +4 -0
  54. package/docs/Providers.md +32 -0
  55. package/docs/Remote-Memory.md +29 -10
  56. package/docs/Test-Suite.md +1 -0
  57. package/docs/journal/2026/08/20/kevin-wake-orphan-tool-repair.md +161 -0
  58. package/docs/journal/2026/08/20/nightly-push-local-deployment.md +59 -2
  59. package/docs/journal/2026/08/20/wing-remote-memory-replication-verification.md +107 -0
  60. package/docs/journal/2026/08/21/alibaba-singapore-qwen38-official-alignment.md +64 -0
  61. package/docs/journal/2026/08/21/codex-visible-sse-wake-submit-regression.md +85 -0
  62. package/docs/journal/2026/08/21/external-sse-wake-only-change-analysis.md +131 -0
  63. package/docs/journal/2026/08/21/hyundai-invalid-replayed-tool-name-repair.okf +88 -0
  64. package/docs/journal/2026/08/21/local-stale-temporary-runtime-pin-repair.okf +118 -0
  65. package/docs/journal/2026/08/21/transcript-compaction-external-events.okf +131 -0
  66. package/docs/journal/2026/08/21/wing-ai-net-mcp-boundary-diagnosis.okf +129 -0
  67. package/docs/journal/2026/08/21/wing-cold-start-wake-submit-repair.okf +161 -0
  68. package/docs/journal/2026/08/21/wing-powershell-memory-runaway.okf +101 -0
  69. package/docs/journal/2026/08/21/wing-repeated-reasoning-tool-turn-repair.okf +112 -0
  70. package/docs/journal/2026/08/21/wing-repeated-tool-guard-finalization.okf +81 -0
  71. package/docs/journal/2026/08/21/wing-working-directory-memory-deployment.md +110 -0
  72. package/docs/journal/2026/08/21/wing-workspace-state-memory-prompt-injection.md +88 -0
  73. package/docs/journal/2026/08/22/alibaba-singapore-dual-endpoint-wire-alignment.okf +142 -0
  74. package/docs/journal/2026/08/22/delluhiold-claude-compaction-empty-tool-name.okf +168 -0
  75. package/docs/journal/2026/08/22/remote-memory-relative-prompt-paths.okf +79 -0
  76. package/docs/journal/2026/08/22/remote-memory-root-system-prompt.okf +121 -0
  77. package/docs/journal/2026/08/23/claude-web-chat-stateless-mcp-repair.okf +97 -0
  78. package/docs/journal/2026/08/23/cross-runtime-token-usage-interfaces-research.okf +378 -0
  79. package/docs/journal/2026/08/23/main-0.2.23-readme-release.okf +81 -0
  80. package/docs/journal/2026/08/23/mia-openrouter-ox-alpha-latency-diagnosis.okf +146 -0
  81. package/docs/journal/2026/08/23/openrouter-opencode-ox-alpha-support.okf +114 -0
  82. package/docs/journal/2026/08/23/tabitoken-provider-model-catalog.okf +97 -0
  83. package/docs/journal/2026/08/23/usage-stream-snapshot-implementation.okf +134 -0
  84. package/docs/usage-observability.md +141 -0
  85. package/install.ps1 +24 -3
  86. package/package.json +2 -1
@@ -0,0 +1,107 @@
1
+ # Wing remote-memory replication verification
2
+
3
+ ## Scope
4
+
5
+ - Host: `WING` (`wing\\daniel.yun`, SSH port 1004)
6
+ - Workspace: `C:\Users\daniel.yun.WING`
7
+ - Installed package: `@oneciel-ai/ciel-runtime@0.2.22-nightly.20260821-043829.b7ea382`
8
+
9
+ ## Configuration evidence
10
+
11
+ - Remote Memory is enabled.
12
+ - Manifest endpoint:
13
+ `http://100.94.212.25:3600/api/v1/integrations/agent-memory/manifest.json`
14
+ - Authorization is stored; its value was not printed.
15
+ - Destination: `.ciel/memory`
16
+
17
+ ## Replication evidence
18
+
19
+ - Workspace state file:
20
+ `C:\Users\daniel.yun.WING\AppData\Roaming\ciel-runtime\workspaces\f895679997f4\remote-memory.json`
21
+ - State timestamp: `2026-08-21T04:45:14.4014143Z`
22
+ - State records `reason=launch`, index `.ciel/memory/index.md`, and 28 files.
23
+ - The destination contains 28 files totaling 50,689 bytes.
24
+ - `index.md` SHA-256:
25
+ `81A345506C84B8E6D4FD0FA16DD36B4EF625761677CEF6D2B97763C6D64DB1A5`
26
+ - `AGENTS.md` lines 505-507 contain the managed pointer block with
27
+ `Memory index: .ciel/memory/index.md`.
28
+
29
+ ## Runtime log evidence
30
+
31
+ - Router log:
32
+ `C:\Users\daniel.yun.WING\AppData\Roaming\ciel-runtime\router-instances\9139-f895679997f4\router.log`
33
+ - Successful launch synchronizations: 3.
34
+ - Failed synchronizations: 0.
35
+ - The latest success at `2026-08-20T23:45:14` reports
36
+ `remote_memory_updated runtime=codex files=28 index=.ciel/memory/index.md reason=launch`.
37
+
38
+ ## Conclusion
39
+
40
+ Wing's workspace memory tree was downloaded from the configured server during
41
+ runtime launch, written to `.ciel/memory`, and projected into `AGENTS.md` via
42
+ the managed local index pointer.
43
+
44
+ ## Scope correction
45
+
46
+ - The live router health response identifies its workspace as
47
+ `c:\users\daniel.yun.wing`, which is the Wing user's home directory rather
48
+ than a project directory.
49
+ - The implementation derives both the memory root and instruction target from
50
+ `Path.cwd()`: memory is placed at `<workspace>/.ciel/memory`, while the Codex
51
+ pointer is placed at `<workspace>/AGENTS.md`.
52
+ - Therefore the synchronization mechanism is workspace-relative in source,
53
+ but this live process selected the user home as that workspace. On Wing the
54
+ observed placement is consequently home-scoped, not project-scoped.
55
+ - The earlier replication-success conclusion remains valid only for download
56
+ and projection behavior; it does not establish correct project isolation.
57
+
58
+ ## Repair scope
59
+
60
+ - Remote Instruction and Remote Memory now use the router's normalized launch
61
+ workspace rather than independently reading the router process working
62
+ directory.
63
+ - Remote Memory rejects a user-home or filesystem-root workspace before any
64
+ HTTP request and removes a stale managed pointer from the native instruction
65
+ file.
66
+ - The rule is path-scope based and applies to every supported runtime. It does
67
+ not contain a Wing, user, session, provider, model, or agent exception.
68
+
69
+ ## Repair verification
70
+
71
+ - Focused Remote Memory and runtime integration suite: 13 tests passed.
72
+ - Full pre-release suite: unit 1,108, router 902, channel 372, and runtime 247
73
+ tests passed; 136 declared environment-dependent tests were skipped.
74
+ - Ruff, Python compilation, documentation metadata, and `git diff --check`
75
+ passed.
76
+ - A standalone loopback-HTTP probe synchronized `alpha` and `beta` into two
77
+ independent `.ciel/memory/index.okf` trees and injected a pointer into each
78
+ project's `AGENTS.md`. Four HTTP requests were observed: one manifest and one
79
+ file download for each workspace.
80
+ - The same probe used the synthetic user home as workspace. It returned
81
+ `failed`, made zero HTTP requests, removed the managed pointer, and did not
82
+ create a parent/global memory tree.
83
+
84
+ ## Wing post-deployment recheck
85
+
86
+ - Wing is running installed nightly
87
+ `0.2.22-nightly.20260821-051020.13f5d91`; router health reports the same
88
+ version and source fingerprint `7e5d2ce08c25c07e`.
89
+ - The only registered and launched workspace remains
90
+ `C:\Users\daniel.yun.WING`, the user's home directory.
91
+ - Four post-deployment launches logged `remote_memory_failed` with the exact
92
+ project-scope rejection. No post-deployment `remote_memory_updated` entry
93
+ exists.
94
+ - The old state and 28 downloaded files remain on disk with their original
95
+ `2026-08-21T04:45:14Z` timestamps. They are stale artifacts from the earlier
96
+ home-scoped implementation, not a new project-scoped dump.
97
+ - `AGENTS.md` contains zero managed memory-pointer matches. Its pointer-removal
98
+ write occurred at `2026-08-21T06:39:34Z`.
99
+ - The active Codex process started at `2026-08-21T06:39:51Z`, after pointer
100
+ removal, so this active session did not start with the stale memory index
101
+ pointer.
102
+
103
+ ## Post-deployment conclusion
104
+
105
+ The scope guard is working, but Wing does not currently have a usable
106
+ project-scoped memory dump because it is still launched from the user home.
107
+ The 28 files visible under the home directory are stale and unreferenced.
@@ -0,0 +1,64 @@
1
+ # Alibaba Singapore Qwen3.8 official alignment
2
+
3
+ ## Scope
4
+
5
+ - Align Ciel Runtime's Alibaba Model Studio Singapore provider data with the
6
+ official `qwen3.8-max` model page supplied by the user.
7
+ - Preserve user-selected custom models and avoid inventing a Workspace ID.
8
+
9
+ ## Confirmed evidence
10
+
11
+ - Alibaba's official model page, updated 2026-08-03, lists `qwen3.8-max` for
12
+ Singapore International scope.
13
+ - Official limits are a 1,000,000-token context window, 991,808-token normal
14
+ input, 983,616-token thinking input, and 131,072-token output.
15
+ - Singapore supports text, image, and video input; function calling; structured
16
+ outputs; web search; partial mode; and context caching.
17
+ - The official Singapore endpoints contain an account-specific Workspace ID:
18
+ `https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1`
19
+ and the corresponding `/apps/anthropic` route.
20
+ - A live authenticated Token Plan `/models` request returned HTTP success and
21
+ exactly one `qwen3.8-max` entry. The response did not expose context metadata.
22
+
23
+ ## Changes
24
+
25
+ - `alims-intl` now defaults to `qwen3.8-max`, includes it in the fallback
26
+ catalog, records `ap-southeast-1`, and uses the official context/output
27
+ limits.
28
+ - `alitoken` and `alitoken-individual` use the same confirmed 1,000,000-token
29
+ context value when `qwen3.8-max` is selected.
30
+ - A dated migration adds Qwen3.8 to existing Model Studio catalogs. It upgrades
31
+ only the exact former Qwen3.7 default profile and preserves non-default model
32
+ selections and custom catalog entries.
33
+ - The legacy default endpoint remains available because the official sources
34
+ checked here do not prove that it has been retired. The provider accepts the
35
+ account-specific official workspace URL through `base_url` and derives its
36
+ Anthropic route from it.
37
+
38
+ ## Verification
39
+
40
+ - Focused Ruff checks passed.
41
+ - Alibaba provider tests passed: 31.
42
+ - Codex runtime tests passed: 69, with 12 environment-dependent skips.
43
+ - Documentation metadata and `git diff --check` passed.
44
+ - An in-memory migration of the current legacy configuration produced
45
+ `qwen3.8-max`, region `ap-southeast-1`, context/max model length `1000000`,
46
+ max output `131072`, and effort `xhigh` for the applicable Alibaba providers.
47
+ - Full repository verification passed: unit 1,113, router 905, channel 379,
48
+ runtime 247; 2,644 total tests with 136 environment-dependent skips.
49
+ - Full Ruff, documentation metadata, `git diff --check`, compilation, and npm
50
+ package dry-run checks passed. The package contains 387 files, including the
51
+ changed provider, migration, documentation, and journal files.
52
+ - Code commit `fe7c4b09ad4178adabc73162b3c6dc2cbb5870f2` passed CI run
53
+ `32507635324` and npm publication run `32507635197`.
54
+ - npm published `0.2.22-nightly.20260821-172249.fe7c4b0`; its registry
55
+ `gitHead` exactly matches the code commit.
56
+ - The exact published version was installed globally. The npm shim reported the
57
+ same version, and SHA-256 hashes for the installed provider and migration
58
+ files exactly matched the workspace files.
59
+ - Executing the npm-installed code produced the expected `alims-intl` defaults:
60
+ `qwen3.8-max`, `ap-southeast-1`, context/max model length `1000000`, max
61
+ output `131072`, and effort `xhigh`.
62
+ - Executing its migration upgraded the untouched Qwen3.7 Model Studio profile,
63
+ preserved `private-model`, corrected Qwen3.8 Token Plan context to `1000000`,
64
+ and left a separately selected private Token Plan model at `1048576`.
@@ -0,0 +1,85 @@
1
+ # Codex visible SSE wake submit regression
2
+
3
+ ## Observed failure
4
+
5
+ - WING showed the injected wake body collapsed in the Codex editor as
6
+ `[Pasted Content 1048 chars]`, with the cursor still in the editor.
7
+ - Runtime log message `1221` recorded two full-prompt injections at 10:03:54
8
+ and 10:04:15, followed by `channel_windows_console_body_fallback`; no Codex
9
+ transcript user record exists for `1221`.
10
+ - Message `1220` recorded injections at 10:02:36 and 10:02:56. Its Codex
11
+ transcript user record at 15:02:57.722Z contains the same complete wake body
12
+ twice in one submitted turn.
13
+
14
+ ## Confirmed code path
15
+
16
+ - The affected WING process logged `transport=conpty`, `enter=cr`,
17
+ `submit_retries=4`, `confirm_submit=True`, `bracketed_paste=True`, and
18
+ `display_body=True`.
19
+ - `ChannelPromptInjector` performed multiple submit attempts only when its
20
+ pre-submit snapshot was non-empty.
21
+ - The Windows ConPTY transport returned no input snapshot, while the injected
22
+ host snapshot callback is the tmux reader and returned no snapshot on WING.
23
+ - Therefore the configured four attempts reduced to one Enter per full-prompt
24
+ injection. The later inflight retry injected the entire body again rather
25
+ than retrying only Enter.
26
+
27
+ ## Correction
28
+
29
+ - Windows ConPTY now exposes its captured child-output tail as a submission
30
+ snapshot.
31
+ - The injector uses the transport snapshot only when the host snapshot is
32
+ unavailable. A lack of output change after Enter now advances to the next
33
+ configured submit attempt without rewriting the prompt body.
34
+ - ConPTY deliberately keeps `supports_input_snapshot=False` for body-prefix
35
+ verification. Codex replaces long pasted text with a placeholder, so the
36
+ output tail cannot prove that the original prompt prefix is present.
37
+ - SSE receiving, event persistence, wake formatting, and Claude/AGY launch
38
+ policies are unchanged.
39
+
40
+ ## Local verification
41
+
42
+ - Focused injection tests: 4 passed.
43
+ - Windows ConPTY tests, including native transport execution: 13 passed.
44
+ - Full unittest discovery: 2,640 passed, 136 skipped, in 296.415 seconds.
45
+ - Ruff: passed.
46
+ - Documentation metadata check: passed before this journal was added.
47
+ - npm dry-run package: 385 entries.
48
+
49
+ ## Deployment verification
50
+
51
+ - First nightly `0.2.22-nightly.20260821-152001.fc290a0` passed CI and npm
52
+ publication, but its WING execution did not satisfy the task:
53
+ - event `1223` remained in the Codex input editor;
54
+ - the runtime incorrectly logged `channel_stdin_proxy_submit_confirmed
55
+ attempt=1`;
56
+ - a physical Enter delivered through the same SSH PTY immediately cleared
57
+ the editor and started the turn.
58
+ - This disproved output-tail change alone as submission evidence. The delayed
59
+ prompt redraw was the observed change, meaning automatic Enter was sent
60
+ before Codex completed rendering the injected paste.
61
+ - Follow-up correction waits for a ConPTY output change to settle before the
62
+ submit delay and Enter attempts begin.
63
+ - Follow-up focused suites passed: injection 5, injection architecture 4,
64
+ Windows ConPTY 13, and the affected channel bridge regression 1.
65
+ - Follow-up full unittest discovery passed: 2,641 tests, 136 skipped, in
66
+ 290.103 seconds.
67
+ - Final code nightly: `0.2.22-nightly.20260821-153910.b410b4c` with npm
68
+ `gitHead=b410b4cc8ef791c0e0066c70fc703b709ed3fafd`.
69
+ - GitHub CI run `32498550524`: passed.
70
+ - GitHub npm publish run `32498550502`: passed, including tarball
71
+ verification.
72
+ - WING installed that exact version and executed Codex 0.149.0 in the actual
73
+ `C:\Users\daniel.yun.WING` workspace through Windows ConPTY.
74
+ - External SSE connection event `1224` was rendered in the Codex editor and,
75
+ without any manual input, the editor cleared and changed to `Working`.
76
+ - Router evidence:
77
+ - `channel_input_prompt_ready result=observed` at 10:44:18;
78
+ - `channel_stdin_proxy_submit_confirmed attempt=1` and injected `1224` at
79
+ 10:44:20;
80
+ - LLM context injection at 10:44:21;
81
+ - transcript completion evidence and cursor confirmation to `1224` at
82
+ 10:44:35.
83
+ - The latest Codex transcript contains one user record for `1224`. No record
84
+ contains `pending_ids=1224` more than once, proving the former duplicate-body
85
+ retry did not recur.
@@ -0,0 +1,131 @@
1
+ # External SSE wake-only TTY change analysis
2
+
3
+ ## Observation
4
+
5
+ - External SSE messages previously appeared with their full body in the active
6
+ CLI terminal.
7
+ - Current routed sessions display only `[ciel-wake] pending_ids=...` in the
8
+ terminal.
9
+
10
+ ## Confirmed history
11
+
12
+ - Commit `66eb29c3d1ee1b90fbca84f27d18cb590b46ff4c` on 2026-08-18
13
+ (`feat: restore router-backed chat injection`) changed
14
+ `format_channel_llm_delivery_wake_prompt` from the full-body formatter to a
15
+ dedicated wake-only formatter.
16
+ - That commit's tests explicitly changed from asserting that the external body
17
+ is present in TTY bytes to asserting that it is absent and only message IDs
18
+ are present.
19
+ - Commit `0208728356504baf432e85b442a646b2e9ff7359` later on 2026-08-18
20
+ (`fix: prevent router wake loss behind tty entries`) shortened the marker to
21
+ the current `[ciel-wake] pending_ids=...` form.
22
+
23
+ ## Current delivery path
24
+
25
+ - External SSE receivers submit the exact decoded event through
26
+ `RuntimeInputGateway.submit_external_event` without an `input_transport`
27
+ override.
28
+ - `message_input_transport` treats a missing persisted transport as `router`.
29
+ - Routed CLI launches enable `wake_for_llm_delivery` whenever router mode is
30
+ active.
31
+ - The terminal injection path therefore writes only the wake marker. On the
32
+ subsequent routed model request, `inject_pending_channel_context` removes the
33
+ marker and appends the full formatted external-event body to the LLM request.
34
+ - The exact event remains model input, but it is no longer rendered as full TTY
35
+ input in this path.
36
+
37
+ ## WING evidence
38
+
39
+ - The active WING launch state identifies the affected process as
40
+ `mode=codex-router`, model `deepseek-v4-pro:0813`.
41
+ - WING's workspace-local `runtime-inputs.jsonl` contains both screenshot IDs:
42
+ - `1217`: the exact `net.ai-net.connected` event from Dave.
43
+ - `1218`: the exact `net.ai-net.room.activity` event, including room,
44
+ message, author, and instruction data.
45
+ - This proves SSE receive and durable storage succeeded for those two events;
46
+ the missing terminal body was the wake formatter's presentation policy.
47
+
48
+ ## Runtime-specific correction
49
+
50
+ - Kept `format_llm_delivery_wake_prompt` unchanged as the short, shared
51
+ router marker.
52
+ - Added a visible wake formatter whose first line remains
53
+ `[ciel-wake] pending_ids=...` and whose following text is the existing exact
54
+ LLM batch projection.
55
+ - Enabled that visible formatter only from the Codex launch path. Claude and
56
+ AGY retain the existing marker-only behavior; this preserves Claude's
57
+ separately verified terminal/turn semantics instead of assuming every CLI
58
+ handles wake input identically.
59
+ - Codex still submits the combined text as one bracketed-paste turn. The router
60
+ recognizes the leading marker, removes the entire terminal-originated turn,
61
+ and injects the durable queued body once. The model therefore does not
62
+ receive a duplicate event.
63
+ - For visible wakes, correlation IDs are now read only from the trusted first
64
+ marker line. Untrusted event text such as `id=999` cannot claim another
65
+ queued message.
66
+
67
+ ## Memory-path cross-check
68
+
69
+ - WING's workspace state records:
70
+ - workspace: `C:\Users\daniel.yun.WING`
71
+ - root: `.ciel/memory`
72
+ - index: `index.md`
73
+ - index address: `C:\Users\daniel.yun.WING\.ciel\memory\index.md`
74
+ - That exact file exists. The malformed
75
+ `C:\Users\daniel.yun.WING.ciel\memory\index.md` does not exist.
76
+ - The latest Codex transcript contains the correctly escaped wire value
77
+ `C:\\Users\\daniel.yun.WING\\.ciel\\memory\\index.md`. Therefore the
78
+ malformed address was not produced by runtime path composition or prompt
79
+ injection.
80
+
81
+ ## Verification before deployment
82
+
83
+ - Focused suites:
84
+ - channel message prompt: 15 passed.
85
+ - wake claim repository: 5 passed.
86
+ - pending poll: 6 passed.
87
+ - channel bridge: 206 passed, 80 skipped.
88
+ - Codex runtime: 69 passed, 12 skipped.
89
+ - Full `npm test`:
90
+ - unit: 1,112 passed, 44 skipped.
91
+ - router: 902 passed.
92
+ - channel: 377 passed, 80 skipped.
93
+ - runtime: 247 passed, 12 skipped.
94
+ - `npm run lint`: passed.
95
+ - `npm run check:docs`: passed.
96
+ - `npm pack --dry-run --json`: package generated, 385 entries.
97
+
98
+ ## Deployment
99
+
100
+ - Code commit: `72a2474dedbc9048f4605486d29840d5000f7ca3`.
101
+ - Pushed to `origin/nightly`.
102
+ - GitHub CI run `32470113497`: passed all quality, minimum-Python,
103
+ unit, router, channel, and runtime jobs.
104
+ - npm publish run `32470113566`: passed package tests, publish, and tarball
105
+ verification.
106
+ - Published and installed on WING:
107
+ `0.2.22-nightly.20260821-095648.72a2474`.
108
+ - npm registry `gitHead`:
109
+ `72a2474dedbc9048f4605486d29840d5000f7ca3`.
110
+
111
+ ## Installed-package verification
112
+
113
+ The WING-installed package was executed against its actual durable record
114
+ `1218`:
115
+
116
+ - record kind: `external_event`.
117
+ - raw SHA-256:
118
+ `3f98b234c39a32373eb310dff8f022efef8ce789056ade3cb47455452bf406b5`.
119
+ - visible first line: `[ciel-wake] pending_ids=1218`.
120
+ - exact raw occurrence in visible prompt: one.
121
+ - raw occurrence in shared short prompt: zero.
122
+ - parsed correlation IDs after appending hostile `id=999` text: `{1218}`.
123
+ - wake recognized: true.
124
+ - complete terminal wake turn removed before router injection: true.
125
+ - installed Codex launch enables body display: true.
126
+ - installed Claude launch enables body display: false.
127
+
128
+ The already-running WING TUI process loaded the previous package before the
129
+ global npm replacement. It was deliberately not killed over SSH because that
130
+ would terminate the user's attached interactive session. A newly launched
131
+ Codex session loads the verified installed package.
@@ -0,0 +1,88 @@
1
+ okf_version: "1.0"
2
+ knowledge:
3
+ task:
4
+ id: hyundai-invalid-replayed-tool-name-repair-20260821
5
+ date: "2026-08-21"
6
+ objective: >-
7
+ Diagnose and repair the OpenAI Responses rejection reported from the
8
+ Hyundai workspace for input[696].name.
9
+
10
+ observed_failure:
11
+ workspace: "C:\\Users\\djlov\\source\\repos\\Hyundai"
12
+ session: >-
13
+ C:\Users\djlov\.codex\sessions\2026\05\27\
14
+ rollout-2026-05-27T11-18-11-019e6a3a-b011-7720-adc1-f97e3cc98da7.jsonl
15
+ upstream_error: >-
16
+ Invalid 'input[696].name': string does not match pattern.
17
+ Expected a string that matches the pattern '^[a-zA-Z0-9_-]+$'.
18
+ repeated_at_utc:
19
+ - "2026-08-21T19:44:46.101Z"
20
+ - "2026-08-21T19:44:55.944Z"
21
+ - "2026-08-21T19:46:15.730Z"
22
+ router_evidence:
23
+ provider: codex
24
+ path: /backend-api/codex/responses
25
+ responses:
26
+ - "2026-08-21T14:44:46 400"
27
+ - "2026-08-21T14:44:55 400"
28
+ - "2026-08-21T14:46:15 400"
29
+
30
+ confirmed_cause:
31
+ invalid_item:
32
+ transcript_line: 4511
33
+ type: function_call
34
+ input_index_reported_by_upstream: 696
35
+ name: multi_tool_use.parallel
36
+ call_id: call_00_nbmPi78JjzHHzM5agBXa9326
37
+ paired_output:
38
+ transcript_line: 4512
39
+ output: "unsupported call: multi_tool_use.parallel"
40
+ transcript_name_scan:
41
+ total_name_fields: 946
42
+ invalid_names:
43
+ - multi_tool_use.parallel
44
+ conclusion: >-
45
+ A historical unsupported function call containing a period was replayed
46
+ to the Codex Responses backend. The period violates the exact name
47
+ pattern returned by the upstream validator.
48
+
49
+ implementation:
50
+ boundary: >-
51
+ ciel_runtime_support.responses_input_compatibility.
52
+ repair_replayed_response_items
53
+ behavior: >-
54
+ When a replayed function_call or custom_tool_call has a present name that
55
+ violates ^[a-zA-Z0-9_-]+$, omit that call. Existing family-and-call_id
56
+ balancing then omits its matching output.
57
+ preserved_behavior:
58
+ - Valid function and custom tool pairs are retained.
59
+ - Missing synthetic name fields retain their previous behavior.
60
+ - The source request body remains unchanged.
61
+ - No provider, model, user, machine, or workspace exception is added.
62
+ rejected_behavior: >-
63
+ The invalid name is not rewritten to multi_tool_use_parallel because that
64
+ would describe a tool invocation that did not occur; its recorded output
65
+ says the original call was unsupported.
66
+
67
+ references:
68
+ official_openai_function_calling: >-
69
+ https://developers.openai.com/api/docs/guides/function-calling
70
+ observed_contract: >-
71
+ Function call outputs are associated with their original calls by
72
+ call_id; replay must keep or remove a call and its output consistently.
73
+
74
+ verification:
75
+ focused_compatibility_tests: "18 passed"
76
+ routed_codex_tests: "17 passed"
77
+ full_suite:
78
+ unit: "1115 passed, 44 skipped"
79
+ router: "906 passed"
80
+ channel: "379 passed, 80 skipped"
81
+ runtime: "249 passed, 12 skipped"
82
+ total: "2649 passed, 136 skipped"
83
+ lint: passed
84
+ exact_regression:
85
+ input_696_name: multi_tool_use.parallel
86
+ invalid_pair_removed: true
87
+ valid_pair_preserved: true
88
+ original_body_unchanged: true
@@ -0,0 +1,118 @@
1
+ okf_version: "1.0"
2
+ knowledge:
3
+ task:
4
+ id: local-stale-temporary-runtime-pin-repair-20260821
5
+ date: "2026-08-21"
6
+ objective: >-
7
+ Diagnose and correct the local bare ciel-runtime launch failure that tried
8
+ to execute ciel_runtime.py from a deleted Windows temporary directory.
9
+
10
+ environment:
11
+ machine:
12
+ user: djlov
13
+ failing_workspace: "G:\\OneCielDMSUI"
14
+ shell_observed: cmd.exe
15
+ installed_nightly:
16
+ version: 0.2.22-nightly.20260821-191423.5d24d79
17
+ npm_root: >-
18
+ C:\Users\djlov\AppData\Roaming\npm\node_modules\
19
+ @oneciel-ai\ciel-runtime
20
+
21
+ evidence:
22
+ failing_command:
23
+ command: "ciel-runtime --continue"
24
+ python: >-
25
+ C:\Users\djlov\AppData\Local\Python\pythoncore-3.14-64\python.exe
26
+ missing_script: >-
27
+ C:\Users\djlov\AppData\Local\Temp\tmp6fs9_fba\share\
28
+ ciel-runtime\ciel_runtime.py
29
+ errno: 2
30
+ path_resolution:
31
+ first_launcher: "C:\\Users\\djlov\\.local\\bin\\ciel-runtime.cmd"
32
+ later_npm_launcher: >-
33
+ C:\Users\djlov\AppData\Roaming\npm\ciel-runtime.cmd
34
+ confirmed_order: standalone_launcher_before_npm_launcher
35
+ registered_runtime_home:
36
+ before: >-
37
+ C:\Users\djlov\AppData\Local\Temp\tmp6fs9_fba\share\
38
+ ciel-runtime
39
+ script_present: false
40
+ launcher_behavior: >-
41
+ The first CMD launcher reads HKCU\Environment\CIEL_RUNTIME_HOME and
42
+ constructs the Python script path from it.
43
+ confirmed_origin:
44
+ test: test_powershell_installer_reads_assets_from_its_own_directory
45
+ mechanism: >-
46
+ The test supplied a Python TemporaryDirectory as PREFIX and ran
47
+ install.ps1. It preserved the user PATH but did not restore the user
48
+ CIEL_RUNTIME_HOME changed by the installer. TemporaryDirectory cleanup
49
+ then removed the registered share/ciel-runtime directory.
50
+ path_shape_match: >-
51
+ The observed tmp6fs9_fba/share/ciel-runtime path exactly matches that
52
+ test's PREFIX/share/ciel-runtime construction.
53
+ live_reproduction: >-
54
+ Running install.ps1 with a temporary PREFIX changed the registered home
55
+ to that PREFIX's share/ciel-runtime path; restoring the saved value
56
+ returned bare launches to the npm installation.
57
+ npm_installation:
58
+ npm_shim_direct_version_succeeded: true
59
+ installed_ciel_runtime_py_present: true
60
+ conclusion: >-
61
+ The npm package and generated npm shim were intact. The bare command
62
+ failed because the earlier standalone launcher consumed the stale
63
+ registered temporary home.
64
+
65
+ immediate_repair:
66
+ registered_home_after: >-
67
+ C:\Users\djlov\AppData\Roaming\npm\node_modules\@oneciel-ai\
68
+ ciel-runtime
69
+ verification:
70
+ working_directory: "G:\\OneCielDMSUI"
71
+ command: "ciel-runtime version"
72
+ output: "ciel-runtime 0.2.22-nightly.20260821-191423.5d24d79"
73
+ exit_code: 0
74
+
75
+ package_repair:
76
+ windows_installer:
77
+ behavior: >-
78
+ install.ps1 now treats any CIEL_RUNTIME_HOME below the expanded Windows
79
+ TEMP root as ephemeral, in addition to the existing version-snapshot
80
+ name check. An explicit CIEL_RUNTIME_INSTALL_HOME still has precedence.
81
+ windows_launchers:
82
+ behavior: >-
83
+ CMD launchers now discard the registered runtime home when its
84
+ ciel_runtime.py is absent, matching the existing PowerShell launcher
85
+ validation, before falling back to the installed default home.
86
+ unchanged_cases:
87
+ - A registered runtime home whose ciel_runtime.py exists.
88
+ - An explicit CIEL_RUNTIME_HOME_OVERRIDE.
89
+ - npm lifecycle scripts remain disabled.
90
+ test_isolation:
91
+ behavior: >-
92
+ The PowerShell installer path test now snapshots the user
93
+ CIEL_RUNTIME_HOME and restores it in a finally block, including the
94
+ originally-unset case, then asserts equality after the test.
95
+ rejected_approach:
96
+ npm_postinstall: >-
97
+ Removed after CI proved it violated the repository invariant that npm
98
+ packages have no install lifecycle scripts. The final repair does not
99
+ execute package code during npm installation.
100
+ exceptions_added:
101
+ machine: false
102
+ user: false
103
+ workspace: false
104
+
105
+ verification:
106
+ unit_tests: "1114 passed, 44 skipped"
107
+ runtime_tests: "248 passed, 12 skipped"
108
+ installer_path_tests: "4 passed, 1 skipped"
109
+ windows_installer_source_tests: "4 passed"
110
+ powershell_parse: passed
111
+ python_lint: passed
112
+ registry_preserved_across_installer_test: true
113
+ installer_live_state_transition:
114
+ ephemeral_home_ignored: true
115
+ default_prefix_install_succeeded: true
116
+ registered_home_matched_default_prefix: true
117
+ original_value_restored: true
118
+ temporary_test_directory_removed: true