one-code-extension 0.1.2 → 0.1.4

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/README.md CHANGED
@@ -35,6 +35,11 @@ brew install isurumaduranga/one-ai/one-code
35
35
 
36
36
  > The npm route needs **Node 22.19+**.
37
37
 
38
+ > Tip: the app opens in a **full-screen TUI** (alt-screen, restores your
39
+ > terminal on exit) by default. On your own pi that's opt-in — set
40
+ > `"tuiMode": "fullscreen"` in `~/.pi/agent/settings.json`, or launch with
41
+ > `pi --tui-mode fullscreen`.
42
+
38
43
  ## Two-minute quickstart — free, no card
39
44
 
40
45
  You need one model-provider key. Two providers hand out **free frontier-adjacent
@@ -2,9 +2,10 @@
2
2
 
3
3
  Part of [Decisions](../decisions.md).
4
4
 
5
- ## Two artifacts from one codebase: the app and the package (2026-08-10, unreviewed)
5
+ ## Two artifacts from one codebase: the app and the package (2026-08-10)
6
6
 
7
- One Code ships two npm packages built from this single repo:
7
+ One Code ships two npm packages built from this single repo — **both live on
8
+ npm since 2026-08-10 at 0.1.2** (GitHub release `v0.1.2`):
8
9
 
9
10
  | npm name | What it is | pi relationship |
10
11
  |---|---|---|
@@ -21,7 +22,11 @@ blocks every punctuation variant — discovered only at publish time; a 404 on
21
22
  `npm view` does not mean a name is claimable). The *command* the app installs
22
23
  is still `one-code`; the extension package stays unscoped so
23
24
  `pi install npm:one-code-extension` reads clean, and is attached to the org
24
- via team access rather than a scope. A Homebrew tap (`brew install IsuruMaduranga/one-code/one-code`)
25
+ via team access rather than a scope. The npm org (`one-ai`) and the planned
26
+ GitHub org (`oneai-hq` — `one-ai` was taken on GitHub) deliberately differ:
27
+ registry namespaces are independent, install commands only ever cite the npm
28
+ scope, and `repository` fields point at URLs, so the mismatch costs nothing
29
+ beyond a profile cross-link. A Homebrew tap (`brew install IsuruMaduranga/one-code/one-code`)
25
30
  delivers the same app and solves the Node ≥22.19 requirement via
26
31
  `depends_on "node"`; a single compiled binary is not viable (pi-tui ships
27
32
  per-platform native modules).
@@ -82,11 +87,21 @@ mistake. Adopted at 0.1.2 (the app skipped 0.1.1 to converge); the cost is an
82
87
  occasional republish of an unchanged package. The Homebrew tap is
83
88
  `IsuruMaduranga/homebrew-one-ai` — named for the brand umbrella so future
84
89
  tools join the same tap — giving `brew install isurumaduranga/one-ai/one-code`
85
- (two-segment installs are not brew grammar; verified empirically).
90
+ (two-segment installs are not brew grammar; verified empirically). Two
91
+ release-process facts learned shipping 0.1.2: the formula's `url` + `sha256`
92
+ must be bumped by hand each release until a release workflow automates it,
93
+ and Homebrew's `std_npm_args` passes npm's supply-chain guard
94
+ `--min-release-age=1`, so **the brew install of a release only works ~24h
95
+ after its npm publish** — day-one users get "No matching version found …
96
+ with a date before <now−1d>"; either schedule the formula bump a day after
97
+ the npm publish or accept the gap.
86
98
 
87
99
  Registering the package also seeds first-run settings (`theme: "one-code"`,
88
- `quietStartup: true`), which doubles as skipping pi's stock first-time theme
89
- picker — the branded first run. Three hardcoded `~/.pi` paths found during
100
+ `quietStartup: true`, and — from 0.1.3 — `tuiMode: "fullscreen"`, the
101
+ alt-screen One Code look per the fullscreen decision in `tui.md`), which
102
+ doubles as skipping pi's stock first-time theme picker — the branded first
103
+ run. Seeded only when no settings file exists, so a user's later changes
104
+ stick. Three hardcoded `~/.pi` paths found during
90
105
  this work (quiet-startup detection, the skills listing, the Anthropic-OAuth
91
106
  check) now resolve through pi's `getAgentDir()`, which honours the isolation
92
107
  env var.
@@ -124,6 +139,10 @@ Per project directive, prefer ecosystem packages over new code.
124
139
 
125
140
  ## Publish readiness (Phase 7)
126
141
 
