@linxiraos/pi-utils 1.4.10 → 1.4.11

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 CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.4.11] - 2026-11-06
4
+
5
+ - `applyLegacyOmpEnv()` lets a host apply the read-only legacy OMP dotenv files after its settings layer resolves the compatibility switch; the eager `ZETA_OMP_COMPAT` pass is unchanged.
6
+
3
7
  ## [1.4.10] - 2026-11-05
4
8
 
5
9
  - Legacy OMP dotenv files are no longer loaded by default; set `ZETA_OMP_COMPAT=1` to opt into the read-only fallback. Zeta `.zeta` dotenv files keep precedence.
@@ -5,6 +5,50 @@ This generated, self-contained aggregate accompanies Zeta release artifacts.
5
5
  It does not replace package-level license files. First-party licensing grants
6
6
  no rights in third-party code, fonts, data, or marks identified below.
7
7
 
8
+ ZETA IS A FORK AND REDISTRIBUTION
9
+ =================================
10
+
11
+ Zeta is a downstream distribution of oh-my-pi (OMP), and it also contains forks
12
+ of OMP Web, OMP Studio and TermIDE. Upstream copyright notices stay with their
13
+ files and are not restated here. This section states, for every forked or
14
+ vendored application tree, where it came from, what Zeta changed, and why.
15
+ Upstream URLs are the ones configured in `.git/config`; the per-tree deviation
16
+ ledgers are authoritative for details.
17
+
18
+ Forked application trees:
19
+
20
+ | Path | Upstream | Snapshot | License | What Zeta changed |
21
+ |---|---|---|---|---|
22
+ | `packages/ main/ crates/ python/ lsp/ sdk/ types/ skills/` | oh-my-pi (OMP), https://github.com/can1357/oh-my-pi | integrated through tag `v18.15.0` (`document/upstream-sync.md`) | see upstream files | product name, paths, command names and env prefixes; branded assets; internal identifiers renamed to `__zeta*` |
23
+ | `web-ui/` | OMP Web, https://github.com/17380936778/omp-web | frozen snapshot + manual cherry-picks (`document/upstream-sync.md`) | see upstream files | gateway transport, theme token bridge, page routing |
24
+ | `web-app/` (`src/studio`, `src/vendor/*`) | OMP Studio 0.1.17, https://github.com/the-snowpear/omp-studio | `0.1.17`, ported into the product renderer | MIT | maintained by Zeta now: the host contract is reimplemented in `studio-host` (pair/CSRF/query/command/events), the renderer was rebranded (`zeta-studio` wire name, Zeta links/fixtures), and Zeta adds windowed transcripts, precompressed static serving, the plugin registry, and the usage dashboard |
25
+ | `termide/` | TermIDE, https://github.com/termide/termide | tag `0.46.0` = `a027ca788cd4c9d24f060cdcd3195ca2e475617b` | MIT | deviations listed in `termide/VENDOR.md` (28 entries) |
26
+ | `editor/npm/*` (`@linxiraos/editor*`) | TermIDE `panel-editor` | same tree as `termide/` | MIT | built as the editor-only bin `termide-editor` (`editor/npm/editor/VENDOR.md`) |
27
+ | `plugins/official/*` | per plugin | per plugin | per plugin | each directory carries `plugin.json`, README with source, and its license |
28
+
29
+ Why the fork renames things at all: the upstream licenses and the product
30
+ identity both require that a downstream distribution not present itself as the
31
+ upstream. Renames therefore cover the product name, command names
32
+ (`zetawork` / `zetacode` / `zetaide`), the `zeta://` scheme, the npm scope
33
+ `@linxiraos/*`, and release asset names (`zeta-cli-*`). User-visible
34
+ configuration keeps accepting the legacy names during the transition, so an
35
+ existing installation does not silently break.
36
+
37
+ Brand and assets:
38
+
39
+ * Product marks — name, logos, app icons, wordmarks, splash art — are Zeta's own
40
+ and are not redistributed from any upstream. Upstream marks are not shipped.
41
+ * Assets that do come from an upstream are enumerated in the per-tree ledgers
42
+ above; each keeps its upstream license notice in place.
43
+
44
+ Frozen counterpart constants (interoperability, not branding):
45
+
46
+ * Stencil OIDC `client-id "omp"`, its issuer and scopes; `catalog.stencil.so`;
47
+ `docs.stencil.so/tern/protocol/`; `my.omp.sh` as the collaboration relay
48
+ constant; the `__omp_judgment_images` upload key. These are wire-compatible
49
+ identifiers Zeta must keep, listed here so that a brand sweep does not break
50
+ them.
51
+
8
52
  PYTHON DEPENDENCY DISTRIBUTION ROLE
