mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
chore: version packages
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -1,23 +0,0 @@
|
||||
---
|
||||
"aicodeman": patch
|
||||
---
|
||||
|
||||
fix(session): learn the live Claude conversation from the CLI's own hook
|
||||
|
||||
Which conversation a pane is on was re-derived by correlating `~/.claude/history.jsonl`
|
||||
against `Session.lastSubmitAt` — and `lastSubmitAt` is bumped only by input that flows
|
||||
through Codeman's own write path. A user who attaches to the pane's tmux session directly
|
||||
never set it, so the resolver returned at its first line for that pane's whole life and the
|
||||
response viewer stayed pinned to the launch conversation, showing a pre-`/clear` transcript
|
||||
indefinitely. A new `UserPromptSubmit` hook reports the live conversation id from inside the
|
||||
CLI process, addressed by the pane's own `$CODEMAN_SESSION_ID`, so the id is a fact rather
|
||||
than a correlation: it never consults the working directory and cannot be claimed by a
|
||||
sibling pane on the same folder. A pane with such an id now skips the correlation entirely,
|
||||
which strictly reduces the number of prompts eligible for cwd-based guessing. The hook also
|
||||
stamps `lastSubmitAt`, so it finally means "a prompt was submitted" rather than "typed into
|
||||
Codeman's web terminal". Conversations vouched for this way are persisted as a chain, whose
|
||||
tail re-pins the conversation when a surviving tmux session is re-attached after a restart —
|
||||
`start()` otherwise resets the id back to the launch conversation. Existing workspaces heal
|
||||
on their next Claude spawn via the hooks staleness sweep. The hook's stdout is discarded with curl's own `-o /dev/null`:
|
||||
Claude Code injects `UserPromptSubmit` output into the model's context, so an undiscarded
|
||||
curl would paste the API envelope into the user's own prompt on every turn.
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
"aicodeman": patch
|
||||
---
|
||||
|
||||
fix(web): render one Claude response-viewer message per model message
|
||||
|
||||
The Claude reader concatenated every assistant row between two human prompts into one
|
||||
card, fusing up to 74 distinct model messages into a single card, and it never read the
|
||||
attachment rows that hold a prompt typed while the agent was working. Measured over 57
|
||||
real transcripts on 2026-09-01, the viewer now shows 1,806 messages instead of 356 and
|
||||
353 user cards instead of 178, recovering the user's own words from 162 absorbed
|
||||
prompts, with the assistant text sequence unchanged row for row and the response without
|
||||
`?context=full` byte-identical on all 57 files. A same-speaker run inside one turn
|
||||
renders as continuation segments under one badge, and the header reports turns as well
|
||||
as messages instead of claiming a 1,566-row session was "6 messages".
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
"aicodeman": patch
|
||||
---
|
||||
|
||||
fix(mobile): give the Add Case modal a reachable submit button
|
||||
|
||||
`mobile.css` hides `#createCaseModal`'s `.set-foot` on phones, and unlike the Settings
|
||||
modal that header carries no `set-head-save` — so the Create/Link button existed nowhere
|
||||
on a phone and the modal could not be submitted at all. Adds the header button and drives
|
||||
both together, so whichever one is pressed the other shows the same pending state and is
|
||||
equally unclickable.
|
||||
|
||||
Add Case follows the Settings modal's header-save pattern, so it picks up the existing
|
||||
`.set-head-actions:has(.set-head-save)` tray and `.set-head-save` sizing below 860px with no
|
||||
new CSS; the `mobile.css` comment that still listed Add Case as a lone-× sheet is updated to
|
||||
match.
|
||||
@@ -1,5 +1,29 @@
|
||||
# aicodeman
|
||||
|
||||
## 1.25.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- Codeman can be mounted under a sub-path behind a reverse proxy (#381, @mtiller). `--base-url /codeman` (or `CODEMAN_BASE_URL`) makes the server strip the prefix on the way in, rebase redirects on the way out, inject `<base>` and `window.__CODEMAN_BASE__` into the shell, and route web-tab proxying and WebSocket upgrades under the mount, so one TLS name can front several apps. A root install is byte-identical to before. Applied on top: the crash-diag beacon stays under the mount (sendBeacon is not fetch, so the base-aware wrapper never saw it), the test suite strips `CODEMAN_BASE_URL`, and a wiring test boots a real server under a prefix.
|
||||
|
||||
A case can attach to a container that is already running (#357, @dignfei). `DockerCase.owned:false` mirrors the remote-SSH attach contract: Codeman only execs into such a container, never creates, starts, stops, removes, pauses or commits it, with the refusal enforced at string-construction time so no caller bug can reach `docker stop`. The Add Case dialog gets an attach panel with a container picker, the run menu takes its mode availability from the CLIs actually present in the container, and adoption is admin-only in multi-user mode. Three gaps closed after review: export no longer pauses or commits an adopted container, a freshly linked owned case no longer hides every agent mode behind a probe of a container that does not exist yet, and multi-user gating is explicit.
|
||||
|
||||
The Claude response viewer renders one message per model message (#369, @shenlvkang-collab). The reader used to fuse every assistant row between two human prompts into one card and never read the attachment rows that hold a prompt typed mid-turn; measured over 57 real transcripts it now shows 1,806 messages instead of 356 and recovers 162 absorbed user prompts, with the assistant text unchanged row for row.
|
||||
|
||||
A Claude pane learns its live conversation from the CLI's own `UserPromptSubmit` hook (#367, @shenlvkang-collab). The conversation id used to be re-derived by correlating `~/.claude/history.jsonl` against a stamp only Codeman's own input path set, so a pane driven straight from tmux stayed pinned to its launch conversation forever. The hook reports the id first-hand, addressed by the pane's own `$CODEMAN_SESSION_ID`, and the chain of conversations is persisted so a restart re-pins the right one. The new `hook:prompt_submitted` SSE event is registered (158 = 158), and it lands in the run summary only when the conversation actually moved.
|
||||
|
||||
The Add Case modal can be submitted from a phone again (#368, @shenlvkang-collab). Since 1.16.4 the layout below 860px hid the modal footer, which held the only Create/Clone/Link button. A header submit button now sits beside the close button, dims while a submit is pending, and a static test pins the contract so it cannot silently disappear again.
|
||||
|
||||
The Link Existing case picker opens in the Codeman Cases directory instead of Home (#383, @opticon454). Under Docker the two are unrelated trees and Home holds nothing but dot directories, so the picker showed no cases at all. The fallback chain is now Current Folder, then Codeman Cases, then `/mnt/d`, then the first root.
|
||||
|
||||
A PR review bot for the maintainer (`scripts/pr-bot/`, guide in `docs/pr-bot.md`). It reviews every open pull request in its own Codeman session inside a private clone and reports the verdict, ranked findings and a recommendation to Telegram with action buttons; merge, close, post-comment and approve-CI happen only from a confirmed tap. Maintainer tooling, not part of the server or the CLI.
|
||||
|
||||
### Thanks
|
||||
- @mtiller for the reverse-proxy base URL (#381).
|
||||
- @dignfei for attaching cases to running containers (#357).
|
||||
- @shenlvkang-collab for the response viewer fix (#369), the first-hand conversation hook (#367) and the phone Add Case fix (#368).
|
||||
- @opticon454 for the case picker default (#383).
|
||||
|
||||
## 1.24.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -75,7 +75,7 @@ When user says "COM":
|
||||
|
||||
CI runs `npm run check:lockfile` on every push/PR, so lockfile drift fails the build even if the `version-packages` script is bypassed.
|
||||
|
||||
**Version**: 1.24.7 (must match `package.json`)
|
||||
**Version**: 1.25.0 (must match `package.json`)
|
||||
|
||||
## Project Overview
|
||||
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "aicodeman",
|
||||
"version": "1.24.7",
|
||||
"version": "1.25.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "aicodeman",
|
||||
"version": "1.24.7",
|
||||
"version": "1.25.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"workspaces": [
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "aicodeman",
|
||||
"version": "1.24.7",
|
||||
"version": "1.25.0",
|
||||
"description": "Mission control for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence",
|
||||
"type": "module",
|
||||
"main": "dist/index.js",
|
||||
|
||||
Reference in New Issue
Block a user