142
+ *(Historical — the release shipped 2026-08-10 as described in the two-artifact
143
+ entry above. The tarball/install checks below were the single-package-era
144
+ method and remain the template for pre-publish verification.)*
145
+
127
146
  `npm pack` produces a 69 kB / 47-file tarball: `extensions/`, `agents/`, `types/`,
128
147
  README, LICENSE and `docs/decisions.md`. Every path in the `pi.extensions`
129
148
  manifest is checked to be present in the tarball.
@@ -154,6 +154,21 @@ no extension-facing hook. A One Code extension therefore cannot set or flip it.
154
154
  terminal scrollback after quit — that is the whole point of the clean exit, and
155
155
  `pi --resume` covers re-entry.
156
156
 
157
+ **Correction (2026-08-10, found live):** the setting alone does NOT give the
158
+ clean exit on pi 0.84.1. The alt screen engages (verified via tmux
159
+ `alternate_on`), but pi's quit path *deliberately* transfers the transcript to
160
+ the main buffer: `stopInteractiveTui()` switches back to the regular renderer
161
+ and repaints everything (`switchTuiMode("regular")` + `renderNow()`) before
162
+ stopping — `TuiAltScreen`'s `preserveScreen` clean exit exists but is
163
+ unreachable from settings. The bundled app therefore overrides
164
+ `InteractiveMode.prototype.stopInteractiveTui` in `app/bin.mjs` (exact-pinned
165
+ pi makes the touched internals stable; falls back to stock behaviour on any
166
+ surprise) to stop the alt screen with `preserveScreen: true` — verified live:
167
+ exit leaves only the resume hint, like Claude Code. Package-variant users
168
+ still get the transcript-dump exit until the upstream exit-preserve option
169
+ lands (upstream_prs #8). The mid-session `/settings` renderer switch is
170
+ untouched.
171
+
157
172
  **Trap this surfaced (finding §10.16):** the setting key was `uiMode` in the
158
173
  pinned reference clone (v0.83.0) but was renamed `tuiMode` in installed pi
159
174
  (v0.84.1); a `uiMode` key is silently ignored on 0.84.1. Clone re-pinned to
package/docs/decisions.md CHANGED
@@ -11,7 +11,7 @@ entry. (Companion docs: [`findings.md`](findings.md) for how pi behaves,
11
11
 
12
12
  Full context: [`decisions/distribution.md`](decisions/distribution.md).
13
13
 
14
- - **[Two artifacts from one codebase: the app and the package](decisions/distribution.md#two-artifacts-from-one-codebase-the-app-and-the-package-2026-08-10-unreviewed)** *(unreviewed)* — npm `one-code` (bundled app: pinned pi, `~/.one-code` isolation via `PI_CODING_AGENT_DIR`, package-registration load shape, stdout rebranding, own update check) + npm `one-code-extension` (peer-dep pi package with a runtime tested-range warning); Homebrew tap delivers the app.
14
+ - **[Two artifacts from one codebase: the app and the package](decisions/distribution.md#two-artifacts-from-one-codebase-the-app-and-the-package-2026-08-10)** — npm `@one-ai/one-code` (bundled app: pinned pi, `~/.one-code` isolation via `PI_CODING_AGENT_DIR`, package-registration load shape, stdout rebranding, own update check) + npm `one-code-extension` (peer-dep pi package with a runtime tested-range warning); lockstep versions from 0.1.2; Homebrew tap `isurumaduranga/one-ai` delivers the app (brew's `--min-release-age=1` makes day-one brew installs fail by design).
15
15
  - **[Distribution: pi package, not a wrapper binary](decisions/distribution.md#distribution-pi-package-not-a-wrapper-binary)** — *(partially superseded by the two-artifact model)* ship as an installable pi package because pi's rebranding resolves from pi's own `package.json`; a dependent can't rebrand it, and a package keeps upstream upgrades a version bump away.
16
16
  - **[Community packages: adopted where they work](decisions/distribution.md#community-packages-adopted-where-they-work)** — prefer ecosystem packages, but trial first: only `pi-ask-user` survived; `pi-subagents` was rejected (children SIGKILLed ~29 ms after spawn here).
17
17
  - **[Publish readiness (Phase 7)](decisions/distribution.md#publish-readiness-phase-7)** — what's done and what remains before `npm publish` (metadata, tarball, install-path verification).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one-code-extension",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "One Code as a pi package \u2014 the Claude Code experience on your own pi install: ported system prompt, Claude-Code-format permissions, .claude/ compatibility, ToolSearch-style deferred tools, and system-reminder steering. For the bundled app, install `@one-ai/one-code` instead.",
5
5
  "keywords": [
6
6
  "pi",