9
53
  ===================================
10
54
 
@@ -385,6 +429,62 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
385
429
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
386
430
  SOFTWARE.
387
431
 
432
+ -------------------------------------------------------------------------------
433
+ web-app/src/studio + web-app/src/vendor/* + web-ui/components/studio +
434
+ web-ui/styles/studio + web-ui/lib/studio-protocol
435
+
436
+ Ported UI surface and protocol types from OMP Studio 0.1.17 (MIT).
437
+
438
+ - `web-ui/components/studio/` and `web-ui/styles/studio/` are derived from the
439
+ OMP Studio renderer (`apps/renderer/src`).
440
+ - `web-ui/lib/studio-protocol/` vendors the type and validation surface of
441
+ `@omp-studio/client-contract` and `@omp-studio/studio-protocol` (78 files, no
442
+ runtime dependency), so the ported renderer keeps its own read models.
443
+ - `web-ui/lib/studio-client/` is Zeta's own implementation of the
444
+ `StudioClient` interface over the Zeta gateway; it is not derived from
445
+ `@omp-studio/client`.
446
+
447
+ The data plumbing, transport and packaging are Zeta's own and are not part of
448
+ that derivation.
449
+
450
+ Copyright (c) 2026 snowpear and OMP Studio contributors
451
+ Copyright (c) 2026 Linxira-OS and Zeta contributors (Zeta modifications and additions)
452
+
453
+ Local modifications: the product renderer moved to `web-app/` (Vite 7) with
454
+ its own node project, and the host contract is Zeta's `studio-host` rather than
455
+ Studio's server. `@omp-studio/client-contract` and
456
+ `@omp-studio/studio-protocol` imports were rewritten to the vendored copies in
457
+ both trees; `@omp-studio/client` is replaced by `web-ui/lib/studio-client` (the
458
+ frozen snapshot) and by the host-backed transport in `web-app/`. The wire
459
+ protocol name is `zeta-studio`, the desktop bridge global is
460
+ `zetaStudioChrome`, Studio's design tokens were rebound to Zeta's theme alias
461
+ layer (`--studio-*` → `--zeta-alias-*`), and surfaces with no Zeta backend were
462
+ dropped rather than ported. Zeta-only additions: windowed transcript
463
+ pagination, precompressed static assets, the real plugin registry, the usage
464
+ dashboard, and the brand sweep. The MIT notice above covers the unmodified
465
+ upstream portions; Zeta's changes are additionally under
466
+ `Copyright (c) 2026 Linxira-OS and Zeta contributors`.
467
+
468
+ MIT License
469
+
470
+ Permission is hereby granted, free of charge, to any person obtaining a copy
471
+ of this software and associated documentation files (the "Software"), to deal
472
+ in the Software without restriction, including without limitation the rights
473
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
474
+ copies of the Software, and to permit persons to whom the Software is
475
+ furnished to do so, subject to the following conditions:
476
+
477
+ The above copyright notice and this permission notice shall be included in all
478
+ copies or substantial portions of the Software.
479
+
480
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
481
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
482
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
483
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
484
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
485
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
486
+ SOFTWARE.
487
+
388
488
  -------------------------------------------------------------------------------
389
489
  packages/coding-agent/src/export/html/vendor/NOTICE
390
490
 
@@ -45,6 +45,15 @@ export declare function getDotenvEnvValues(cwd?: string, env?: Record<string, st
45
45
  */
46
46
  export declare function parseEnvFile(filePath: string): Record<string, string>;
47
47
  export declare function isOmpCompatEnabled(env?: Record<string, string | undefined>): boolean;
