@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.
- package/CHANGELOG.md +108 -0
- package/README.md +150 -57
- package/ciel-runtime-stop.cmd +1 -0
- package/ciel-runtime.cmd +1 -0
- package/ciel-runtimectl.cmd +1 -0
- package/ciel_runtime.py +56 -53
- package/ciel_runtime_support/anthropic_tool_turns.py +81 -0
- package/ciel_runtime_support/architecture.py +17 -0
- package/ciel_runtime_support/channel_injection.py +113 -3
- package/ciel_runtime_support/channel_message_prompt.py +15 -0
- package/ciel_runtime_support/channel_pending_injection.py +28 -4
- package/ciel_runtime_support/channel_pending_poll.py +2 -0
- package/ciel_runtime_support/channel_terminal_context.py +6 -0
- package/ciel_runtime_support/channel_terminal_dispatch.py +2 -0
- package/ciel_runtime_support/channel_terminal_proxy.py +8 -2
- package/ciel_runtime_support/channel_wake_claim_repository.py +7 -0
- package/ciel_runtime_support/channel_wake_context.py +7 -3
- package/ciel_runtime_support/cli_parser.py +6 -0
- package/ciel_runtime_support/codex_backend_context.py +4 -0
- package/ciel_runtime_support/codex_turn_recovery.py +75 -12
- package/ciel_runtime_support/config_migrations.py +102 -10
- package/ciel_runtime_support/config_repository.py +9 -0
- package/ciel_runtime_support/event_settings_cli.py +284 -2
- package/ciel_runtime_support/openai_chat_passthrough.py +2 -0
- package/ciel_runtime_support/protocols/openai_responses.py +22 -18
- package/ciel_runtime_support/provider_adapters.py +7 -0
- package/ciel_runtime_support/provider_policy.py +10 -1
- package/ciel_runtime_support/provider_request_builder.py +9 -2
- package/ciel_runtime_support/provider_responses_passthrough.py +4 -0
- package/ciel_runtime_support/providers/__init__.py +2 -0
- package/ciel_runtime_support/providers/alibaba.py +33 -10
- package/ciel_runtime_support/providers/constants.py +1 -0
- package/ciel_runtime_support/providers/opencode.py +25 -5
- package/ciel_runtime_support/providers/opencode_go.py +3 -3
- package/ciel_runtime_support/providers/openrouter.py +76 -3
- package/ciel_runtime_support/providers/tabitoken.py +130 -0
- package/ciel_runtime_support/remote_instructions.py +20 -6
- package/ciel_runtime_support/remote_memory.py +515 -55
- package/ciel_runtime_support/responses_input_compatibility.py +14 -0
- package/ciel_runtime_support/router_http.py +5 -0
- package/ciel_runtime_support/runtime_constants.py +1 -1
- package/ciel_runtime_support/runtime_launch.py +9 -2
- package/ciel_runtime_support/runtime_paths.py +2 -0
- package/ciel_runtime_support/tool_side_effect_dedupe.py +7 -4
- package/ciel_runtime_support/transcript_delta_delivery.py +333 -0
- package/ciel_runtime_support/usage_events.py +45 -3
- package/ciel_runtime_support/usage_service.py +871 -0
- package/ciel_runtime_support/windows_conpty.py +108 -2
- package/ciel_runtime_support/workspace_mcp.py +4 -0
- package/docs/CLI-Reference.md +11 -0
- package/docs/Configuration.md +7 -2
- package/docs/MCP-Channels.md +7 -3
- package/docs/Module-Map.md +4 -0
- package/docs/Providers.md +32 -0
- package/docs/Remote-Memory.md +29 -10
- package/docs/Test-Suite.md +1 -0
- package/docs/journal/2026/08/20/kevin-wake-orphan-tool-repair.md +161 -0
- package/docs/journal/2026/08/20/nightly-push-local-deployment.md +59 -2
- package/docs/journal/2026/08/20/wing-remote-memory-replication-verification.md +107 -0
- package/docs/journal/2026/08/21/alibaba-singapore-qwen38-official-alignment.md +64 -0
- package/docs/journal/2026/08/21/codex-visible-sse-wake-submit-regression.md +85 -0
- package/docs/journal/2026/08/21/external-sse-wake-only-change-analysis.md +131 -0
- package/docs/journal/2026/08/21/hyundai-invalid-replayed-tool-name-repair.okf +88 -0
- package/docs/journal/2026/08/21/local-stale-temporary-runtime-pin-repair.okf +118 -0
- package/docs/journal/2026/08/21/transcript-compaction-external-events.okf +131 -0
- package/docs/journal/2026/08/21/wing-ai-net-mcp-boundary-diagnosis.okf +129 -0
- package/docs/journal/2026/08/21/wing-cold-start-wake-submit-repair.okf +161 -0
- package/docs/journal/2026/08/21/wing-powershell-memory-runaway.okf +101 -0
- package/docs/journal/2026/08/21/wing-repeated-reasoning-tool-turn-repair.okf +112 -0
- package/docs/journal/2026/08/21/wing-repeated-tool-guard-finalization.okf +81 -0
- package/docs/journal/2026/08/21/wing-working-directory-memory-deployment.md +110 -0
- package/docs/journal/2026/08/21/wing-workspace-state-memory-prompt-injection.md +88 -0
- package/docs/journal/2026/08/22/alibaba-singapore-dual-endpoint-wire-alignment.okf +142 -0
- package/docs/journal/2026/08/22/delluhiold-claude-compaction-empty-tool-name.okf +168 -0
- package/docs/journal/2026/08/22/remote-memory-relative-prompt-paths.okf +79 -0
- package/docs/journal/2026/08/22/remote-memory-root-system-prompt.okf +121 -0
- package/docs/journal/2026/08/23/claude-web-chat-stateless-mcp-repair.okf +97 -0
- package/docs/journal/2026/08/23/cross-runtime-token-usage-interfaces-research.okf +378 -0
- package/docs/journal/2026/08/23/main-0.2.23-readme-release.okf +81 -0
- package/docs/journal/2026/08/23/mia-openrouter-ox-alpha-latency-diagnosis.okf +146 -0
- package/docs/journal/2026/08/23/openrouter-opencode-ox-alpha-support.okf +114 -0
- package/docs/journal/2026/08/23/tabitoken-provider-model-catalog.okf +97 -0
- package/docs/journal/2026/08/23/usage-stream-snapshot-implementation.okf +134 -0
- package/docs/usage-observability.md +141 -0
- package/install.ps1 +24 -3
- 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
|