@rosetears/aili-pi 0.1.9 → 0.1.10
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 +6 -6
- package/THIRD_PARTY_NOTICES.md +12 -12
- package/docs/persistent-agents.md +114 -0
- package/manifests/adapter-evidence.json +53 -20
- package/manifests/capabilities.json +3 -3
- package/manifests/live-verification.json +18 -19
- package/manifests/provenance.json +12 -12
- package/manifests/roles.json +270 -57
- package/manifests/sbom.json +1 -128
- package/manifests/skill-compatibility.json +57 -61
- package/manifests/subagent-provenance.json +8 -15
- package/package.json +3 -3
- package/roles/agent-evaluator.md +8 -3
- package/roles/ai-regression-scout.md +8 -3
- package/roles/browser-qa-runner.md +8 -3
- package/roles/code-reviewer.md +8 -3
- package/roles/code-scout.md +8 -3
- package/roles/convergence-reviewer.md +8 -3
- package/roles/doc-researcher.md +8 -3
- package/roles/e2e-artifact-runner.md +8 -3
- package/roles/general.md +49 -0
- package/roles/implementer.md +8 -3
- package/roles/opensource-sanitizer.md +8 -3
- package/roles/plan-auditor.md +8 -3
- package/roles/pr-test-analyzer.md +8 -3
- package/roles/security-auditor.md +8 -3
- package/roles/silent-failure-reviewer.md +8 -3
- package/roles/spec-miner.md +8 -3
- package/roles/test-coverage-reviewer.md +8 -3
- package/roles/test-engineer.md +8 -3
- package/roles/web-performance-auditor.md +8 -3
- package/roles/web-researcher.md +8 -3
- package/scripts/sync-roles.ts +186 -24
- package/src/runtime/doctor.ts +38 -10
- package/src/runtime/global-resources.ts +5 -1
- package/src/runtime/index.ts +2 -2
- package/src/runtime/persistent-agents/hub.ts +429 -0
- package/src/runtime/persistent-agents/model-selection.ts +363 -0
- package/src/runtime/persistent-agents/output-delivery.ts +356 -0
- package/src/runtime/persistent-agents/permission.ts +223 -0
- package/src/runtime/persistent-agents/policy.ts +311 -0
- package/src/runtime/persistent-agents/production.ts +569 -0
- package/src/runtime/persistent-agents/runtime.ts +164 -0
- package/src/runtime/persistent-agents/sandbox.ts +68 -0
- package/src/runtime/persistent-agents/scheduler.ts +190 -0
- package/src/runtime/persistent-agents/session-factory.ts +184 -0
- package/src/runtime/persistent-agents/storage.ts +775 -0
- package/src/runtime/persistent-agents/task-coordinator.ts +460 -0
- package/src/runtime/persistent-agents/task-schema.ts +141 -0
- package/src/runtime/persistent-agents/types.ts +134 -0
- package/src/runtime/persistent-agents/workspace.ts +335 -0
- package/src/runtime/registry.ts +28 -32
- package/src/runtime/roles.ts +211 -18
- package/src/runtime/rose-context.ts +1 -1
- package/templates/APPEND_SYSTEM.md +1 -1
- package/upstream/opencode-global-agents.lock.json +1 -1
- package/src/runtime/subagents.ts +0 -249
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ The `pi-permission-modes@2.2.0` baseline owns mode persistence, prompts, and san
|
|
|
77
77
|
- `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.
|
|
78
78
|
- `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.
|
|
79
79
|
- `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.
|
|
80
|
-
-
|
|
80
|
+
- AILI owns the public `task`/`hub` persistent Agent framework. `task` creates parent-scoped official Pi child sessions using 19 specialized `aili.*` selectors or `general`; top-level work is async by default, supports bounded batch scheduling, and returns stable Agent/job/turn IDs plus `agent://` and `history://` references. `hub` provides list/send/wait/inbox/output/history/jobs/cancel/model operations, park/revive, durable delivery, and owner/descendant scoping. No `subagent` compatibility alias or run/attempt backend selector remains. See [`docs/persistent-agents.md`](docs/persistent-agents.md).
|
|
81
81
|
- `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`.
|
|
82
82
|
- `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.
|
|
83
83
|
- `@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`.
|
|
@@ -97,9 +97,9 @@ When unavailable, runtime and doctor output use explicit `SKIP`/`WARN` results a
|
|
|
97
97
|
|
|
98
98
|
## Security boundary
|
|
99
99
|
|
|
100
|
-
AILI
|
|
100
|
+
AILI applies a non-removable in-process child guard before tool approval. It denies credential, authentication, and private-key paths/material; intersects parent-active tools with role/call ceilings; and routes each `ask` decision back to the parent UI. In sandbox-required modes, child Bash reuses the initialized `pi-permission-modes` SandboxManager through a child-cwd-specific Bash definition; if that executor is unavailable or the child is in an incompatible Git worktree, Bash fails closed rather than running unsandboxed. Parent task acceptance is not blanket child authorization. The guard does not make arbitrary trusted extension code safe, and neither AILI nor Pi claims a universal OS sandbox. Inspect exact approval targets and do not put credentials in task text.
|
|
101
101
|
|
|
102
|
-
Use `
|
|
102
|
+
Use `hub jobs`, `hub wait`, `hub output`, and `hub history` to inspect durable asynchronous work. At most 32 top-level turns run concurrently; nested work is synchronous and depth-bounded. Persistent Agents are a benefit-based way to improve execution efficiency and preserve parent context, while the main agent retains decisions, integration, and final verification. Direct parent work remains valid when delegation has no clear net benefit; no Agent call is required to unlock mutation. Provider/model behavior still depends on the configured Pi environment.
|
|
103
103
|
|
|
104
104
|
## Provenance and reproducibility
|
|
105
105
|
|
|
@@ -107,7 +107,7 @@ Use `subagent` lifecycle actions (`status`, `logs`, `wait`, `interrupt`, `mark-b
|
|
|
107
107
|
- `upstream/opencode-global-agents.lock.json` pins the global AGENTS source revision/hash and documents its Pi-native derivation.
|
|
108
108
|
- `upstream/pi-permission-modes.lock.json` pins the exact upstream and adapted permission runtime files and semantic diff.
|
|
109
109
|
- `manifests/skill-compatibility.json` records one compatibility state per skill.
|
|
110
|
-
- `manifests/roles.json` records
|
|
110
|
+
- `manifests/roles.json` records 19 generated specialized profiles plus the AILI-owned `general` profile.
|
|
111
111
|
- `manifests/provenance.json`, `manifests/sbom.json`, and `THIRD_PARTY_NOTICES.md` record adapted/reference sources and the exact npm lock inventory.
|
|
112
112
|
|
|
113
113
|
Verify generated artifacts with:
|
|
@@ -125,8 +125,8 @@ npm run validate:release
|
|
|
125
125
|
- **Doctor is non-pass:** inspect the exact `ERROR`, `WARN`, `SKIP`, or `UNVERIFIED` component. Missing optional packs are not core execution success.
|
|
126
126
|
- **Permission shortcut does nothing:** use `/perm`; terminal multiplexers may consume `Alt+M`.
|
|
127
127
|
- **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.
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
128
|
+
- **Persistent task says the parent Session is not durable:** start/save a normal Pi session first; Agents require a parent JSONL so their sidecar can be scoped exactly.
|
|
129
|
+
- **Child Bash is denied in a sandbox-required mode:** inspect `/sandbox` for dependency/platform readiness. AILI deliberately denies instead of running unsandboxed when the parent SandboxManager is unavailable or when an isolated Git worktree uses a `.git` file that Bubblewrap cannot bind safely.
|
|
130
130
|
- **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.
|
|
131
131
|
- **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.
|
|
132
132
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -13,17 +13,6 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
13
13
|
- Reused symbols/patterns: 64 canonical skill bodies and owned assets, 19 child-role prompt bodies
|
|
14
14
|
- Local changes: skills/** is an exact byte-for-byte snapshot with no semantic overlay; role prompts are generated as Pi frontmatter with explicit tool/capability ceilings and structured output; templates/APPEND_SYSTEM.md is a Pi-native governance derivation of the pinned global AGENTS template, with OpenCode-only control planes excluded
|
|
15
15
|
|
|
16
|
-
## @agwab/pi-subagent
|
|
17
|
-
|
|
18
|
-
- Status: dependency
|
|
19
|
-
- Source: https://github.com/AgwaB/pi-subagent.git
|
|
20
|
-
- Revision: daa7b83819116a62008ad17aa65fcd50fefbafd0
|
|
21
|
-
- Version: 0.4.8
|
|
22
|
-
- License: MIT
|
|
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
|
-
|
|
27
16
|
## pi-permission-modes
|
|
28
17
|
|
|
29
18
|
- Status: adapted
|
|
@@ -101,8 +90,19 @@ This distribution is MIT-licensed. The following adapted sources and locked deve
|
|
|
101
90
|
- Reused symbols/patterns: header, matrix animation, Zentui footer, fixed editor compositor
|
|
102
91
|
- Local changes: registered as three additional Pi Package Extensions; Rose header loads a package-owned renamed artwork asset without changing upstream identity; Rose Shimmer, Rose Code Rain, and Zentui use the Rose-owned palette and gradient; overflowing Matrix tracks remain deterministic across the complete terminal width with the 96-track budget, while each rain row receives a structural blank-row repair; relative import specifiers and session lifecycle event are adapted for this package's NodeNext TypeScript contract
|
|
103
92
|
|
|
93
|
+
## Oh My Pi reference
|
|
94
|
+
|
|
95
|
+
- Status: reference-only
|
|
96
|
+
- Source: https://github.com/can1357/oh-my-pi.git
|
|
97
|
+
- Revision: 59619623e1eeb7c290649eeaf3a269284ce8adef
|
|
98
|
+
- Version: 17.1.3
|
|
99
|
+
- License: MIT
|
|
100
|
+
- Source files: none copied
|
|
101
|
+
- Reused symbols/patterns: none
|
|
102
|
+
- Local changes: none
|
|
103
|
+
|
|
104
104
|
## npm dependency inventory
|
|
105
105
|
|
|
106
|
-
The exact
|
|
106
|
+
The exact 419-entry package-lock inventory, versions, integrity values, dependency scope, and declared licenses is recorded in `manifests/sbom.json`.
|
|
107
107
|
|
|
108
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.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Persistent Agents (`task` and `hub`)
|
|
2
|
+
|
|
3
|
+
> **Availability:** The AILI-owned runtime is the public orchestration surface. The package registers `task` and `hub` and does not register a legacy `subagent` alias. Deterministic tests plus authorized real-provider, child-sandbox, and disposable external-workspace lifecycle probes are release-bound evidence.
|
|
4
|
+
|
|
5
|
+
## Agent selectors
|
|
6
|
+
|
|
7
|
+
The canonical catalog contains exactly 20 selectors:
|
|
8
|
+
|
|
9
|
+
- `general` (the default when `agent` is omitted)
|
|
10
|
+
- `aili.agent-evaluator`
|
|
11
|
+
- `aili.ai-regression-scout`
|
|
12
|
+
- `aili.browser-qa-runner`
|
|
13
|
+
- `aili.code-reviewer`
|
|
14
|
+
- `aili.code-scout`
|
|
15
|
+
- `aili.convergence-reviewer`
|
|
16
|
+
- `aili.doc-researcher`
|
|
17
|
+
- `aili.e2e-artifact-runner`
|
|
18
|
+
- `aili.implementer`
|
|
19
|
+
- `aili.opensource-sanitizer`
|
|
20
|
+
- `aili.plan-auditor`
|
|
21
|
+
- `aili.pr-test-analyzer`
|
|
22
|
+
- `aili.security-auditor`
|
|
23
|
+
- `aili.silent-failure-reviewer`
|
|
24
|
+
- `aili.spec-miner`
|
|
25
|
+
- `aili.test-coverage-reviewer`
|
|
26
|
+
- `aili.test-engineer`
|
|
27
|
+
- `aili.web-performance-auditor`
|
|
28
|
+
- `aili.web-researcher`
|
|
29
|
+
|
|
30
|
+
`aili.general`, `task` as a selector, and unknown selectors are invalid. The 19 specialized profiles keep their own complete role prompt and cannot spawn children. `general` may synchronously spawn an allowed non-self specialized Agent below the configured depth ceiling.
|
|
31
|
+
|
|
32
|
+
## Creating Agents with `task`
|
|
33
|
+
|
|
34
|
+
A flat request creates one new stable Agent:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"task": "Inspect the parser and report evidence",
|
|
39
|
+
"agent": "aili.code-scout",
|
|
40
|
+
"name": "ParserScout",
|
|
41
|
+
"async": false,
|
|
42
|
+
"tools": ["read", "grep"],
|
|
43
|
+
"workspace": "shared",
|
|
44
|
+
"writeScope": { "paths": [], "resources": [] }
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A batch validates every item before creating any Agent:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"context": "Use the accepted plan at plan/accepted.md",
|
|
53
|
+
"tasks": [
|
|
54
|
+
{ "task": "Inspect storage", "agent": "aili.code-scout" },
|
|
55
|
+
{ "task": "Implement the accepted fix", "agent": "aili.implementer", "workspace": "auto", "writeScope": { "paths": ["src/storage"], "resources": [] } }
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Per-item fields are `task`, `context`, `agent`, `name`, `model`, `async`, `tools`, `workspace`, `writeScope`, and `cwd`. Unknown fields fail validation. `blocking` is profile-only internal metadata, not a `task` field; callers must use `async:false` to wait synchronously.
|
|
61
|
+
|
|
62
|
+
Every item creates a new Agent. Reusing `name: "Scout"` allocates `Scout`, `Scout-2`, and so on; it never resumes the first Agent. Follow-up work uses `hub send` with the allocated Agent ID. Nested IDs are parent-prefixed, such as `general.code-scout`.
|
|
63
|
+
|
|
64
|
+
Top-level non-blocking roles default to async. `async:false`, an internally blocking role profile, and all child-to-grandchild calls are synchronous. One parent allows at most 32 active turns; excess jobs remain in durable FIFO order. AILI sets no Agent-turn wall-clock or assistant-request budget (`0`/unlimited), but provider watchdogs, tool timeouts, permissions, the 32-turn semaphore, process shutdown, and manual cancellation still apply. Background work does not survive the Pi process.
|
|
65
|
+
|
|
66
|
+
## Managing Agents with `hub`
|
|
67
|
+
|
|
68
|
+
`hub` actions are:
|
|
69
|
+
|
|
70
|
+
- `list` — active Agents (and optionally released disk-backed identities)
|
|
71
|
+
- `send` — running safe-boundary steer, idle new turn, or parked revive/new turn
|
|
72
|
+
- `wait` — bounded wait over owned job/message IDs
|
|
73
|
+
- `inbox` — peek or drain failed-live-handoff mail
|
|
74
|
+
- `output` / `history` — bounded disk reads
|
|
75
|
+
- `jobs` — owned job state
|
|
76
|
+
- `cancel` — hard-cancel a job or release an idle/parked identity without deleting history
|
|
77
|
+
- `model` — query or request model override operations
|
|
78
|
+
|
|
79
|
+
Only failed live handoff enters the durable mailbox. Each Agent keeps at most 100 messages; the 101st is rejected while the existing 100 remain. Successful messages have durable receipts for de-duplication.
|
|
80
|
+
|
|
81
|
+
Running, idle, parked, and aborted Agents never run two concurrent turns under one identity. An aborted Agent cannot revive. Process loss records a running turn as `interrupted`, a queued job as `unexecuted`, and never automatically replays either.
|
|
82
|
+
|
|
83
|
+
## Output, history, and retention
|
|
84
|
+
|
|
85
|
+
Complete raw output is stored at the parent-owned `<agent-id>.md`; the official Pi child conversation remains an independent Session JSONL. Tool results return at most 500,000 bytes and 5,000 lines, while parent completion previews are capped at 5,000 characters with explicit truncation metadata.
|
|
86
|
+
|
|
87
|
+
Use `agent://<agent-id>` and `history://<agent-id>` as stable references. `hub output/history` resolves them with `offset` and `limit`, including after an Agent is released.
|
|
88
|
+
|
|
89
|
+
Child history cannot be deleted independently. It follows the parent session. Forks start with an empty Agent registry and never copy/control old child artifacts. Confirmed AILI parent deletion can cascade its owned sidecar; official Pi 0.81.1 built-in Ctrl+D/archive has no sidecar hook, so doctor keeps that host gap visible and orphaned sidecars are preserved for reconciliation.
|
|
90
|
+
|
|
91
|
+
## Models
|
|
92
|
+
|
|
93
|
+
Each turn resolves in this order:
|
|
94
|
+
|
|
95
|
+
1. one-shot `task.model`
|
|
96
|
+
2. stable Agent instance override
|
|
97
|
+
3. trusted project role override
|
|
98
|
+
4. user-global role override
|
|
99
|
+
5. profile frontmatter model
|
|
100
|
+
6. official parent fallback
|
|
101
|
+
|
|
102
|
+
An explicit unknown, unavailable, unauthenticated, or incompatible model fails at its source layer and does not fall through. One-shot values never change configuration. Direct users can run `/aili-agent-model <global|project|instance> <selector|agent-id> <provider/model|clear> [thinking]`; model-facing persistent requests through `hub model` require a fresh interactive confirmation every time. Project model configuration is ignored and cannot be written before project trust is active.
|
|
103
|
+
|
|
104
|
+
## Workspaces and permissions
|
|
105
|
+
|
|
106
|
+
`workspace:auto` keeps disjoint known scopes shared and isolates known path overlap. Shared resources such as ports/databases cannot be isolated by a Git worktree and therefore conflict visibly. An undeclared scope defaults to shared with a best-effort diagnostic; observable second conflicting writes are blocked with isolated-retry guidance.
|
|
107
|
+
|
|
108
|
+
Isolation projects the current dirty tracked/untracked baseline into a disposable worktree, returns child-only patch/branch evidence, never auto-merges, and checks that the main workspace stayed unchanged. After cleanup, history/output remain readable but that Agent cannot revive.
|
|
109
|
+
|
|
110
|
+
Effective tools are always an intersection of parent-active tools, child-loadable definitions, role/capability ceilings, hard guards, and per-call narrowing. Child `task`/`hub` definitions are AILI-owned bridges, never reused parent coordinator definitions. In sandbox-required permission modes, child Bash reuses the parent-initialized `pi-permission-modes` SandboxManager with a child-cwd-specific filesystem profile; missing/degraded sandbox state and incompatible Git-worktree metadata deny Bash instead of falling back unsandboxed. Credential/auth/private-key material is denied before approval and excluded from messages/output/artifacts. Background asks suspend only that job and return to the parent UI; no UI, rejection, cancellation, shutdown, or bridge loss denies and settles the request.
|
|
111
|
+
|
|
112
|
+
## Legacy data
|
|
113
|
+
|
|
114
|
+
Legacy `.pi/agent/runs/`, existing Pi sessions, user configuration, and unrelated Agent sidecars are not migrated, reinterpreted, or deleted by the replacement runtime. Rollback preserves both legacy runs and new sidecars.
|
|
@@ -8,38 +8,71 @@
|
|
|
8
8
|
"sourceRevision": "7eb35f357ad489f5841ee10dac1e44549c1bdb76",
|
|
9
9
|
"verification": [
|
|
10
10
|
"vitest run tests/integration/extension-load.test.ts",
|
|
11
|
-
"vitest run tests/
|
|
11
|
+
"vitest run tests/integration/persistent-agent-host-seams.test.ts"
|
|
12
12
|
],
|
|
13
13
|
"artifacts": [
|
|
14
|
-
{
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
{
|
|
15
|
+
"path": "package-lock.json",
|
|
16
|
+
"sha256": "006a165d0b94cd75a0a8cfbcd54f588b5d87441699316fb128512748b5bfd857"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "tests/integration/extension-load.test.ts",
|
|
20
|
+
"sha256": "f2fdceb965f55bc481acc6457eee5cac9499dac08e8c3d17ca60efd07f13e96c"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "tests/integration/persistent-agent-host-seams.test.ts",
|
|
24
|
+
"sha256": "562ca1ce07e9d57861b48c210a8d10b1d8cbe3ffad7db6ac20ecb178f3beda36"
|
|
25
|
+
}
|
|
17
26
|
]
|
|
18
27
|
},
|
|
19
28
|
{
|
|
20
29
|
"capability": "subagent.dispatch",
|
|
21
30
|
"status": "adapted",
|
|
22
|
-
"owner": "src/runtime/
|
|
31
|
+
"owner": "src/runtime/persistent-agents/production.ts",
|
|
23
32
|
"sourceRevision": "7eb35f357ad489f5841ee10dac1e44549c1bdb76",
|
|
24
33
|
"verification": [
|
|
25
34
|
"npm run verify:roles",
|
|
26
|
-
"vitest run tests/unit/
|
|
27
|
-
"vitest run tests/integration/
|
|
28
|
-
"
|
|
29
|
-
"AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts"
|
|
35
|
+
"vitest run tests/unit/persistent-agent-task.test.ts tests/unit/persistent-agent-hub.test.ts tests/unit/persistent-agent-policy.test.ts",
|
|
36
|
+
"vitest run tests/integration/persistent-agent-runtime.test.ts tests/integration/package-runtime.test.ts",
|
|
37
|
+
"npm run test:doctor"
|
|
30
38
|
],
|
|
31
39
|
"artifacts": [
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
{
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
{
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
{
|
|
41
|
+
"path": "src/runtime/persistent-agents/production.ts",
|
|
42
|
+
"sha256": "312ac2a3cd32b298550caedc09d74d97d279ef9380a7e03ca32a424b70121ee1"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "src/runtime/persistent-agents/runtime.ts",
|
|
46
|
+
"sha256": "fbf90c6c4ba573b64bca98e775aeb036ba8f28788e3919d0beebe52c36ef58de"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"path": "src/runtime/persistent-agents/storage.ts",
|
|
50
|
+
"sha256": "cb33384792ca375fab62bf8529407c4e16e0e952fe7a28d0f1022f26ab7589d7"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"path": "src/runtime/persistent-agents/permission.ts",
|
|
54
|
+
"sha256": "48b30508491bca7fcd04d82b30d9dde1423499c2f02c014074c3f030c7ebd8ba"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"path": "tests/unit/persistent-agent-task.test.ts",
|
|
58
|
+
"sha256": "2562ff539e9f1cf756c2097beb9de09b0c28f33088c0f18fdbb91c978a898c3f"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"path": "tests/unit/persistent-agent-hub.test.ts",
|
|
62
|
+
"sha256": "8d90b71b4db40822b566d1807212ea20ed30d0a85706ee058d869736ccd0d306"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "tests/unit/persistent-agent-policy.test.ts",
|
|
66
|
+
"sha256": "1a397beeef79d4553461314020fc91655ff1bbc88d1f23b76c1391ab1e78b8f8"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"path": "tests/integration/persistent-agent-runtime.test.ts",
|
|
70
|
+
"sha256": "50c930a4b72e5697f0931f0fcd9ff1a17a22b8dcd8f7e3ad51c255b6e454a2f9"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"path": "tests/integration/package-runtime.test.ts",
|
|
74
|
+
"sha256": "bc3659d12c416343b1c3bafffd3365a77fb342e6b5ac5e4d3abd8aaf9d608eea"
|
|
75
|
+
}
|
|
43
76
|
]
|
|
44
77
|
}
|
|
45
78
|
]
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"pi-web-access",
|
|
7
7
|
"pi-quota-status",
|
|
8
8
|
"pi-permission-modes",
|
|
9
|
-
"
|
|
9
|
+
"aili-persistent-agents",
|
|
10
10
|
"optional-pack:web-research",
|
|
11
11
|
"optional-pack:browser-qa",
|
|
12
12
|
"optional-pack:artifact-runtime"
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"id": "subagent.dispatch",
|
|
37
|
-
"provider": "
|
|
38
|
-
"adapterOwner": "
|
|
37
|
+
"provider": "aili-persistent-agents",
|
|
38
|
+
"adapterOwner": "src/runtime/persistent-agents/production.ts (AILI-owned task/hub with parent-scoped Pi sessions)",
|
|
39
39
|
"platforms": ["linux"],
|
|
40
40
|
"class": "required",
|
|
41
41
|
"risk": { "secret": "possible", "network": "provider-dependent", "sideEffect": "delegated" },
|
|
@@ -1,40 +1,39 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion":
|
|
2
|
+
"schemaVersion": 3,
|
|
3
3
|
"platform": "linux",
|
|
4
4
|
"piVersion": "0.81.1",
|
|
5
|
-
"
|
|
5
|
+
"runtime": "aili-persistent-agents-v1",
|
|
6
6
|
"status": "passed",
|
|
7
|
-
"approvedScope": "On 2026-07-
|
|
7
|
+
"approvedScope": "On 2026-07-25 the user authorized the local workspace provider probes, disposable external Git lifecycle test, release-only Persistent Agent worktree, positive child sandbox implementation/verification, version 0.1.10, commit, push to origin/main, and npm publication. Earlier @agwab/pi-subagent evidence is not reused.",
|
|
8
8
|
"probes": [
|
|
9
9
|
{
|
|
10
|
-
"id": "
|
|
11
|
-
"command": "npx vitest run tests/unit/subagents.test.ts tests/integration/generic-subagent.test.ts",
|
|
10
|
+
"id": "provider-turn",
|
|
12
11
|
"status": "passed",
|
|
13
12
|
"changedFiles": 0,
|
|
14
|
-
"
|
|
15
|
-
"
|
|
13
|
+
"evidence": "artifacts/test-results/persistent-agent-framework/live-smoke-2026-07-25.json",
|
|
14
|
+
"reason": "Refreshed local-package runtime completed synchronous, persistent follow-up, and asynchronous official Pi AgentSession turns through openai-codex/gpt-5.6-sol."
|
|
16
15
|
},
|
|
17
16
|
{
|
|
18
|
-
"id": "
|
|
19
|
-
"command": "AILI_LIVE_GENERIC_SUBAGENT_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
17
|
+
"id": "child-sandbox",
|
|
20
18
|
"status": "passed",
|
|
21
19
|
"changedFiles": 0,
|
|
22
|
-
"
|
|
23
|
-
"
|
|
20
|
+
"reason": "The child Bash definition reused the parent-initialized pi-permission-modes SandboxManager with a child-cwd-specific profile. A Bubblewrap live fixture allowed an in-scope write and denied both an out-of-scope write and a configured denyRead path; unavailable/worktree-incompatible executors remain fail closed.",
|
|
21
|
+
"verification": "AILI_RUN_CHILD_SANDBOX_LIVE=1 npx vitest run tests/integration/persistent-agent-live-gated.test.ts"
|
|
24
22
|
},
|
|
25
23
|
{
|
|
26
|
-
"id": "
|
|
27
|
-
"command": "AILI_LIVE_CREDENTIAL_GUARD_PROBE=1 npx vitest run tests/integration/live-subagent.test.ts",
|
|
24
|
+
"id": "external-workspace-lifecycle",
|
|
28
25
|
"status": "passed",
|
|
29
26
|
"changedFiles": 0,
|
|
30
|
-
"
|
|
31
|
-
"
|
|
27
|
+
"evidence": "artifacts/test-results/persistent-agent-framework/live-smoke-2026-07-25.json",
|
|
28
|
+
"reason": "An authorized disposable OS-temp Git repository passed dirty-baseline projection, isolated branch/worktree, child-only patch, unchanged main HEAD/status, cleanup, and no-revive assertions."
|
|
32
29
|
}
|
|
33
30
|
],
|
|
34
31
|
"implementation": {
|
|
35
|
-
"src/runtime/
|
|
36
|
-
"
|
|
37
|
-
"
|
|
32
|
+
"src/runtime/persistent-agents/production.ts": "312ac2a3cd32b298550caedc09d74d97d279ef9380a7e03ca32a424b70121ee1",
|
|
33
|
+
"src/runtime/persistent-agents/runtime.ts": "fbf90c6c4ba573b64bca98e775aeb036ba8f28788e3919d0beebe52c36ef58de",
|
|
34
|
+
"src/runtime/persistent-agents/sandbox.ts": "8385b3f0ee85e29f52d294fc8c458157041fe93ac367a0b7af0cf44a845063ed",
|
|
35
|
+
"src/runtime/persistent-agents/permission.ts": "48b30508491bca7fcd04d82b30d9dde1423499c2f02c014074c3f030c7ebd8ba",
|
|
36
|
+
"src/runtime/persistent-agents/workspace.ts": "a39438c52708f0104ee9cb11d7fa4dcf8fe72db548decb2cc3f96995f94fa475"
|
|
38
37
|
},
|
|
39
|
-
"credentialHandling": "
|
|
38
|
+
"credentialHandling": "Deterministic permission/output/history tests enforce fail-closed credential denial and redaction. The live provider probe consumed existing Pi authentication through the official child AgentSession; no credential values were read, exported, or copied into the sanitized evidence artifact."
|
|
40
39
|
}
|
|
@@ -21,18 +21,6 @@
|
|
|
21
21
|
],
|
|
22
22
|
"verification": ["npm run verify:skills", "npm run verify:roles", "tests/unit/global-resources.test.ts"]
|
|
23
23
|
},
|
|
24
|
-
{
|
|
25
|
-
"name": "@agwab/pi-subagent",
|
|
26
|
-
"repository": "https://github.com/AgwaB/pi-subagent.git",
|
|
27
|
-
"revision": "daa7b83819116a62008ad17aa65fcd50fefbafd0",
|
|
28
|
-
"version": "0.4.8",
|
|
29
|
-
"license": "MIT",
|
|
30
|
-
"status": "dependency",
|
|
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
|
-
},
|
|
36
24
|
{
|
|
37
25
|
"name": "pi-permission-modes",
|
|
38
26
|
"repository": "https://github.com/wynainfo/pi-permission-modes.git",
|
|
@@ -115,6 +103,18 @@
|
|
|
115
103
|
"symbols": ["header", "matrix animation", "Zentui footer", "fixed editor compositor"],
|
|
116
104
|
"localChanges": ["registered as three additional Pi Package Extensions", "Rose header loads a package-owned renamed artwork asset without changing upstream identity", "Rose Shimmer, Rose Code Rain, and Zentui use the Rose-owned palette and gradient", "overflowing Matrix tracks remain deterministic across the complete terminal width with the 96-track budget, while each rain row receives a structural blank-row repair", "relative import specifiers and session lifecycle event are adapted for this package's NodeNext TypeScript contract"],
|
|
117
105
|
"verification": ["tests/unit/matrix.test.ts", "tests/unit/zentui-gradient.test.ts", "npm run typecheck", "npm test", "npm pack --dry-run --json"]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "Oh My Pi reference",
|
|
109
|
+
"repository": "https://github.com/can1357/oh-my-pi.git",
|
|
110
|
+
"revision": "59619623e1eeb7c290649eeaf3a269284ce8adef",
|
|
111
|
+
"version": "17.1.3",
|
|
112
|
+
"license": "MIT",
|
|
113
|
+
"status": "reference-only",
|
|
114
|
+
"sourceFiles": [],
|
|
115
|
+
"symbols": [],
|
|
116
|
+
"localChanges": [],
|
|
117
|
+
"verification": ["tests/integration/persistent-agent-runtime.test.ts", "tests/unit/persistent-agent-output-delivery.test.ts", "manual no-copy provenance inspection"]
|
|
118
118
|
}
|
|
119
119
|
]
|
|
120
120
|
}
|