Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 49 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,53 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.0.17] - 2026-07-27

### Added

- Cowork replaces the former Notes tab with one direct editing plane for the
channel's existing `/workspace/notes`, `/whiteboards`, `/code`, `/docs`, and
`/presentations` trees. Its five stable work modes share nested-folder
navigation and add focused Markdown, document, code, single-file whiteboard,
and single-file presentation editors.
- Cowork's collapsible resident-agent panel keeps the active file visible,
starts an ordinary channel thread, adds the open `/workspace/...` path only
to the first message, and lets that same session continue in Chat.
- The top-bar Quick Note captures a titled or collision-safe untitled Markdown
note directly into `/workspace/notes` without leaving the active channel,
tab, thread, or scroll position. Collapsed drafts persist in the current
session; dictation, Escape-to-save, and Control/Command+Enter are supported.
- Dictation now has a subtle listening waveform and active resident work uses
a compact animated orb without obscuring content.

### Changed

- Files is now a familiar two-pane browser with a persistent folder rail,
breadcrumbs, bounded content grid, search, sorting, metadata, distinct
folder and file-type icons, non-color-only selection, and direct create,
upload, open, rename, move, duplicate, delete, and download actions. Cowork
assets open in the matching Cowork mode over the same underlying file.
- Markdown now renders consistently in global and channel Threads, Board,
session summaries, agent and status messages, Cowork chat, Memory, Texts,
and Activity, including spaced bold labels such as `** Goal **`.
- Photon conversations no longer repeat robotic phone-number source labels;
legacy entries use the concise human-facing title “Text with Skipper.”
- Mobile Settings uses a compact horizontal section rail, all layouts track
the real visual viewport and safe areas, and scrolling away from the message
composer releases focus so the on-screen keyboard can dismiss naturally.
- The redundant **Call Skipper** button is removed; `@Skipper` remains the
direct escalation path.

### Fixed

- Background messages, polling, synchronization, route repaints, and shell
updates no longer remount live Files or Cowork surfaces or reset the user's
focused input, selection/cursor, draft value, scroll position, expanded
details, active file, panel, or workspace mode.
- Folder and file rows no longer share an ambiguous document glyph, and mobile
panels and Terminal size against the visible screen instead of extending
beneath browser chrome, the keyboard, or operating-system safe areas.

### Documentation

- The public privacy policy now covers the iOS gateway, just-in-time media and
Expand Down Expand Up @@ -444,7 +491,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
notarization, stapled tickets, Gatekeeper verification, persistent
Application Support, and isolated Apple container machines.