48
+ /**
49
+ * Apply the legacy OMP dotenv files on demand.
50
+ *
51
+ * The eager pass above only sees `ZETA_OMP_COMPAT` from the shell or a Zeta
52
+ * dotenv file. A host that resolves the persisted `compat.importLegacyOmp`
53
+ * setting calls this once its settings layer is loaded. Idempotent, and it
54
+ * never overwrites a name the process already has.
55
+ */
56
+ export declare function applyLegacyOmpEnv(): void;
48
57
  /**
49
58
  * Intentional re-export of Bun.env.
50
59
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linxiraos/pi-utils",
3
- "version": "1.4.10",
3
+ "version": "1.4.11",
4
4
  "description": "Shared utilities for pi packages",
5
5
  "keywords": [
6
6
  "utilities",
@@ -54,8 +54,8 @@
54
54
  "fmt": "oxfmt --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts'"
55
55
  },
56
56
  "dependencies": {
57
- "@linxiraos/pi-natives": "1.4.10",
58
- "@linxiraos/pi-omptype": "1.4.10"
57
+ "@linxiraos/pi-natives": "1.4.11",
58
+ "@linxiraos/zeta-schema": "1.4.11"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/bun": "1.4.4"
package/src/acp/schema.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Type, type } from "@linxiraos/pi-omptype";
1
+ import { type Type, type } from "@linxiraos/zeta-schema";
2
2
  import type {
3
3
  ForkSessionResponse,
4
4
  LoadSessionResponse,
package/src/env.ts CHANGED
@@ -326,7 +326,8 @@ const ompCompatValue =
326
326
  agentEnv.ZETA_OMP_COMPAT ??
327
327
  piEnv.ZETA_OMP_COMPAT ??
328
328
  homeEnv.ZETA_OMP_COMPAT;
329
- const legacyOmpEnv = isOmpCompatEnabled({ ZETA_OMP_COMPAT: ompCompatValue }) ? loadLegacyOmpEnv() : {};
329
+ const legacyOmpEnabled = isOmpCompatEnabled({ ZETA_OMP_COMPAT: ompCompatValue });
330
+ const legacyOmpEnv = legacyOmpEnabled ? loadLegacyOmpEnv() : {};
330
331
 
331
332
  for (const key of Object.keys(Bun.env)) {
332
333
  const value = Bun.env[key];
@@ -335,7 +336,8 @@ for (const key of Object.keys(Bun.env)) {
335
336
  }
336
337
  }
337
338
 
338
- for (const file of [projectEnv, agentEnv, piEnv, homeEnv, legacyOmpEnv]) {
339
+ /** Copy one dotenv file into the process environment; an already-set name wins. */
340
+ function mergeDotenvIntoProcess(file: Record<string, string>): void {
339
341
  for (const key in file) {
340
342
  if (!isMacosMallocStackLoggingEnvName(key) && !Bun.env[key]) {
341
343
  Bun.env[key] = file[key];
@@ -344,6 +346,8 @@ for (const file of [projectEnv, agentEnv, piEnv, homeEnv, legacyOmpEnv]) {
344
346
  }
345
347
  }
346
348
 
349
+ for (const file of [projectEnv, agentEnv, piEnv, homeEnv, legacyOmpEnv]) mergeDotenvIntoProcess(file);
350
+
347
351
  // Directory-affecting keys (XDG_*_HOME, and in default mode ZETA_CODING_AGENT_DIR)
348
352
  // may have just arrived from the profile/agent `.env` applied above. The dirs
349
353
  // resolver cached its paths at module load — before this file ran — so rebuild
@@ -351,6 +355,23 @@ for (const file of [projectEnv, agentEnv, piEnv, homeEnv, legacyOmpEnv]) {
351
355
  // the profile name + home, so this re-reads only the directory vars.
352
356
  refreshDirsFromEnv();
353
357
 
358
+ let legacyOmpEnvApplied = legacyOmpEnabled;
359
+
360
+ /**
361
+ * Apply the legacy OMP dotenv files on demand.
362
+ *
363
+ * The eager pass above only sees `ZETA_OMP_COMPAT` from the shell or a Zeta
364
+ * dotenv file. A host that resolves the persisted `compat.importLegacyOmp`
365
+ * setting calls this once its settings layer is loaded. Idempotent, and it
366
+ * never overwrites a name the process already has.
367
+ */
368
+ export function applyLegacyOmpEnv(): void {
369
+ if (legacyOmpEnvApplied) return;
370
+ legacyOmpEnvApplied = true;
371
+ mergeDotenvIntoProcess(loadLegacyOmpEnv());
372
+ refreshDirsFromEnv();
373
+ }
374
+
354
375
  /**
355
376
  * Intentional re-export of Bun.env.
356
377
  *