@rosetears/aili-pi 0.1.5 → 0.1.7
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 +14 -8
- package/THIRD_PARTY_NOTICES.md +13 -13
- package/extensions/matrix/index.ts +13 -3
- package/extensions/zentui/config.ts +9 -2
- package/extensions/zentui/extension-status.ts +25 -1
- package/extensions/zentui/gradient.ts +6 -6
- package/licenses/pi-permission-modes-MIT.txt +21 -0
- package/manifests/adapter-evidence.json +10 -9
- package/manifests/live-verification.json +19 -11
- package/manifests/provenance.json +17 -17
- package/manifests/sbom.json +6 -6
- package/manifests/skill-compatibility.json +12 -12
- package/manifests/subagent-provenance.json +13 -3
- package/notices/pi-sakura-cyberdeck-NOTICE.txt +3 -2
- package/package.json +5 -3
- package/scripts/generate-provenance.ts +1 -1
- package/scripts/sync-permission-modes.ts +135 -0
- package/src/runtime/native-integrations.ts +5 -5
- package/src/runtime/package-resolution.ts +8 -0
- package/src/runtime/registry.ts +138 -9
- package/src/runtime/subagents.ts +163 -11
- package/src/vendor/pi-permission-modes/index.ts +692 -0
- package/src/vendor/pi-permission-modes/resolve.ts +142 -0
- package/upstream/pi-permission-modes.lock.json +47 -0
package/README.md
CHANGED
|
@@ -51,27 +51,29 @@ That command creates or updates only the AILI marker block in `~/.pi/agent/APPEN
|
|
|
51
51
|
|
|
52
52
|
## Rem Cyberdeck
|
|
53
53
|
|
|
54
|
-
The package supplies the `rem-cyberdeck` theme plus three additional Pi Extensions: a Rem header,
|
|
54
|
+
The package supplies the dark `rem-cyberdeck` theme plus three additional Pi Extensions: a Rem header, Sakura Matrix animation, and Zentui footer/editor surface. Select it through Pi's `/settings` theme selector or set `"theme": "rem-cyberdeck"` in `~/.pi/agent/settings.json`. The visual extensions are derived from `pi-sakura-cyberdeck` at revision `165a1f8011a12a58a6409b56b8a6c0416cd9b589` under MIT; see `THIRD_PARTY_NOTICES.md` and `notices/pi-sakura-cyberdeck-NOTICE.txt`.
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Matrix keeps the pinned sparse waterfall rhythm and default `density=0.65`, while bounded ultra-wide tracks are spread across the complete terminal-cell width instead of truncating to a left prefix. `/sakura-matrix status` reports its settings; use `/sakura-matrix density <0.45-0.95>` for an explicit density preference. The `✦ REASONING` trail uses the same pinned Sakura pastel gradient.
|
|
57
|
+
|
|
58
|
+
Zentui enables its experimental fixed-bottom editor by default when the installed Pi TUI exposes the required private layout capabilities. If capability detection or installation fails, it keeps Pi's native editor and emits a warning. The feature uses the terminal alternate screen; its default mouse scrolling can interfere with terminal text selection and tmux scrollback. Use Zentui's `/zentui` settings to disable the fixed editor or mouse scrolling. Zentui hides `pi-cache-stats` by default so the one canonical Codex weekly quota remains visible; explicitly re-enabled cache stats follow quota in the bounded footer.
|
|
57
59
|
|
|
58
60
|
## Commands and modes
|
|
59
61
|
|
|
60
62
|
- `/ideate`, `/define`, `/build`, `/ship`: the four AILI delivery modes.
|
|
61
63
|
- `/local-review`: a standalone local audit, not a fifth lifecycle mode.
|
|
62
64
|
- `/aili-doctor` or `/aili-doctor --json`: human or machine-readable health evidence.
|
|
63
|
-
- `/perm`:
|
|
65
|
+
- `/perm`: the revision-bound `pi-permission-modes@2.2.0` adaptation controls `Default`, `Plan`, `Build`, and `YOLO`.
|
|
64
66
|
- `Alt+M`: upstream mode-cycle shortcut.
|
|
65
67
|
- `/aili-install-global-resources`: explicit installation/update of marker-owned global ROSE and AILI-role resources.
|
|
66
68
|
|
|
67
|
-
`pi-permission-modes` owns mode persistence, prompts, and sandbox behavior. A Linux disposable fixture verified
|
|
69
|
+
The `pi-permission-modes@2.2.0` baseline owns mode persistence, prompts, and sandbox behavior. AILI carries one hash-locked matcher adaptation so `*` and `?` also match line terminators; this prevents multiline Bash/heredoc text from falling through YOLO's `"*": "allow"` rule while retaining custom ask/deny and fail-closed fallback behavior across every pattern-map surface. A Linux disposable fixture verified the stock Build profile through installed Bubblewrap, while an incompatible Git-worktree fixture visibly fell back to confirmation. This is not an isolation guarantee. `YOLO` remains an unrestricted, unsandboxed mode and must be treated accordingly.
|
|
68
70
|
|
|
69
71
|
## Native integrations and side effects
|
|
70
72
|
|
|
71
73
|
- `pi-web-access@0.13.0` provides its complete upstream web-search, content-fetch, curator, clone/PDF/video, and bundled-skill surface. Its provider fallback, network traffic, config/credential paths, clone cache, temporary curator service, downloads, and optional browser-cookie access are upstream behavior; inspect its tool requests and configuration before use.
|
|
72
|
-
- `pi-quota-status@0.3.0` is enabled by default. It may maintain `~/.pi/agent/pi-quota-status/state.json`; `/quota config` creates its configuration template.
|
|
73
|
-
- `pi-permission-modes@2.2.0` provides the permission UI and sandbox degradation behavior above. AILI does not retain `/aili-mode` or `Ctrl+Shift+Alt+A` as competing controls.
|
|
74
|
-
- `@agwab/pi-subagent@0.4.8` owns the generic `subagent` tool, child spawn, cancellation, durable run/artifact lifecycle, bounded parallel fan-out, async actions, worktrees, external `cwd`, and sandbox options. The 19 `aili.<role>` profiles are optional named agents; generic or agentless runs do not use an AILI-only result schema. AILI
|
|
74
|
+
- `pi-quota-status@0.3.0` is enabled by default. It may maintain `~/.pi/agent/pi-quota-status/state.json`; `/quota config` creates its configuration template. Zentui displays exactly one weekly value as `codex <percent> <reset>`, preferring explicit `Wk` data and treating the dependency's current `5h`-labeled primary value only as a compatibility fallback when weekly is absent.
|
|
75
|
+
- `pi-permission-modes@2.2.0` provides the permission UI and sandbox degradation behavior above through AILI's exact-source adaptation. The only semantic source change is line-terminator-safe shared glob matching; `upstream/pi-permission-modes.lock.json` records the baseline and adapted hashes. AILI does not retain `/aili-mode` or `Ctrl+Shift+Alt+A` as competing controls.
|
|
76
|
+
- `@agwab/pi-subagent@0.4.8` owns the generic `subagent` tool, child spawn, cancellation, durable run/artifact lifecycle, bounded parallel fan-out, async actions, worktrees, external `cwd`, and sandbox options. On Pi 0.81.1, AILI routes ordinary omitted/`auto` calls to `headless` because the pinned inline runner calls removed SDK factories; explicit `inline` stops before model startup with a compatibility diagnostic. Explicit `headless`/`tmux`, visible auto, sandbox auto, lifecycle actions, and caller options remain upstream paths. A mixed parallel auto call that combines visible tasks with ordinary uncontained tasks is rejected rather than silently sending one class through broken inline. The 19 `aili.<role>` profiles are optional named agents; generic or agentless runs do not use an AILI-only result schema. AILI also adds a bounded requested `Agent:`/`Agents:` heading and an immutable credential-path guard. The upstream runner excludes recursive `subagent` exposure inside workers.
|
|
75
77
|
- `pi-cache-optimizer@2.6.18` provides `/cache-optimizer`, provider cache diagnostics, cache statistics, and prompt-cache optimization. It may maintain `~/.pi/agent/pi-cache-optimizer-stats.json`; `/cache-optimizer fix` is interactive and is the only command that may propose editing `models.json`.
|
|
76
78
|
- `pi-markdown-preview@0.10.1` provides `/preview`, `/preview-browser`, `/preview-pdf`, `/preview-clear-cache`, and the `preview_export` tool. Terminal/browser previews require a Chromium executable; PDF export additionally requires Pandoc and a LaTeX engine.
|
|
77
79
|
- `@narumitw/pi-lsp@0.25.0` provides language-agnostic `lsp_diagnostics`, `lsp_fix`, and `/lsp`. It supports routes for C/C++, Python, CSS/SCSS, JavaScript/TypeScript, Go, Rust, Java, Kotlin, Bash, YAML, Terraform, and other languages. It does not download language servers; install the required commands separately and configure project routes in `.pi/pi-lsp.json` or user routes in `~/.pi/agent/pi-lsp.json`.
|
|
@@ -91,7 +93,7 @@ When unavailable, runtime and doctor output use explicit `SKIP`/`WARN` results a
|
|
|
91
93
|
|
|
92
94
|
## Security boundary
|
|
93
95
|
|
|
94
|
-
AILI injects a non-removable guard that denies standard Pi file-tool and parsed-bash access to credential, authentication, and private-key paths, including from an external `cwd`, a YOLO permission mode, or a caller-supplied child extension list. Child Pi processes load the ambient AILI
|
|
96
|
+
AILI injects a non-removable guard that denies standard Pi file-tool and parsed-bash access to credential, authentication, and private-key paths, including from an external `cwd`, a YOLO permission mode, or a caller-supplied child extension list. Child Pi processes load the ambient AILI permission-mode registration exactly once, so adapted permission prompts and sandbox behavior remain active; headless confirmation requests fail closed. The guard does not make arbitrary third-party extension code safe: extensions remain trusted code and may have direct process authority. Neither AILI nor Pi provides a universal OS sandbox or containment: trusted extensions, user-authority processes, ambient network access, and filesystem races remain in the user trust domain. Inspect exact approval targets and do not put credentials in task text.
|
|
95
97
|
|
|
96
98
|
Use `subagent` lifecycle actions (`status`, `logs`, `wait`, `interrupt`, `mark-background`, and `reconcile`) to inspect durable async work. Upstream fan-out is version-bounded rather than capped by AILI at two; background completion is not evidence until inspected. Subagents are a benefit-based way to improve execution efficiency and preserve the main agent's context: the main agent owns decisions, scope, integration, and final verification, while bounded discovery, implementation, testing, or other execution may be delegated when specialist, parallelism, or context-isolation benefits outweigh orchestration cost. Direct parent work remains valid when delegation has no clear net benefit; no subagent call is required to unlock file mutation. Provider/model behavior still depends on the configured Pi environment.
|
|
97
99
|
|
|
@@ -99,6 +101,7 @@ Use `subagent` lifecycle actions (`status`, `logs`, `wait`, `interrupt`, `mark-b
|
|
|
99
101
|
|
|
100
102
|
- `upstream/aili-workflows.lock.json` pins the exact canonical 64-skill/471-file snapshot.
|
|
101
103
|
- `upstream/opencode-global-agents.lock.json` pins the global AGENTS source revision/hash and documents its Pi-native derivation.
|
|
104
|
+
- `upstream/pi-permission-modes.lock.json` pins the exact upstream and adapted permission runtime files and semantic diff.
|
|
102
105
|
- `manifests/skill-compatibility.json` records one compatibility state per skill.
|
|
103
106
|
- `manifests/roles.json` records the 19 generated Pi role profiles.
|
|
104
107
|
- `manifests/provenance.json`, `manifests/sbom.json`, and `THIRD_PARTY_NOTICES.md` record adapted/reference sources and the exact npm lock inventory.
|
|
@@ -117,6 +120,9 @@ npm run validate:release
|
|
|
117
120
|
- **Package install failure:** keep the reported Pi/AILI states distinct. Retry the printed `pi install` command after fixing the cause; do not automatically remove a pre-existing package.
|
|
118
121
|
- **Doctor is non-pass:** inspect the exact `ERROR`, `WARN`, `SKIP`, or `UNVERIFIED` component. Missing optional packs are not core execution success.
|
|
119
122
|
- **Permission shortcut does nothing:** use `/perm`; terminal multiplexers may consume `Alt+M`.
|
|
123
|
+
- **YOLO still asks for multiline Bash:** confirm the loaded Package contains the adapted permission runtime with `npm run verify:permission-modes`; do not work around it by granting every distinct script for the session.
|
|
124
|
+
- **Subagent reports the inline SDK `reading 'create'` failure:** omit `backend` or use `backend: "headless"`; explicit inline is unsupported for the pinned Pi 0.81.1 / subagent 0.4.8 pair.
|
|
125
|
+
- **Sandboxed subagent cannot authenticate or reach its model:** `sandbox:true` is deny-all network, and model-backed sandbox calls must allow the exact provider endpoint while preserving credential protections. This is separate from default-backend compatibility.
|
|
120
126
|
- **Global resources are non-pass:** run `/aili-install-global-resources` only after reviewing the exact `~/.pi/agent/` targets. A malformed marker or an unowned role collision intentionally leaves files unchanged.
|
|
121
127
|
- **Offline use:** the installed Package embeds the pinned skills and does not fetch `aili-workflows` at runtime. Its Pi-managed npm lifecycle synchronizes only pre-existing same-name global skills from that embedded fixed snapshot. First-time Pi/package installation still requires the relevant package sources.
|
|
122
128
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -20,20 +20,20 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
20
20
|
- Revision: daa7b83819116a62008ad17aa65fcd50fefbafd0
|
|
21
21
|
- Version: 0.4.8
|
|
22
22
|
- License: MIT
|
|
23
|
-
- Source files: src/api.ts, src/runners/headless-model.ts, src/artifacts/result.ts
|
|
24
|
-
- Reused symbols/patterns: runSubagent API, headless lifecycle, artifact envelope
|
|
25
|
-
- Local changes: AILI registers the full pinned upstream subagent tool schema, injects a non-removable credential guard,
|
|
23
|
+
- Source files: src/index.ts, src/api.ts, src/runners/headless-model.ts, src/artifacts/result.ts
|
|
24
|
+
- Reused symbols/patterns: subagent tool renderCall, runSubagent API, headless lifecycle, artifact envelope
|
|
25
|
+
- Local changes: AILI registers the full pinned upstream subagent tool schema, prepends a sanitized bounded requested-Agent heading, injects a non-removable credential guard, normalizes ordinary omitted/auto runs to headless for the Pi 0.81.1 compatibility window, and rejects explicit inline before model startup; no upstream source is copied
|
|
26
26
|
|
|
27
27
|
## pi-permission-modes
|
|
28
28
|
|
|
29
|
-
- Status:
|
|
29
|
+
- Status: adapted
|
|
30
30
|
- Source: https://github.com/wynainfo/pi-permission-modes.git
|
|
31
31
|
- Revision: 23d65d10a53b67043cae42322acf9044d6edb196
|
|
32
32
|
- Version: 2.2.0
|
|
33
33
|
- License: MIT
|
|
34
|
-
- Source files: src/index.ts, permission-
|
|
35
|
-
- Reused symbols/patterns: Default/Plan/Build/YOLO, /perm, Alt+M, sandbox degradation
|
|
36
|
-
- Local changes: AILI
|
|
34
|
+
- Source files: src/vendor/pi-permission-modes/index.ts, src/vendor/pi-permission-modes/resolve.ts, upstream/pi-permission-modes.lock.json, licenses/pi-permission-modes-MIT.txt
|
|
35
|
+
- Reused symbols/patterns: Default/Plan/Build/YOLO, /perm, Alt+M, shared permission pattern matcher, sandbox degradation
|
|
36
|
+
- Local changes: AILI's generated adapted entry redirects unchanged sibling modules to the exact 2.2.0 dependency; the owned resolve.ts compiles permission globs with RegExp dotAll so * and ? include ECMAScript line terminators; the exact upstream and adapted files are hash-locked and drift-checked
|
|
37
37
|
|
|
38
38
|
## pi-quota-status
|
|
39
39
|
|
|
@@ -42,9 +42,9 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
42
42
|
- Revision: 742b3e40b88fbf3d5dcd9d39af96d37bd26bb436
|
|
43
43
|
- Version: 0.3.0
|
|
44
44
|
- License: MIT
|
|
45
|
-
- Source files: src/index.ts, src/paths.ts
|
|
46
|
-
- Reused symbols/patterns: quota footer, /quota, global state maintenance
|
|
47
|
-
- Local changes: AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui
|
|
45
|
+
- Source files: src/index.ts, src/subscription.ts, src/format.ts, src/paths.ts
|
|
46
|
+
- Reused symbols/patterns: quota footer, Codex subscription windows, /quota, global state maintenance
|
|
47
|
+
- Local changes: AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui shows one canonical weekly segment as codex, preferring explicit Wk and using the dependency's legacy-mislabeled 5h primary only as fallback, without changing selected percentage or reset data
|
|
48
48
|
|
|
49
49
|
## pi-web-access
|
|
50
50
|
|
|
@@ -66,7 +66,7 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
66
66
|
- License: MIT
|
|
67
67
|
- Source files: index.ts
|
|
68
68
|
- Reused symbols/patterns: default Extension, /cache-optimizer, cache statistics, prompt cache hooks
|
|
69
|
-
- Local changes: AILI initializes the pinned upstream extension through its single Extension entry; no upstream source is copied
|
|
69
|
+
- Local changes: AILI initializes the pinned upstream extension through its single Extension entry; Zentui defaults its pi-cache-stats footer placement off while leaving cache commands and collection unchanged; no upstream source is copied
|
|
70
70
|
|
|
71
71
|
## pi-markdown-preview
|
|
72
72
|
|
|
@@ -99,10 +99,10 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
99
99
|
- License: MIT
|
|
100
100
|
- Source files: extensions/header/index.ts, extensions/matrix/index.ts, extensions/zentui/**
|
|
101
101
|
- Reused symbols/patterns: header, matrix animation, Zentui footer, fixed editor compositor
|
|
102
|
-
- Local changes: registered as three additional Pi Package Extensions; header avatar loads the supplied Rem asset; Zentui palette
|
|
102
|
+
- Local changes: registered as three additional Pi Package Extensions; header avatar loads the supplied Rem asset; Zentui shell palette uses Rem while Matrix and the reasoning trail retain the upstream Sakura palette; overflowing Matrix tracks are sampled deterministically across the complete terminal width while retaining the 96-track budget and ordinary-width behavior; relative import specifiers and session lifecycle event are adapted for this package's NodeNext TypeScript contract
|
|
103
103
|
|
|
104
104
|
## npm dependency inventory
|
|
105
105
|
|
|
106
106
|
The exact 424-entry package-lock inventory, versions, integrity values, dependency scope, and declared licenses is recorded in `manifests/sbom.json`.
|
|
107
107
|
|
|
108
|
-
Runtime dependencies are initialized through the single AILI Extension entry
|
|
108
|
+
Runtime dependencies are initialized through the single AILI Extension entry. Package-owned third-party adaptations are copied only where their provenance sourceFiles explicitly name repository paths.
|
|
@@ -6,7 +6,7 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
|
|
|
6
6
|
const WIDGET_KEY = "sakura-matrix-engine";
|
|
7
7
|
const CONFIG_PATH = join(homedir(), ".pi", "agent", "sakura-cyberdeck-matrix.json");
|
|
8
8
|
const RESET = "\x1b[0m";
|
|
9
|
-
const
|
|
9
|
+
export const SAKURA_MATRIX_GLYPHS = [..."0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモラリルレロワン"];
|
|
10
10
|
const BG: RGB = [20, 17, 26];
|
|
11
11
|
const TEXT: RGB = [247, 238, 248];
|
|
12
12
|
const CANDY: readonly RGB[] = [
|
|
@@ -18,6 +18,7 @@ const CANDY: readonly RGB[] = [
|
|
|
18
18
|
[174, 229, 197], // mint
|
|
19
19
|
];
|
|
20
20
|
const WORKING_INDICATOR = "◆";
|
|
21
|
+
const MAX_DROPS = 96;
|
|
21
22
|
const PHASE_MESSAGES: Record<Phase, string> = {
|
|
22
23
|
thinking: "Weaving the next move…",
|
|
23
24
|
working: "Composing the response…",
|
|
@@ -106,7 +107,16 @@ function stableGlyph(seed: number, row: number, timeSlice: number): string {
|
|
|
106
107
|
let hash = Math.imul(seed ^ (row + 17), 0x45d9f3b);
|
|
107
108
|
hash = Math.imul(hash ^ timeSlice, 0x45d9f3b);
|
|
108
109
|
hash ^= hash >>> 16;
|
|
109
|
-
return
|
|
110
|
+
return SAKURA_MATRIX_GLYPHS[Math.abs(hash) % SAKURA_MATRIX_GLYPHS.length] ?? "0";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function selectBoundedColumns(columns: readonly number[]): number[] {
|
|
114
|
+
if (columns.length <= MAX_DROPS) return [...columns];
|
|
115
|
+
const lastIndex = columns.length - 1;
|
|
116
|
+
return Array.from({ length: MAX_DROPS }, (_, index) => {
|
|
117
|
+
const sourceIndex = Math.round((index * lastIndex) / (MAX_DROPS - 1));
|
|
118
|
+
return columns[sourceIndex] ?? 0;
|
|
119
|
+
});
|
|
110
120
|
}
|
|
111
121
|
|
|
112
122
|
export function createDrops(width: number, density: number, height: number): Drop[] {
|
|
@@ -114,7 +124,7 @@ export function createDrops(width: number, density: number, height: number): Dro
|
|
|
114
124
|
const columns = Array.from({ length: Math.ceil(width / 2) }, (_, index) => index * 2);
|
|
115
125
|
const active = columns.filter(() => random() < density);
|
|
116
126
|
const selected = active.length >= 8 ? active : columns.slice(0, Math.min(columns.length, 8));
|
|
117
|
-
return selected
|
|
127
|
+
return selectBoundedColumns(selected).map((x, index) => {
|
|
118
128
|
const length = 3 + Math.floor(random() * 5);
|
|
119
129
|
const gap = 1 + Math.floor(random() * 5);
|
|
120
130
|
const cycle = height + length + gap;
|
|
@@ -301,6 +301,7 @@ export const defaultConfig: PolishedTuiConfig = {
|
|
|
301
301
|
extensionStatuses: {
|
|
302
302
|
defaultPlacement: "right",
|
|
303
303
|
placements: {
|
|
304
|
+
"pi-cache-stats": "off",
|
|
304
305
|
"pi-quota-status": "right",
|
|
305
306
|
"dual-subscription-quota": "left",
|
|
306
307
|
"codex-goal": "middle",
|
|
@@ -793,8 +794,14 @@ export function mergeConfig(parsed: unknown): PolishedTuiConfig {
|
|
|
793
794
|
gitMetrics,
|
|
794
795
|
extensionStatuses: {
|
|
795
796
|
defaultPlacement: extensionStatuses.defaultPlacement,
|
|
796
|
-
placements: {
|
|
797
|
-
|
|
797
|
+
placements: {
|
|
798
|
+
...defaultConfig.extensionStatuses.placements,
|
|
799
|
+
...extensionStatuses.placements,
|
|
800
|
+
},
|
|
801
|
+
colorModes: {
|
|
802
|
+
...defaultConfig.extensionStatuses.colorModes,
|
|
803
|
+
...extensionStatuses.colorModes,
|
|
804
|
+
},
|
|
798
805
|
},
|
|
799
806
|
fixedEditor,
|
|
800
807
|
};
|
|
@@ -21,8 +21,18 @@ export type ExtensionStatusSegmentsByPlacement = {
|
|
|
21
21
|
|
|
22
22
|
const safeSgrPattern = /\x1b\[[0-9;:]*m/g;
|
|
23
23
|
const sgrPlaceholderPattern = /__ZENTUI_SGR_(\d+)__/g;
|
|
24
|
+
const quotaSegmentSeparatorPattern = /\s+·\s+/;
|
|
25
|
+
const quotaWeeklyLabelPattern = /^(?:wk|weekly|7d)\b/i;
|
|
26
|
+
const quotaLegacyLabelPattern = /^5h\b/i;
|
|
27
|
+
const quotaDisplayLabelPattern = /^((?:\x1b\[[0-9;:]*m)*)\s*(?:wk|weekly|7d|5h)\b/i;
|
|
28
|
+
|
|
29
|
+
function statusPriority(key: string): number {
|
|
30
|
+
return key === "pi-quota-status" ? 0 : 1;
|
|
31
|
+
}
|
|
24
32
|
|
|
25
33
|
function compareKeys(a: ExtensionStatusSegment, b: ExtensionStatusSegment): number {
|
|
34
|
+
const priorityDifference = statusPriority(a.key) - statusPriority(b.key);
|
|
35
|
+
if (priorityDifference !== 0) return priorityDifference;
|
|
26
36
|
return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
|
|
27
37
|
}
|
|
28
38
|
|
|
@@ -42,9 +52,23 @@ function hasVisibleStatusText(value: string): boolean {
|
|
|
42
52
|
return sanitizeExtensionStatusText(value).length > 0;
|
|
43
53
|
}
|
|
44
54
|
|
|
55
|
+
function quotaSegmentLabel(segment: string): "weekly" | "legacy" | undefined {
|
|
56
|
+
const plain = normalizeStatusWhitespace(stripVTControlCharacters(segment));
|
|
57
|
+
if (quotaWeeklyLabelPattern.test(plain)) return "weekly";
|
|
58
|
+
if (quotaLegacyLabelPattern.test(plain)) return "legacy";
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
45
62
|
function formatQuotaWindowLabel(key: string, text: string): string {
|
|
46
63
|
if (key !== "pi-quota-status") return text;
|
|
47
|
-
|
|
64
|
+
const segments = text.split(quotaSegmentSeparatorPattern);
|
|
65
|
+
const selected =
|
|
66
|
+
segments.find((segment) => quotaSegmentLabel(segment) === "weekly") ??
|
|
67
|
+
segments.find((segment) => quotaSegmentLabel(segment) === "legacy");
|
|
68
|
+
if (!selected) return text;
|
|
69
|
+
return selected.replace(quotaDisplayLabelPattern, (_match, sgrPrefix: string) =>
|
|
70
|
+
`${sgrPrefix}codex`,
|
|
71
|
+
);
|
|
48
72
|
}
|
|
49
73
|
|
|
50
74
|
export function sanitizeExtensionStatusOriginalText(value: string): string {
|
|
@@ -4,11 +4,11 @@ export type RGB = readonly [number, number, number];
|
|
|
4
4
|
|
|
5
5
|
export const SAKURA_MACARON_GRADIENT = "sakura-macaron-gradient";
|
|
6
6
|
export const SAKURA_MACARON_STOPS: readonly RGB[] = [
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
7
|
+
[242, 167, 198], // sakura pink #F2A7C6
|
|
8
|
+
[252, 201, 185], // sakura-iro #FCC9B9
|
|
9
|
+
[239, 195, 230], // petal #EFC3E6
|
|
10
|
+
[199, 184, 245], // lavender #C7B8F5
|
|
11
|
+
[159, 211, 242], // sky macaron #9FD3F2
|
|
12
12
|
];
|
|
13
13
|
|
|
14
14
|
const RESET = "\x1b[0m";
|
|
@@ -29,7 +29,7 @@ function sampleGradient(position: number): RGB {
|
|
|
29
29
|
const normalized = Math.max(0, Math.min(1, position));
|
|
30
30
|
const scaled = normalized * (stops.length - 1);
|
|
31
31
|
const index = Math.min(stops.length - 2, Math.floor(scaled));
|
|
32
|
-
const from = stops[index] ?? SAKURA_MACARON_STOPS[0] ?? [
|
|
32
|
+
const from = stops[index] ?? SAKURA_MACARON_STOPS[0] ?? [242, 167, 198];
|
|
33
33
|
const to = stops[index + 1] ?? from;
|
|
34
34
|
return mix(from, to, scaled - index);
|
|
35
35
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Nico Merz
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"vitest run tests/unit/runtime.test.ts"
|
|
12
12
|
],
|
|
13
13
|
"artifacts": [
|
|
14
|
-
{ "path": "package-lock.json", "sha256": "
|
|
14
|
+
{ "path": "package-lock.json", "sha256": "a9e5a3e4d1076b3179dd8cca5ef89f9fddc838e0acf9abcc1f42daf2a90ddafb" },
|
|
15
15
|
{ "path": "tests/integration/extension-load.test.ts", "sha256": "f2fdceb965f55bc481acc6457eee5cac9499dac08e8c3d17ca60efd07f13e96c" },
|
|
16
16
|
{ "path": "tests/unit/runtime.test.ts", "sha256": "9e99920e7e16529f109771d659f611c9fa580941a5dbf924b2d9d117dd3adeee" }
|
|
17
17
|
]
|
|
@@ -24,21 +24,22 @@
|
|
|
24
24
|
"verification": [
|
|
25
25
|
"npm run verify:roles",
|
|
26
26
|
"vitest run tests/unit/roles.test.ts tests/unit/subagents.test.ts",
|
|
27
|
-
"vitest run tests/integration/generic-permission.test.ts",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
27
|
+
"vitest run tests/integration/generic-subagent.test.ts tests/integration/generic-permission.test.ts",
|
|
28
|
+
"AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
29
|
+
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
30
30
|
],
|
|
31
31
|
"artifacts": [
|
|
32
|
-
{ "path": "src/runtime/subagents.ts", "sha256": "
|
|
32
|
+
{ "path": "src/runtime/subagents.ts", "sha256": "9f09e0e8a380d026d82b0842f2c687da2f3529b43a7ef6d1a6aad47d71190d48" },
|
|
33
33
|
{ "path": "src/runtime/child-guard.ts", "sha256": "9da3c1d80805fd76bbf7a7fd253dff44f0756439fdee039bd7d7fd30766329e1" },
|
|
34
34
|
{ "path": "src/runtime/credential-guard.ts", "sha256": "01d76ff0a9a2a0a08a2d2e52b6ed050d925df5e5bea1e6194130e00bfe22cde3" },
|
|
35
|
-
{ "path": "tests/unit/subagents.test.ts", "sha256": "
|
|
35
|
+
{ "path": "tests/unit/subagents.test.ts", "sha256": "16fc1fbd1759befeed03a2428294c28d662022622c61a6444e23b365dc7447aa" },
|
|
36
36
|
{ "path": "tests/unit/child-guard.test.ts", "sha256": "b187d6d84cd0829ae5474e133b4df911a80b75b9e89622b8543a1c5894be4974" },
|
|
37
|
-
{ "path": "tests/integration/generic-permission.test.ts", "sha256": "
|
|
37
|
+
{ "path": "tests/integration/generic-permission.test.ts", "sha256": "90cc4ee67098f671dddac495d5e2cd5dc2c50131297fd04f0d72a1ca44217f24" },
|
|
38
|
+
{ "path": "tests/integration/generic-subagent.test.ts", "sha256": "a13f8564bdd1bd735f9313d2ad71511a47c939dd6351f2f460771cb48a7fc80b" },
|
|
38
39
|
{ "path": "tests/unit/roles.test.ts", "sha256": "72b61af16ff66506aaaceac28c92d8b3756741e3c4df0544686b3d4940215b57" },
|
|
39
40
|
{ "path": "scripts/sync-roles.ts", "sha256": "a4fd66c95d91ebd92f0b1c6164a84809c4b5a1bf1e185dbdd61af23688dd2d9c" },
|
|
40
|
-
{ "path": "tests/integration/live-subagent.test.ts", "sha256": "
|
|
41
|
-
{ "path": "manifests/live-verification.json", "sha256": "
|
|
41
|
+
{ "path": "tests/integration/live-subagent.test.ts", "sha256": "b88750f74b203cdbdb9d0e453e16f720ff4d8e4591ca140e0a3c7e1d8428868c" },
|
|
42
|
+
{ "path": "manifests/live-verification.json", "sha256": "f5c80dfb2fb989b43af3b7460510b0a546cc05f8ff9e671c3e9284384c33d95b" }
|
|
42
43
|
]
|
|
43
44
|
}
|
|
44
45
|
]
|
|
@@ -1,32 +1,40 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion":
|
|
2
|
+
"schemaVersion": 2,
|
|
3
3
|
"platform": "linux",
|
|
4
4
|
"piVersion": "0.81.1",
|
|
5
|
+
"subagentVersion": "0.4.8",
|
|
5
6
|
"status": "passed",
|
|
6
|
-
"approvedScope": "
|
|
7
|
+
"approvedScope": "On 2026-07-24, the user authorized two bounded live probes after repository-local compatibility verification: an omitted-backend, agentless child restricted to reading package.json, and an explicit-headless credential guard child restricted to a disposable .env sentinel. Both probes used only their declared temporary artifact roots and completed without business-file changes.",
|
|
7
8
|
"probes": [
|
|
8
9
|
{
|
|
9
10
|
"id": "generic-subagent-fixtures",
|
|
10
11
|
"command": "npx vitest run tests/unit/subagents.test.ts tests/integration/generic-subagent.test.ts",
|
|
11
|
-
"status": "passed"
|
|
12
|
+
"status": "passed",
|
|
13
|
+
"changedFiles": 0,
|
|
14
|
+
"backendRequest": "matrix",
|
|
15
|
+
"resolvedBackend": "headless"
|
|
12
16
|
},
|
|
13
17
|
{
|
|
14
|
-
"id": "generic-agentless-
|
|
18
|
+
"id": "generic-agentless-default-path",
|
|
15
19
|
"command": "AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
16
20
|
"status": "passed",
|
|
17
|
-
"changedFiles": 0
|
|
21
|
+
"changedFiles": 0,
|
|
22
|
+
"backendRequest": "omitted",
|
|
23
|
+
"resolvedBackend": "headless"
|
|
18
24
|
},
|
|
19
25
|
{
|
|
20
|
-
"id": "generic-credential-guard",
|
|
26
|
+
"id": "generic-credential-guard-explicit-headless",
|
|
21
27
|
"command": "AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
22
28
|
"status": "passed",
|
|
23
|
-
"changedFiles": 0
|
|
29
|
+
"changedFiles": 0,
|
|
30
|
+
"backendRequest": "explicit-headless",
|
|
31
|
+
"resolvedBackend": "headless"
|
|
24
32
|
}
|
|
25
33
|
],
|
|
26
34
|
"implementation": {
|
|
27
|
-
"src/runtime/subagents.ts": "
|
|
28
|
-
"tests/unit/subagents.test.ts": "
|
|
29
|
-
"tests/integration/live-subagent.test.ts": "
|
|
35
|
+
"src/runtime/subagents.ts": "9f09e0e8a380d026d82b0842f2c687da2f3529b43a7ef6d1a6aad47d71190d48",
|
|
36
|
+
"tests/unit/subagents.test.ts": "16fc1fbd1759befeed03a2428294c28d662022622c61a6444e23b365dc7447aa",
|
|
37
|
+
"tests/integration/live-subagent.test.ts": "b88750f74b203cdbdb9d0e453e16f720ff4d8e4591ca140e0a3c7e1d8428868c"
|
|
30
38
|
},
|
|
31
|
-
"credentialHandling": "
|
|
39
|
+
"credentialHandling": "The explicit-headless credential guard probe used only a disposable .env sentinel. It completed with changedFiles=0; the sentinel was absent from the model-visible result and every temporary artifact before cleanup."
|
|
32
40
|
}
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"version": "0.4.8",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"status": "dependency",
|
|
31
|
-
"sourceFiles": ["src/api.ts", "src/runners/headless-model.ts", "src/artifacts/result.ts"],
|
|
32
|
-
"symbols": ["runSubagent API", "headless lifecycle", "artifact envelope"],
|
|
33
|
-
"localChanges": ["AILI registers the full pinned upstream subagent tool schema, injects a non-removable credential guard,
|
|
34
|
-
"verification": ["tests/unit/subagents.test.ts", "tests/integration/package-runtime.test.ts"]
|
|
31
|
+
"sourceFiles": ["src/index.ts", "src/api.ts", "src/runners/headless-model.ts", "src/artifacts/result.ts"],
|
|
32
|
+
"symbols": ["subagent tool renderCall", "runSubagent API", "headless lifecycle", "artifact envelope"],
|
|
33
|
+
"localChanges": ["AILI registers the full pinned upstream subagent tool schema, prepends a sanitized bounded requested-Agent heading, injects a non-removable credential guard, normalizes ordinary omitted/auto runs to headless for the Pi 0.81.1 compatibility window, and rejects explicit inline before model startup; no upstream source is copied"],
|
|
34
|
+
"verification": ["tests/unit/subagents.test.ts", "tests/integration/generic-subagent.test.ts", "tests/integration/live-subagent.test.ts", "tests/integration/package-runtime.test.ts"]
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"name": "pi-permission-modes",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
"revision": "23d65d10a53b67043cae42322acf9044d6edb196",
|
|
40
40
|
"version": "2.2.0",
|
|
41
41
|
"license": "MIT",
|
|
42
|
-
"status": "
|
|
43
|
-
"sourceFiles": ["src/index.ts", "permission-
|
|
44
|
-
"symbols": ["Default/Plan/Build/YOLO", "/perm", "Alt+M", "sandbox degradation"],
|
|
45
|
-
"localChanges": ["AILI
|
|
46
|
-
"verification": ["tests/unit/
|
|
42
|
+
"status": "adapted",
|
|
43
|
+
"sourceFiles": ["src/vendor/pi-permission-modes/index.ts", "src/vendor/pi-permission-modes/resolve.ts", "upstream/pi-permission-modes.lock.json", "licenses/pi-permission-modes-MIT.txt"],
|
|
44
|
+
"symbols": ["Default/Plan/Build/YOLO", "/perm", "Alt+M", "shared permission pattern matcher", "sandbox degradation"],
|
|
45
|
+
"localChanges": ["AILI's generated adapted entry redirects unchanged sibling modules to the exact 2.2.0 dependency", "the owned resolve.ts compiles permission globs with RegExp dotAll so * and ? include ECMAScript line terminators", "the exact upstream and adapted files are hash-locked and drift-checked"],
|
|
46
|
+
"verification": ["npm run verify:permission-modes", "tests/unit/permission-patterns.test.ts", "tests/integration/permission-modes.test.ts", "tests/integration/extension-load.test.ts"]
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"name": "pi-quota-status",
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"version": "0.3.0",
|
|
53
53
|
"license": "MIT",
|
|
54
54
|
"status": "dependency",
|
|
55
|
-
"sourceFiles": ["src/index.ts", "src/paths.ts"],
|
|
56
|
-
"symbols": ["quota footer", "/quota", "global state maintenance"],
|
|
57
|
-
"localChanges": ["AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui
|
|
58
|
-
"verification": ["tests/unit/runtime.test.ts", "tests/integration/extension-load.test.ts"]
|
|
55
|
+
"sourceFiles": ["src/index.ts", "src/subscription.ts", "src/format.ts", "src/paths.ts"],
|
|
56
|
+
"symbols": ["quota footer", "Codex subscription windows", "/quota", "global state maintenance"],
|
|
57
|
+
"localChanges": ["AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui shows one canonical weekly segment as codex, preferring explicit Wk and using the dependency's legacy-mislabeled 5h primary only as fallback, without changing selected percentage or reset data"],
|
|
58
|
+
"verification": ["tests/unit/extension-status.test.ts", "tests/unit/runtime.test.ts", "tests/integration/extension-load.test.ts"]
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
"name": "pi-web-access",
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"status": "dependency",
|
|
79
79
|
"sourceFiles": ["index.ts"],
|
|
80
80
|
"symbols": ["default Extension", "/cache-optimizer", "cache statistics", "prompt cache hooks"],
|
|
81
|
-
"localChanges": ["AILI initializes the pinned upstream extension through its single Extension entry; no upstream source is copied"],
|
|
82
|
-
"verification": ["tests/unit/runtime.test.ts", "tests/integration/package-runtime.test.ts", "npm pack --dry-run --json"]
|
|
81
|
+
"localChanges": ["AILI initializes the pinned upstream extension through its single Extension entry; Zentui defaults its pi-cache-stats footer placement off while leaving cache commands and collection unchanged; no upstream source is copied"],
|
|
82
|
+
"verification": ["tests/unit/runtime.test.ts", "tests/unit/extension-status.test.ts", "tests/integration/package-runtime.test.ts", "npm pack --dry-run --json"]
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"name": "pi-markdown-preview",
|
|
@@ -113,8 +113,8 @@
|
|
|
113
113
|
"status": "adapted",
|
|
114
114
|
"sourceFiles": ["extensions/header/index.ts", "extensions/matrix/index.ts", "extensions/zentui/**"],
|
|
115
115
|
"symbols": ["header", "matrix animation", "Zentui footer", "fixed editor compositor"],
|
|
116
|
-
"localChanges": ["registered as three additional Pi Package Extensions", "header avatar loads the supplied Rem asset", "Zentui palette
|
|
117
|
-
"verification": ["npm run typecheck", "npm test", "npm pack --dry-run --json"]
|
|
116
|
+
"localChanges": ["registered as three additional Pi Package Extensions", "header avatar loads the supplied Rem asset", "Zentui shell palette uses Rem while Matrix and the reasoning trail retain the upstream Sakura palette", "overflowing Matrix tracks are sampled deterministically across the complete terminal width while retaining the 96-track budget and ordinary-width behavior", "relative import specifiers and session lifecycle event are adapted for this package's NodeNext TypeScript contract"],
|
|
117
|
+
"verification": ["tests/unit/matrix.test.ts", "tests/unit/zentui-gradient.test.ts", "npm run typecheck", "npm test", "npm pack --dry-run --json"]
|
|
118
118
|
}
|
|
119
119
|
]
|
|
120
120
|
}
|
package/manifests/sbom.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"dataLicense": "CC0-1.0",
|
|
4
4
|
"SPDXID": "SPDXRef-DOCUMENT",
|
|
5
5
|
"name": "@rosetears/aili-pi-0.0.0-development",
|
|
6
|
-
"documentNamespace": "https://github.com/Rosetears520/aili-pi/sbom/
|
|
6
|
+
"documentNamespace": "https://github.com/Rosetears520/aili-pi/sbom/a9e5a3e4d1076b3179dd8cca5ef89f9f",
|
|
7
7
|
"creationInfo": {
|
|
8
8
|
"creators": [
|
|
9
9
|
"Tool: @rosetears/aili-pi scripts/generate-provenance.ts"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"licenseDeclared": "MIT",
|
|
44
44
|
"checksums": [],
|
|
45
45
|
"primaryPackagePurpose": "SOURCE",
|
|
46
|
-
"comment": "revision=daa7b83819116a62008ad17aa65fcd50fefbafd0; files=src/api.ts, src/runners/headless-model.ts, src/artifacts/result.ts; symbols=runSubagent API, headless lifecycle, artifact envelope; local changes=AILI registers the full pinned upstream subagent tool schema, injects a non-removable credential guard,
|
|
46
|
+
"comment": "revision=daa7b83819116a62008ad17aa65fcd50fefbafd0; files=src/index.ts, src/api.ts, src/runners/headless-model.ts, src/artifacts/result.ts; symbols=subagent tool renderCall, runSubagent API, headless lifecycle, artifact envelope; local changes=AILI registers the full pinned upstream subagent tool schema, prepends a sanitized bounded requested-Agent heading, injects a non-removable credential guard, normalizes ordinary omitted/auto runs to headless for the Pi 0.81.1 compatibility window, and rejects explicit inline before model startup; no upstream source is copied"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"SPDXID": "SPDXRef-source-pi-permission-modes-9b38b384cd",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"licenseDeclared": "MIT",
|
|
56
56
|
"checksums": [],
|
|
57
57
|
"primaryPackagePurpose": "SOURCE",
|
|
58
|
-
"comment": "revision=23d65d10a53b67043cae42322acf9044d6edb196; files=src/index.ts, permission-
|
|
58
|
+
"comment": "revision=23d65d10a53b67043cae42322acf9044d6edb196; files=src/vendor/pi-permission-modes/index.ts, src/vendor/pi-permission-modes/resolve.ts, upstream/pi-permission-modes.lock.json, licenses/pi-permission-modes-MIT.txt; symbols=Default/Plan/Build/YOLO, /perm, Alt+M, shared permission pattern matcher, sandbox degradation; local changes=AILI's generated adapted entry redirects unchanged sibling modules to the exact 2.2.0 dependency | the owned resolve.ts compiles permission globs with RegExp dotAll so * and ? include ECMAScript line terminators | the exact upstream and adapted files are hash-locked and drift-checked"
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
"SPDXID": "SPDXRef-source-pi-quota-status-63ccce8956",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"licenseDeclared": "MIT",
|
|
68
68
|
"checksums": [],
|
|
69
69
|
"primaryPackagePurpose": "SOURCE",
|
|
70
|
-
"comment": "revision=742b3e40b88fbf3d5dcd9d39af96d37bd26bb436; files=src/index.ts, src/paths.ts; symbols=quota footer, /quota, global state maintenance; local changes=AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui
|
|
70
|
+
"comment": "revision=742b3e40b88fbf3d5dcd9d39af96d37bd26bb436; files=src/index.ts, src/subscription.ts, src/format.ts, src/paths.ts; symbols=quota footer, Codex subscription windows, /quota, global state maintenance; local changes=AILI initializes the pinned upstream extension; upstream owns quota polling and state files; Zentui shows one canonical weekly segment as codex, preferring explicit Wk and using the dependency's legacy-mislabeled 5h primary only as fallback, without changing selected percentage or reset data"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"SPDXID": "SPDXRef-source-pi-web-access-7a2e6bb486",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"licenseDeclared": "MIT",
|
|
92
92
|
"checksums": [],
|
|
93
93
|
"primaryPackagePurpose": "SOURCE",
|
|
94
|
-
"comment": "revision=npm:2.6.18; files=index.ts; symbols=default Extension, /cache-optimizer, cache statistics, prompt cache hooks; local changes=AILI initializes the pinned upstream extension through its single Extension entry; no upstream source is copied"
|
|
94
|
+
"comment": "revision=npm:2.6.18; files=index.ts; symbols=default Extension, /cache-optimizer, cache statistics, prompt cache hooks; local changes=AILI initializes the pinned upstream extension through its single Extension entry; Zentui defaults its pi-cache-stats footer placement off while leaving cache commands and collection unchanged; no upstream source is copied"
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"SPDXID": "SPDXRef-source-pi-markdown-preview-43f49610ac",
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"licenseDeclared": "MIT",
|
|
127
127
|
"checksums": [],
|
|
128
128
|
"primaryPackagePurpose": "SOURCE",
|
|
129
|
-
"comment": "revision=165a1f8011a12a58a6409b56b8a6c0416cd9b589; files=extensions/header/index.ts, extensions/matrix/index.ts, extensions/zentui/**; symbols=header, matrix animation, Zentui footer, fixed editor compositor; local changes=registered as three additional Pi Package Extensions | header avatar loads the supplied Rem asset | Zentui palette
|
|
129
|
+
"comment": "revision=165a1f8011a12a58a6409b56b8a6c0416cd9b589; files=extensions/header/index.ts, extensions/matrix/index.ts, extensions/zentui/**; symbols=header, matrix animation, Zentui footer, fixed editor compositor; local changes=registered as three additional Pi Package Extensions | header avatar loads the supplied Rem asset | Zentui shell palette uses Rem while Matrix and the reasoning trail retain the upstream Sakura palette | overflowing Matrix tracks are sampled deterministically across the complete terminal width while retaining the 96-track budget and ordinary-width behavior | relative import specifiers and session lifecycle event are adapted for this package's NodeNext TypeScript contract"
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
132
|
"SPDXID": "SPDXRef-node-modules-agent-base-e28bede7a2",
|
|
@@ -801,9 +801,9 @@
|
|
|
801
801
|
"snapshot-hash:verified",
|
|
802
802
|
"npm run verify:roles",
|
|
803
803
|
"vitest run tests/unit/roles.test.ts tests/unit/subagents.test.ts",
|
|
804
|
-
"vitest run tests/integration/generic-permission.test.ts",
|
|
805
|
-
"
|
|
806
|
-
"
|
|
804
|
+
"vitest run tests/integration/generic-subagent.test.ts tests/integration/generic-permission.test.ts",
|
|
805
|
+
"AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
806
|
+
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
807
807
|
],
|
|
808
808
|
"status": "adapted",
|
|
809
809
|
"reason": "Required capabilities are covered by verified Pi adapter evidence: subagent.dispatch.",
|
|
@@ -4311,9 +4311,9 @@
|
|
|
4311
4311
|
"snapshot-hash:verified",
|
|
4312
4312
|
"npm run verify:roles",
|
|
4313
4313
|
"vitest run tests/unit/roles.test.ts tests/unit/subagents.test.ts",
|
|
4314
|
-
"vitest run tests/integration/generic-permission.test.ts",
|
|
4315
|
-
"
|
|
4316
|
-
"
|
|
4314
|
+
"vitest run tests/integration/generic-subagent.test.ts tests/integration/generic-permission.test.ts",
|
|
4315
|
+
"AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
4316
|
+
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
4317
4317
|
],
|
|
4318
4318
|
"status": "adapted",
|
|
4319
4319
|
"reason": "Required capabilities are covered by verified Pi adapter evidence: subagent.dispatch.",
|
|
@@ -5596,9 +5596,9 @@
|
|
|
5596
5596
|
"snapshot-hash:verified",
|
|
5597
5597
|
"npm run verify:roles",
|
|
5598
5598
|
"vitest run tests/unit/roles.test.ts tests/unit/subagents.test.ts",
|
|
5599
|
-
"vitest run tests/integration/generic-permission.test.ts",
|
|
5600
|
-
"
|
|
5601
|
-
"
|
|
5599
|
+
"vitest run tests/integration/generic-subagent.test.ts tests/integration/generic-permission.test.ts",
|
|
5600
|
+
"AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
5601
|
+
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
5602
5602
|
],
|
|
5603
5603
|
"status": "adapted",
|
|
5604
5604
|
"reason": "Required capabilities are covered by verified Pi adapter evidence: subagent.dispatch.",
|
|
@@ -6416,9 +6416,9 @@
|
|
|
6416
6416
|
"snapshot-hash:verified",
|
|
6417
6417
|
"npm run verify:roles",
|
|
6418
6418
|
"vitest run tests/unit/roles.test.ts tests/unit/subagents.test.ts",
|
|
6419
|
-
"vitest run tests/integration/generic-permission.test.ts",
|
|
6420
|
-
"
|
|
6421
|
-
"
|
|
6419
|
+
"vitest run tests/integration/generic-subagent.test.ts tests/integration/generic-permission.test.ts",
|
|
6420
|
+
"AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
6421
|
+
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
6422
6422
|
],
|
|
6423
6423
|
"status": "adapted",
|
|
6424
6424
|
"reason": "Required capabilities are covered by verified Pi adapter evidence: subagent.dispatch.",
|