[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.16...HEAD
[Unreleased]: https://github.com/gitcommit90/1Helm/compare/v0.0.17...HEAD
[0.0.17]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.17
[0.0.16]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.16
[0.0.15]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.15
[0.0.14]: https://github.com/gitcommit90/1Helm/releases/tag/v0.0.14
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,16 @@ and an audit trail. A prompt saying “use this service” is not a connector.
supported platform (exact contracts in the table below).
- Shared channel `/workspace` for the agent command surface and human Terminal,
with automatic terminal heartbeat and silent same-session reconnection.
- A traditional two-pane Files browser over that same `/workspace`, with
breadcrumbs, nested folders, search, sorting, distinct file-type icons, and
familiar create, rename, move, duplicate, delete, upload, and download actions.
- Cowork as the direct visual editing plane for `/workspace/notes`,
`/workspace/whiteboards`, `/workspace/code`, `/workspace/docs`, and
`/workspace/presentations`, with one consistent file rail, purpose-built
editors, and an optional channel-agent panel that starts an ordinary thread
with the open file path.
- Quick Note in the top bar for capturing a Markdown note into
`/workspace/notes` without leaving or repositioning the current channel view.
- Durable files, threads, curated memory, Mnemosyne long-term recall,
corrections, follow-ups, and recurring workflows.
- Direct resident → Skipper escalation and automatic Skipper → resident return.
Expand Down Expand Up @@ -286,7 +296,7 @@ A fresh data directory opens first-run setup. The source runtime defaults to
| `PORT` | `8123` | HTTP/WebSocket control-plane port. |
| `CTRL_DATA_DIR` | `./data` | Databases, routing state, uploads, and narrow workspace mirrors. |
| `HELM_CHANNEL_COMPUTER_BACKEND` | `apple` on macOS, `lxc` on Linux, `wsl` on Windows | Host isolation backend; `native` and `mock` are explicit development/test overrides. |
| `HELM_CHANNEL_MACHINE_IMAGE` | `local/1helm-channel-machine:0.0.16` | Versioned channel-machine image contract. |
| `HELM_CHANNEL_MACHINE_IMAGE` | `local/1helm-channel-machine:0.0.17` | Versioned channel-machine image contract. |

### Agent-first JSON CLI

Expand Down
17 changes: 14 additions & 3 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -345,21 +345,32 @@ Once ready, the channel visibly presents:
- its current model/provider, as a replaceable implementation detail;
- its files/artifacts;
- its active/recent threads; and
- an obvious `@skipper` escalation path.
- an obvious `@skipper` mention path.

### 8.3 Channel layout

Chat remains the shared work surface, but the channel is not reduced to a message feed. It provides views or panels for:

- **Threads** — active and completed sessions;
- **Files** — the channel workspace and shared artifacts;
- **Files** — a familiar two-pane browser for the channel workspace and shared artifacts;
- **Cowork** — the direct visual editing plane for the same files under
`/workspace/notes`, `/workspace/whiteboards`, `/workspace/code`,
`/workspace/docs`, and `/workspace/presentations`;
- **Terminal** — interactive shell sessions inside the channel environment;
- **Memory/Knowledge** — channel-owned decisions, facts, summaries, and references;
- **Activity** — tool actions, long-running work, Skipper interventions, and system lifecycle; and
- **Settings** — purpose, model policy, scoped capabilities, and lifecycle controls.

These views are representations of the same channel world, not separate apps that force users to copy context between them.

The top-bar note action is a compact Quick Note overlay, not a separate Notes
dock. Saving writes a collision-safe Markdown file under `/workspace/notes`
without changing the active channel, view, thread, focus, or scroll position.
Cowork provides Notes, Whiteboard, Code, Docs, and Presentations work modes with
one shared folder rail and an optional channel-agent panel. The panel starts an
ordinary channel thread, appending only the currently open `/workspace/...`
path to its first human message; the same thread remains available in Chat.

### 8.4 Agent interactions

- Mention the resident agent to start or continue work in a thread.
Expand Down Expand Up @@ -565,7 +576,7 @@ Use language that reinforces the native model:
- **Workspace** — the agent's durable environment.
- **Thread** or **session** — focused unit of work.
- **Memory/Knowledge** — channel-owned continuity.
- **Call Skipper** — escalation to the workspace-level operator.
- **Mention Skipper** — direct escalation to the workspace-level operator.
- **Captain** — final human owner.

Suggested concise positioning:
Expand Down
52 changes: 47 additions & 5 deletions docs/USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ messages remain conversational without repeated mentions. Mention Skipper for a
boundary outside the resident computer; the resident can also call Skipper
itself, and the runtime returns the unblocked thread automatically.

The top-bar **Quick Note** opens a compact editor above the current view. It
keeps an unsaved draft when collapsed, supports dictation, saves with
Control/Command+Enter, and writes directly to `/workspace/notes`. Give the note
an optional title or let 1Helm allocate the next
`untitled-quick-note-[#].md`; saving never changes the current tab, thread, or
scroll position.

Agent replies stream into one stable message. Draft text, focus, selection,
scroll position, and open work logs remain stable while updates arrive. Use the
Stop control to interrupt only the active turn; the next reply receives hidden
Expand Down Expand Up @@ -90,14 +97,48 @@ the workspace-wide Threads entry provides a cross-channel view.

![Board lanes for real channel sessions](assets/guide/board.png)

## Files and Terminal
## Files, Cowork, and Terminal

Files, Cowork, and Terminal are three views of the same channel computer. Agent
commands and the human Terminal both start in the channel's persistent
`/workspace`; there is no separate Cowork document store.

Files and Terminal are two views of the same channel computer. Agent commands
and the human Terminal both start in the channel's persistent `/workspace`.
Files created through either path appear in Files after reconciliation.
**Files** is a traditional two-pane browser. The left rail navigates the folder
tree while the main pane shows the selected folder in a bounded grid. Use the
breadcrumb, search, and sort controls for larger collections; folders and
file types have distinct icons and selected items have a visible outline as
well as color. From the details pane you can open, rename, move, duplicate,
delete, or download an item. The top bar creates files and folders or uploads
into the current directory. Protected top-level product folders cannot be
renamed or deleted.

![The channel Files surface with explicit Open and Download](assets/guide/files.png)

**Cowork** is the visual editor for files already in `/workspace`. Its Notes,
Whiteboard, Code, Docs, and Presentations modes map directly to:

```text
/workspace/notes
/workspace/whiteboards
/workspace/code
/workspace/docs
/workspace/presentations
```

Each mode keeps the same folder rail and nested-folder navigation while the
center changes to the appropriate editor. Notes and Docs edit Markdown, Code
provides a focused text editor and declines unsupported binary types,
Whiteboard uses one readable `.whiteboard.json` file, and Presentations uses
one readable `.slides.json` file. Drafts and each mode's last open asset remain
available while switching modes. Opening one of these assets from Files routes
to the matching Cowork mode because both surfaces edit the same bytes.

The resident avatar opens Cowork's collapsible agent panel without covering the
asset on desktop. Its first message starts a normal channel thread and adds the
current `/workspace/...` path; later messages continue that thread, and **Open
in Chat** moves the same session to the channel's regular conversation view.
The agent harness otherwise remains unchanged.

The terminal prompt displays the live current path and changes after `cd`.
1Helm sends a terminal heartbeat while the pane is open and automatically
reconnects a dropped browser transport to the same live shell. Briefly
Expand Down Expand Up @@ -136,7 +177,8 @@ log.
## Settings

The gear opens a full-screen settings application. On desktop, use its vertical
sidebar; smaller layouts use a compact non-scrolling grid.
sidebar; smaller layouts use a compact horizontal section rail so settings do
not consume half of the visible screen.

- **Admin** — workspace name, theme, image, and release/update information.
- **Agents** — Skipper and resident identities, status, models, capabilities,
Expand Down
4 changes: 2 additions & 2 deletions ios/App/App.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.0.16;
MARKETING_VERSION = 0.0.17;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = com.gitcommit90.onehelm.mobile;
PRODUCT_NAME = 1Helm;
Expand All @@ -333,7 +333,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.0.16;
MARKETING_VERSION = 0.0.17;
PRODUCT_BUNDLE_IDENTIFIER = com.gitcommit90.onehelm.mobile;
PRODUCT_NAME = 1Helm;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "1helm",
"productName": "1Helm",
"version": "0.0.16",
"version": "0.0.17",
"private": true,
"type": "module",
"license": "AGPL-3.0-only",
Expand Down
4 changes: 2 additions & 2 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@
document.querySelectorAll('meta[name="theme-color"]').forEach(function (m) { m.setAttribute("content", color); });
})();
</script>
<link rel="stylesheet" href="/app.css?v=ee33f166ffb0" />
<link rel="stylesheet" href="/app.css?v=b2edc255e5b5" />
<link rel="stylesheet" href="/bundle.css" />
</head>
<body class="h-screen w-screen overflow-hidden antialiased">
<div id="app" class="h-full w-full"></div>
<script type="module" src="/bundle.js?v=f138ee8b7615"></script>
<script type="module" src="/bundle.js?v=548edeb10d3e"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion scripts/run-test-suite.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const suites = [
"test/routing.mjs", "test/routing-disabled-account.mjs", "test/desktop.mjs", "test/update-service.mjs",
"test/channel-computers.mjs", "test/channel-computers-isolated-backends.mjs", "test/channel-computers-backend-migration.mjs",
"test/cloudflare-worker.mjs", "test/connectors.mjs", "test/chatgpt-image.mjs", "test/autonomy-platform.mjs",
"test/feedback.mjs", "test/feedback-browser.mjs", "test/gmail.mjs", "test/photon.mjs", "test/site.mjs", "test/release-license.mjs", "test/release-governance.mjs",
"test/feedback.mjs", "test/feedback-browser.mjs", "test/cowork-browser.mjs", "test/gmail.mjs", "test/photon.mjs", "test/site.mjs", "test/release-license.mjs", "test/release-governance.mjs",
"test/channel-surfaces.mjs", "test/workspace-interactions.mjs", "test/sweep-fleet-telemetry.mjs", "test/sweep-server-integration.mjs", "test/thread-followup-chat.mjs",
"test/notifications.mjs", "test/mobile-push.mjs", "test/terminal-reconnect-contract.mjs", "test/terminal-reconnect-browser.mjs", "test/mobile.mjs", "test/web-research.mjs", "test/workflows.mjs"],
];
Expand Down
2 changes: 1 addition & 1 deletion src/client/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export type User = {
description: string; job_title: string; avatar: string; tour_complete: boolean;
};
export type Author = { kind: "user" | "bot" | "system"; id: number; name: string };
export type Attachment = { id: number; name: string; mime: string; size: number };
export type Attachment = { id: number; name: string; mime: string; size: number; workspace_path?: string };
export type AgentProgress = { id: number; kind: "thinking" | "tool" | "status"; body: string; status: "running" | "complete" | "failed"; created: number; updated: number };
export type ThreadUsage = { input_tokens: number; output_tokens: number };
export type AgentQuestionOption = { label: string; description?: string };
Expand Down
Loading
Loading