From 9be5c7a5fea33b67b681f77144c383586ecdc8bb Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Fri, 17 Jul 2026 18:05:39 +0200 Subject: [PATCH] =?UTF-8?q?docs(harness):=20#820=20single-deployment=20RFC?= =?UTF-8?q?=20run=20record=20=E2=80=94=20rev=2010=20design=20+=209-cycle?= =?UTF-8?q?=20adversarial=20eval=20trail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seed/RFC harness run rfc-single-deployment--orchestrator (Fable 5 high generator, Sol-max adversarial PLAN-EVAL in 9 separate Codex sessions). Contents: - research.md: eis-chat#150 POC forensics @ aeaf2df (via public GitHub API), gap analysis G1-G8, origin/main re-baseline, deployment-debt reconciliation - plan.md rev 10: the RFC design — PM-first Tier-4 split, deploy-core installer with journaled operation state machines, one snapshot-update mechanism incl. Windows apply + crash-recoverable boot composition, two-mode composition contract, 22-draft dependency-ordered board, owner forks OF-A..OF-K - plan-eval-cycle{1..9}.md: full verdict trail (final: 6/8 plan-gate boxes PASS incl. Decisions-locked); escalation.md; closure.md; corpus/ evidence - Rev 10 folds cycle-9's residual: public/internal classification for the PM-5 RuntimeCommandSpec additions (public), PM-15 renderer knobs (internal, re-decided at PM-20), SD-1 host-side surface (internal; public = #451/SD-6) No board mutations were made by this run (evaluator-audited every cycle); the #820 RFC comment stays gated on a PASS from the owner-launched cycle-10 eval (recipe in context-pack.md). Refs #820. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_016wV13zTE9bz2Yf1iR762qZ --- .llm/2026-07-17-rfc-single-deployment-run.md | 35 + .../closure.md | 68 + .../context-pack.md | 76 + .../corpus/ec-135-comments.json | 1 + .../corpus/ec-135-issue.json | 90 + .../corpus/ec-136-comments.json | 1 + .../corpus/ec-136-issue.json | 90 + .../corpus/ec-137-comments.json | 1 + .../corpus/ec-137-issue.json | 90 + .../corpus/ec-147-comments.json | 1 + .../corpus/ec-147-issue.json | 90 + .../corpus/ec-149-comments.json | 1 + .../corpus/ec-149-issue.json | 147 + .../corpus/ec-pr150-commits.json | 548 + .../corpus/ec-pr150-files.json | 230 + .../corpus/ec-pr150-issue-comments.json | 1 + .../corpus/ec-pr150-review-comments.json | 1 + .../corpus/ec-pr150.json | 371 + .../corpus/ec-repo.json | 124 + .../corpus/ec-tree-aeaf2df.json | 11758 ++++++++++++++++ .../apps__dashboard__lib__desktop-chrome.ts | 75 + ..._dashboard__lib__windows-singleton.test.ts | 66 + ...apps__dashboard__lib__windows-singleton.ts | 389 + .../aspire__PROPOSED-desktop-resource.md | 122 + .../corpus/files/docs__DESKTOP-SHELL.md | 439 + .../resources__deno-desktop__auto_update.md | 245 + .../resources__deno-desktop__distribution.md | 265 + ...s-singleton__assets__aspire-dashboard.json | 13 + .../scripts__windows-singleton__build.ts | 193 + ...windows-singleton__entries__workers-api.ts | 4 + ...ts__windows-singleton__entries__workers.ts | 21 + .../corpus/md/board-core.md | 335 + .../corpus/md/board-pm-subissues.md | 971 ++ .../corpus/md/board-search.md | 94 + .../corpus/md/ec-fix-lineage.md | 161 + .../corpus/md/ec-pr150.md | 156 + .../corpus/md/ec-tree.md | 1260 ++ .../corpus/ns-327.json | 175 + .../corpus/ns-400.json | 193 + .../corpus/ns-510-epic.json | 212 + .../corpus/ns-820-comments.json | 1 + .../corpus/ns-820-issue.json | 148 + .../corpus/ns-pm-512-545.json | 5833 ++++++++ .../corpus/ns-search-single-runtime.json | 10665 ++++++++++++++ .../drift.md | 109 + .../escalation.md | 75 + .../kickoff.md | 29 + .../orchestrator-launch.log | 0 .../plan-eval-brief.md | 206 + .../plan-eval-cycle1.md | 136 + .../plan-eval-cycle2.md | 167 + .../plan-eval-cycle3.md | 143 + .../plan-eval-cycle4.md | 161 + .../plan-eval-cycle5.md | 155 + .../plan-eval-cycle6.md | 193 + .../plan-eval-cycle7.md | 166 + .../plan-eval-cycle8.md | 173 + .../plan-eval-cycle9.md | 146 + .../plan-eval.md | 146 + .../plan.md | 745 + .../research.md | 351 + .../supervisor.md | 55 + .../worklog.md | 181 + 63 files changed, 39097 insertions(+) create mode 100644 .llm/2026-07-17-rfc-single-deployment-run.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/closure.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/context-pack.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-commits.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-files.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-issue-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-review-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-repo.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ec-tree-aeaf2df.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__desktop-chrome.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.test.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/aspire__PROPOSED-desktop-resource.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/docs__DESKTOP-SHELL.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__auto_update.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__distribution.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__assets__aspire-dashboard.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__build.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers-api.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers.ts create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-core.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-pm-subissues.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-search.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-fix-lineage.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-pr150.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-tree.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-327.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-400.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-510-epic.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-comments.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-issue.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-pm-512-545.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/corpus/ns-search-single-runtime.json create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/drift.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/escalation.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/kickoff.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/orchestrator-launch.log create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-brief.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle1.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle2.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle3.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle4.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle5.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle6.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle7.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle8.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval-cycle9.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan-eval.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/plan.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/research.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/supervisor.md create mode 100644 .llm/runs/rfc-single-deployment--orchestrator/worklog.md diff --git a/.llm/2026-07-17-rfc-single-deployment-run.md b/.llm/2026-07-17-rfc-single-deployment-run.md new file mode 100644 index 000000000..5d3ba6990 --- /dev/null +++ b/.llm/2026-07-17-rfc-single-deployment-run.md @@ -0,0 +1,35 @@ +# Session record — RFC single deployment (issue #820) orchestrator run + +Date 2026-07-17 · run `.llm/runs/rfc-single-deployment--orchestrator/` · generator Claude Fable 5 +· high (session `7f1fada7-805f-46cb-8ac4-5eb201bdc105`) · evaluator Codex GPT-5.6 Sol · max +(9 separate daemon threads). + +## What happened + +Seed/RFC harness run on the #820 charter: eis-chat POC forensics (@ `aeaf2df`, via authenticated +GitHub API after the local clone was sandbox-blocked), gap analysis G1–G8 against the PM/deploy +board, and nine revisions of the RFC design under nine adversarial Sol·max PLAN-EVAL cycles. The +owner authorized loop continuation after the standard two-failure escalation, then bounded the +loop at cycle 9. Final: **FAIL_PLAN with 6/8 plan-gate boxes PASS** (incl. Decisions-locked); +run closed as a design record (`closure.md`). No #820 comment (PASS-gated), zero board mutations +(evaluator-audited each cycle). + +## Lessons worth keeping + +- **The adversarial loop converges but is expensive**: each Sol·max cycle re-audited prior fixes + for *real closure* and expanded into genuinely deeper systems territory (junction atomicity → + journal durability → privilege separation → boot-order composability). Design-heavy RFCs + should budget 3+ cycles or pre-decompose into evaluable chunks. +- **Artifact currentness is a first-class gate**: three cycles flagged stale + worklog/context-pack/supervisor metadata as blocking. Reconcile resumable artifacts in the same + edit batch as the plan rev, every time. +- **Self-containment rule**: never write "unchanged from rev N" after overwriting rev N — the + candidate must stand alone (cycle-3 regression). +- **Launcher fallback recipe**: `agentic:launch-codex-slice` is Windows-host/implementation-slice + shaped; from WSL-native sessions, the wrapper's inner client + (`.llm/tools/agentic/codex/app-server-message-cli.ts --model gpt-5.6-sol --effort max --cwd … + --message "$(brief)"`) launches the same daemon-attached thread (drift entry 4 pattern; + `.llm/tmp/rfc820/launch-eval.ts`). +- **Evidence-honesty pays**: the evaluator repeatedly accepted designs only when grounded in + tree/corpus citations (e.g. rejecting Servy tree-kill and the runtime `AspireResource` as + unsupported) — write plans from the code, not from plausibility. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/closure.md b/.llm/runs/rfc-single-deployment--orchestrator/closure.md new file mode 100644 index 000000000..1faee2fe7 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/closure.md @@ -0,0 +1,68 @@ +# Closure — RFC single deployment (issue #820) — design-record close per owner wrap-up directive + +> **Post-closure amendment (2026-07-17, same day):** the owner re-opened the run for exactly the +> residual revision ("proceed with the revision I'll take care of the final eval myself"). +> **plan.md rev 10** folds the surface classifications (residual 1 below) into §I.2/§E.2/§H; the +> cycle-10 eval is **owner-launched** (recipe in `context-pack.md` § "How the owner runs cycle +> 10"). The generator launches no further cycles; the #820 post + `drafts/` remain PASS-gated. +> This document otherwise stands as the cycle-1..9 record. + +Run `rfc-single-deployment--orchestrator` · closed 2026-07-17 · generator Fable 5 · high, session +`7f1fada7-805f-46cb-8ac4-5eb201bdc105`. Owner directives: loop continuation authorized after the +cycle-2 escalation; loop bounded at cycle 9 ("one more pass then done"). + +## Outcome + +**9 adversarial PLAN-EVAL cycles (Sol·max, all separate sessions), monotonically converging; the +final verdict is FAIL_PLAN with 6 of 8 plan-gate boxes PASS** — including, for the first time, +**"Decisions locked"**, plus board adjustments, risk register, gate set, deferred scope, and the +research content itself. Per the kickoff's hard gate, the RFC was **NOT posted to #820** and the +`drafts/` were **not written** (both were PASS-gated). **Zero board mutations occurred at any +point** — evaluator-audited in every cycle. + +## What stands (evaluator-confirmed sound across the final cycles) + +- **PM-first sequencing** (§A): the Tier-4 split keeping the PM-independent single-runtime lane + (#451/#453/#454/#455 + #452/#456a/#457a) complete in beta.11 while singleton-graph work + consumes the beta.12 PM engine in beta.13 — repeatedly endorsed as "sound, avoids + over-blocking". +- **Aspire-stack citizenship** (§B.4): generator-emitted `PackagingModel` → pure manifest + compiler → the canonical `deploy build` verb + a named TS-AppHost publish pipeline step, all in + SD-2; PM-20 stays pure extraction. +- **The installer** (§B): `DeployTargetPort` adapters + `MaintenancePort` (no rival axis), the + §B.1a operation state machines (incl. deterministic four-state purge + §B.1b canonical + machine-state root), the §B.3 identity/privilege matrix with updater least-privilege grants, + and the §B.2a install-graph digest rule. +- **The update lifecycle** (§C): one journaled release-snapshot mechanism from beta.11 (real + Windows apply; `Deno.autoUpdate` never the authority), crash-recoverable journal with migration + barriers, `maintenance(rollback-failed)` terminal, replay high-water, pinned trust, and the + §C.3b three-phase ownership that resolves boot-recovery composition. +- **Composition** (§D): both modes kept; typed manifests + the SD-7 cross-mode conformance suite + as the anti-fork enforcement; transport seam scoped to transport only. +- **The draft board** (§E): 22 bounded, dependency-ordered drafts; G1–G8 exactly-one ownership; + owner forks OF-A..OF-K. + +## Residuals (the cycle-9 items — small) + +1. **Public-vs-internal classification for three surfaces** (the only real design residual): + PM-5's `RuntimeCommandSpec` additions (`clearEnv` + strip list), PM-15's renderer knobs, and + SD-1's host-side supervisor/broker/proxy/Job-Object types. *Generator recommendation (non- + normative, unevaluated):* PM-5 additions = public contract extension (rubric at PM-5); PM-15 + knobs = internal render config, classification re-decided at the PM-20 move; SD-1 host types = + internal (only #451/SD-6 client surfaces are public). +2. **Resume-artifact metadata lag** — reconciled as part of this closure (context-pack, + supervisor, worklog, drift now agree on the final state). + +## Path to done (for a future session, if the owner wants the RFC posted) + +One small rev folding residual 1 into §I.2/§E.2 + one PLAN-EVAL cycle would plausibly PASS; then +execute kickoff deliverable 5 (the #820 comment + `drafts/` files) and stage-H ratification of +OF-A..OF-K. Resume via `context-pack.md`; the eval launch recipe is `.llm/tmp/rfc820/ +launch-eval.ts` + `plan-eval-brief.md` (route: Sol·max through the agentic app-server client). + +## Record map + +`plan.md` rev 9 (the RFC) · `research.md` (forensics + gaps + re-baseline + debt) · +`plan-eval-cycle{1..9}.md` (verdict trail) · `escalation.md` (cycle-2 loop-limit stop) · +`supervisor.md` / `worklog.md` / `context-pack.md` / `drift.md` (6 entries) · `corpus/` +(evidence) · session record `.llm/2026-07-17-rfc-single-deployment-run.md`. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/context-pack.md b/.llm/runs/rfc-single-deployment--orchestrator/context-pack.md new file mode 100644 index 000000000..23777d0ae --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/context-pack.md @@ -0,0 +1,76 @@ +# Context Pack: RFC single deployment (issue #820) — rev 10 ready; final eval OWNER-RUN + +## Run Metadata + +| Field | Value | +| -------------- | -------------------------------------------- | +| Run ID | `rfc-single-deployment--orchestrator` | +| Branch | `feat/beta10-cli-integration` @ `f391190f` (re-baselined vs `origin/main` @ `47cc2fa9`) | +| Current phase | **rev 10 staged; cycle-10 PLAN-EVAL pending, launched BY THE OWNER** (generator launches no further cycles per the 2026-07-17 owner instruction) | +| Archetype | N/A — seed/RFC run (downstream drafts span Archetypes 2/3/4/5/6/7 + all three overlays) | +| Session | generator `7f1fada7-805f-46cb-8ac4-5eb201bdc105` (Fable 5 · high) | +| Evaluator route | Codex · GPT-5.6 Sol · max via the agentic app-server client (drift entry 4); threads c1 `019f6fa1…` c2 `019f6fb5…` c3 `019f6fd5…` c4 `019f6feb…` c5 `019f7006…` c6 `019f701c…` c7 `019f7034…` c8 `019f7052…` c9 `019f7078…` | + +## Current State (history in `closure.md`; this file is post-re-open) + +plan.md **rev 10** is the staged candidate: after the cycle-9 verdict (FAIL_PLAN with **6/8 +boxes PASS**, incl. Decisions-locked) and the design-record closure, the owner re-opened with +"proceed with the revision, I'll take care of the final eval myself". Rev 10 folds cycle 9's +only design residual — the surface classifications (PM-5 additions PUBLIC; PM-15 knobs INTERNAL +@ beta.12, re-decided at PM-20; SD-1 host surface INTERNAL, public = #451/SD-6) — into §I.2/§E.2 +with §H dispositions. The RFC remains **unposted** (PASS-gated) and **zero board mutations have +ever occurred** (evaluator-audited cycles 1–9). Owner authorizations on record: loop +continuation (drift 5), cycle-9 bound (drift 6), owner-run final eval (drift 7). + +## How the owner runs cycle 10 + +From the repo root: + +``` +deno run --no-lock --allow-read --allow-run --allow-env .llm/tmp/rfc820/launch-eval.ts +``` + +It sends `plan-eval-brief.md` (already carrying the cycle-10 note) to a fresh Codex Sol·max +thread via the agentic app-server client; the verdict overwrites `plan-eval.md` (cycles 1–9 are +archived as `plan-eval-cycle{1..9}.md`). On PASS: execute kickoff deliverable 5 — the #820 RFC +comment (public-repo hygiene: eis-chat PR/issue numbers OK, no internal process details) + +`drafts/` files (NOT filed) — then stage-H ratification of OF-A..OF-K. + +## Key Decisions (rev 9 — evaluator-PASSed as locked) + +| Decision | Source | +| --- | --- | +| PM-first Tier-4 split; single-runtime lane complete in beta.11; graph mode behind PM in beta.13 | plan §A.1 | +| PM bar PM-1..14 (+15/16/18 per-machine); PM-A/PM-B separate drafts; #543 stays beta.12 | plan §A.2/A.3 | +| Universal containment: harness+guardian pipe-EOF (PM-B core) + Job Objects; per-machine = PM-15 `KillMode` + Windows Job-Object wrapper (OF-K); SD-H Linux backstop @ stable (OF-H) | plan §A.3 | +| Installer = `DeployTargetPort` adapters + `MaintenancePort`; §B.1a op state machines; four-state deterministic purge; §B.1b canonical machine-state root | plan §B.1 | +| Schemas CLI-internal through beta.12 → SD-2 moves+publishes; pinned trust key; sequence high-water + explicit epoch reset (OF-J); `minBootstrapVersion` | plan §B.2 | +| Install-graph digest match-or-refuse (OF-I) | plan §B.2a | +| Identity/privilege matrix; updater sole writer; per-user read tokens via OS-auth broker | plan §B.3 | +| Per-user dynamic ports + `/_svc` proxy w/ per-launch token; per-machine port-reservation registry | plan §B.3a | +| `PackagingModel` (CLI-internal) + build verb + named Aspire publish step, all SD-2 | plan §B.4 | +| One journaled update mechanism incl. Windows apply (L0.7); stable bootstraps + journal-first resolution; §C.3b three-phase ownership + single confirmer | plan §C | +| Both composition modes kept; manifests + SD-7 conformance suite enforce | plan §D | +| Owner forks **OF-A..OF-K** resolve at stage-H filing | plan §F | + +## Gates + +| Gate | Status | Evidence | +| --- | --- | --- | +| PLAN-EVAL c1–c9 | FAIL_PLAN ×9; c9 = 6/8 boxes PASS | `plan-eval-cycle{1..9}.md` | +| PLAN-EVAL c10 (gate of record) | **PENDING — owner-launched** on rev 10 | recipe above; verdict → `plan-eval.md` | + +## Open Questions + +- OF-A..OF-K (plan §F, 11 forks) — stage-H owner forks. +- (cycle-9 residual 1 — surface classification — resolved in rev 10 §I.2/§E.2/§H.) + +## Drift and Debt + +- Drift: **7 entries** (effort raises; no dedicated PR; sandbox-blocked clone → API corpus; + evaluator via wrapper's inner client; owner-authorized loop continuation; owner wrap-up bound; + owner-run final eval). Debt: none created. + +## Commits + +- None — kickoff scoped this run to run-dir artifacts + a post-PASS #820 comment (never earned). diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-issue.json new file mode 100644 index 000000000..b097cd383 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-135-issue.json @@ -0,0 +1,90 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135", + "repository_url": "https://api.github.com/repos/rickylabs/eis-chat", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/comments", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/events", + "html_url": "https://github.com/rickylabs/eis-chat/pull/135", + "id": 4802560256, + "node_id": "PR_kwDOTIdMCM7tiekE", + "number": 135, + "title": "fix(kb): shared Garnet queue fixes multi-process split-brain Deno KV (#133) + desktop perms (#118)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-07-03T10:08:50Z", + "updated_at": "2026-07-03T10:48:14Z", + "closed_at": "2026-07-03T10:43:13Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/135", + "html_url": "https://github.com/rickylabs/eis-chat/pull/135", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/135.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/135.patch", + "merged_at": "2026-07-03T10:43:13Z" + }, + "body": "Closes the mechanism half of #133. Live-verified via the Aspire CLI/MCP.\n\n## Problem\nThe Aspire generator no-ops the `DenoKv` cache engine, so in **multi-process** mode workers-api (enqueue) and the workers processor (listen) each open their OWN per-process Deno KV → the `embed-document` job is enqueued in one KV and listened on another, so it never runs (KB doc pins `pending`). This is the real root cause of the stalled KB ingestion (deeper than the previously-suspected release blocker).\n\n## Fix (Docker-less Windows bare metal)\nShared Deno KV Connect (`denokv`) needs Docker, which this host lacks, so run **Garnet** (RESP-compatible, .NET-native) as an Aspire **executable** and point the workers at it. The SDK's `@netscript/kv/redis` + `@netscript/queue` `RedisAdapter` then give a real cross-process queue (`LPUSH`/`BRPOPLPUSH`).\n\n- `aspire/.helpers/register-infrastructure.mts` — `addExecutable('garnet','garnet-server', …)` (hand-edit, keep on regen).\n- `aspire/.helpers/register-plugins.mts` + `register-background.mts` — inject `GARNET_URI`/`REDIS_URI`/`CACHE_PROVIDER=garnet` + `waitFor(garnet)` into workers-api + the workers processor.\n- `workers/runtime.ts` — `import jsr:@netscript/kv/redis` to self-register the KV adapter before `getKv()`.\n- `apps/dashboard/deno.json` — `--allow-all` on `desktop:dev`/`desktop:build` so the deno-desktop runtime can read env (was crashing on `PORT`). (Partial #118; full desktop render is a follow-up PR.)\n\n## Verification (Aspire CLI/MCP only — shared stack never hacked)\ngarnet Running/Healthy; workers-api + workers both `WaitFor(garnet)` + carry `GARNET_URI`; a job triggered on **workers-api** was **executed by the separate workers processor** (cross-process delivery over Garnet). See #133 for logs.\n\n## Requires / upstream\n`dotnet tool install -g garnet-server`. Proper generator fix + self-provisioning: rickylabs/netscript#372 (Garnet executable) + #371 (Deno KV Connect).\n\n## Reconciliation\nOverlaps #134 (NetScript beta.1 bump) on `register-plugins.mts` (different hunks) and `deno.lock`, and this branch's `workers/runtime.ts` redis import is pinned to `alpha.19`. To be rebased onto master after #134 merges, with the redis import bumped to `beta.1`.", + "closed_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/135/timeline", + "performed_via_github_app": null, + "state_reason": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-issue.json new file mode 100644 index 000000000..689b92ef4 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-136-issue.json @@ -0,0 +1,90 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136", + "repository_url": "https://api.github.com/repos/rickylabs/eis-chat", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136/comments", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136/events", + "html_url": "https://github.com/rickylabs/eis-chat/pull/136", + "id": 4802565596, + "node_id": "PR_kwDOTIdMCM7tifts", + "number": 136, + "title": "fix(desktop): render the deno desktop window (blank WebView2)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-07-03T10:09:37Z", + "updated_at": "2026-07-03T10:48:15Z", + "closed_at": "2026-07-03T10:46:54Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/136", + "html_url": "https://github.com/rickylabs/eis-chat/pull/136", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/136.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/136.patch", + "merged_at": "2026-07-03T10:46:54Z" + }, + "body": "## Problem\nThe `deno desktop` app opens a window frame but the webview surface is BLANK.\n\n**Verified diagnosis so far:** the internal Fresh server is fine (returns the full 23KB eis-chat HTML after the `--allow-all` permission fix on the base branch). WebView2 Runtime v149 is installed. The remaining failure is `Failed to create WebView2 environment` at webview creation time.\n\n> **Stacked on `fix/garnet-kb-queue`** (contains the prerequisite desktop `--allow-all` fix + Garnet wiring). Diff includes that branch until it merges.\n\n## Plan\n- **Phase A - standalone:** get `deno task desktop:dev` (apps/dashboard) to actually render in an interactive session. Investigate WebView2 environment creation (user-data folder, desktop config block, launch context).\n- **Phase B - within Aspire:** fix the desktop resource PORT collision with `dashboard` (:8010) in `aspire/.helpers/register-apps.mts`, and determine the launch mode (interactive `aspire run` vs detached `aspire start`) that allows WebView2 env creation.\n\n## Status\n- [ ] Phase A: standalone render + evidence\n- [ ] Phase B: Aspire resource render + evidence\n- [ ] Root-cause writeup\n\nGenerated with [Claude Code](https://claude.com/claude-code)", + "closed_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/136/timeline", + "performed_via_github_app": null, + "state_reason": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-issue.json new file mode 100644 index 000000000..81d2b6bdd --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-137-issue.json @@ -0,0 +1,90 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137", + "repository_url": "https://api.github.com/repos/rickylabs/eis-chat", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137/comments", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137/events", + "html_url": "https://github.com/rickylabs/eis-chat/pull/137", + "id": 4806823462, + "node_id": "PR_kwDOTIdMCM7twRSH", + "number": 137, + "title": "fix(desktop): stop CEF bundle crashing at launch on MCP stdio require('./windows.js')", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-07-03T23:16:38Z", + "updated_at": "2026-07-03T23:18:18Z", + "closed_at": "2026-07-03T23:18:03Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/137", + "html_url": "https://github.com/rickylabs/eis-chat/pull/137", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/137.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/137.patch", + "merged_at": "2026-07-03T23:18:03Z" + }, + "body": "## Problem\nThe `deno desktop` CEF window died at launch with:\n```\nError: Cannot find module './windows.js'\n ...\\_fresh\\server\\mcp.mjs:18635 code: MODULE_NOT_FOUND\n```\n`@tanstack/ai-mcp/stdio` pulls in `cross-spawn -> which -> isexe`, whose top-level `require(\"./windows.js\")` the desktop bundler flattens to **eager module-init** but never emits the sibling file. So merely LOADING the embedded Fresh server bundle crashed the window — before any chat/tool call.\n\n## Fix\n1. **`lib/mcp.ts`** — lazy `await import('@tanstack/ai-mcp/stdio')` inside the stdio branch of `transportFor`, replacing the static top-level import. Deno code-splits the isexe chain into a deferred `_fresh/server/stdio.mjs` chunk that only loads when a real stdio child is actually spawned (bare `deno task dev`), keeping it out of the eager module graph the desktop bundle evaluates on load. `transportFor`/`mcpTransportFor` become async; `mcpPool` + `mcp-status.ts` updated to await.\n2. **`aspire/.helpers/register-apps.mts`** — the desktop resource now sets `LEGACY_ARCHEO_MCP_URL` / `EXCALIDRAW_MCP_URL` (the envs `mcp.ts` actually reads), mirroring the dashboard block. Previously it set only the `services__...` discovery vars, so under Aspire the window fell into the broken stdio path instead of the HTTP transport.\n\n## Verification\nRebuilt `_fresh`: `mcp.mjs` (eager, loaded at launch) now has **0** `windows.js` references (was the crash site); the reference lives only in the deferred `stdio.mjs` chunk, which the Aspire path never imports.\n\n## Follow-up (not in this PR)\nSwitch the desktop resource from build-mode (`desktop:predev`) to a true dev/watch flow for easier debugging — tracked separately.\n\nGenerated with [Claude Code](https://claude.com/claude-code)", + "closed_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/137/timeline", + "performed_via_github_app": null, + "state_reason": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-issue.json new file mode 100644 index 000000000..b6842bc7c --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-147-issue.json @@ -0,0 +1,90 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147", + "repository_url": "https://api.github.com/repos/rickylabs/eis-chat", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147/comments", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147/events", + "html_url": "https://github.com/rickylabs/eis-chat/pull/147", + "id": 4881676624, + "node_id": "PR_kwDOTIdMCM7xeKaq", + "number": 147, + "title": "Add local model and vision provider support", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-07-14T09:23:07Z", + "updated_at": "2026-07-14T09:24:09Z", + "closed_at": "2026-07-14T09:24:04Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/147", + "html_url": "https://github.com/rickylabs/eis-chat/pull/147", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/147.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/147.patch", + "merged_at": "2026-07-14T09:24:04Z" + }, + "body": "## Summary\n\n- add configurable local and cloud OCR providers, including offline Tesseract support\n- add local embedding and model discovery configuration\n- move OpenAI chat to the native Responses adapter and update provider reasoning/output options\n- extend contracts, workers, settings UI, documentation, and tests\n\n## Validation\n\n- `deno task check`\n- `deno task test` (135 passed)", + "closed_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/147/timeline", + "performed_via_github_app": null, + "state_reason": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-issue.json new file mode 100644 index 000000000..d25b55734 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-149-issue.json @@ -0,0 +1,147 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149", + "repository_url": "https://api.github.com/repos/rickylabs/eis-chat", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149/comments", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149/events", + "html_url": "https://github.com/rickylabs/eis-chat/pull/149", + "id": 4893118848, + "node_id": "PR_kwDOTIdMCM7yDXxM", + "number": 149, + "title": "Harden local inference, dependency catalogs, and desktop runtime", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 0, + "created_at": "2026-07-15T13:52:16Z", + "updated_at": "2026-07-15T13:55:48Z", + "closed_at": "2026-07-15T13:55:48Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/149", + "html_url": "https://github.com/rickylabs/eis-chat/pull/149", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/149.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/149.patch", + "merged_at": "2026-07-15T13:55:48Z" + }, + "body": "## Summary\n\nThis change set completes the local and air-gapped inference work and folds in the related dependency, rendering, desktop, and repository cleanup discovered during validation.\n\n### Local OCR and embeddings\n\n- supports offline screenshot OCR through Tesseract.js and configurable local vision providers\n- supports keyless OpenAI-compatible local embedding endpoints such as LM Studio\n- isolates the embedding query cache by provider/model configuration\n- allows embeddings to be explicitly disabled without issuing network requests\n- avoids sending air-gapped sessions to OpenAI when a local provider is selected\n\n### Vector compatibility\n\n- prevents Turso cosine-distance failures after changing embedding models\n- filters knowledge chunks, memories, and skill vectors by query-vector dimension\n- preserves keyword-only degradation when no compatible vector is available\n- adds regression coverage for mixed-dimension data in all three stores\n\n### Chat, screenshots, and analytics\n\n- serves persisted screenshot attachments back through the dashboard\n- renders attachment previews with an accessible native-dialog lightbox\n- improves attachment ingestion sequencing so chat messages reference persisted documents\n- adds estimated output cost grouped by model and serving router to usage analytics\n- retains OpenAI Responses API behavior for reasoning models with function tools\n\n### Dependency and schema stability\n\n- moves npm dependency ownership into the root package catalog with member package manifests\n- updates and aligns TanStack AI adapters, Prisma, Preact, Tailwind, and supporting packages\n- anchors the Zod 4 peer while leaving dependencies that legitimately require Zod 3 isolated\n- replaces affected TanStack tool schemas with raw JSON Schema at the provider boundary\n- pins and aliases Preact Signals to one SSR module identity, fixing the server-side `Cycle detected` failure\n\n### Desktop and Aspire\n\n- uses CEF for reliable Windows rendering\n- keeps Fresh/Vite HMR enabled for desktop development\n- merges Vite output and disables terminal decoration so Deno Desktop can discover the dev-server URL\n- removes the unnecessary production prebuild before desktop HMR\n- wires the Aspire desktop resource directly to `desktop:dev`\n\n### Cleanup\n\n- removes stale design-sync previews and obsolete scaffold coverage\n- updates lockfiles and Deno workspace configuration for Deno 2.9\n- includes the remaining UI polish and package-manifest cleanup from the working tree\n\n## Root causes addressed\n\n1. OCR and embedding selection were independent; choosing offline OCR did not stop embeddings from using OpenAI.\n2. Turso vector functions reject comparisons between vectors with different dimensions.\n3. TanStack's Standard Schema converter observed an incompatible Zod runtime at the tool boundary.\n4. Fresh/NetScript and the app loaded Preact Signals under different Vite module identities, installing nested render hooks.\n5. Deno Desktop 2.9.2 scans only child stdout for an undecorated Vite `Local:` URL.\n6. The generated Aspire helper still invoked the removed `desktop:predev` task.\n\n## Validation\n\n- `deno check`\n- dashboard production Vite build (client and SSR)\n- 34 focused tests covering embeddings, vector stores, skills, OpenAI, OpenRouter, and the chat route\n- Aspire desktop resource reports `Running / Healthy`\n- Fresh HMR handshake succeeds at `http://localhost:5173/`\n- CEF runtime loads and starts successfully\n", + "closed_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/149/timeline", + "performed_via_github_app": { + "id": 1144995, + "client_id": "Iv23liVemv8A9if9v0F2", + "slug": "chatgpt-codex-connector", + "node_id": "A_kwHOAOQ6Gs4AEXij", + "owner": { + "login": "openai", + "id": 14957082, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjE0OTU3MDgy", + "avatar_url": "https://avatars.githubusercontent.com/u/14957082?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/openai", + "html_url": "https://github.com/openai", + "followers_url": "https://api.github.com/users/openai/followers", + "following_url": "https://api.github.com/users/openai/following{/other_user}", + "gists_url": "https://api.github.com/users/openai/gists{/gist_id}", + "starred_url": "https://api.github.com/users/openai/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/openai/subscriptions", + "organizations_url": "https://api.github.com/users/openai/orgs", + "repos_url": "https://api.github.com/users/openai/repos", + "events_url": "https://api.github.com/users/openai/events{/privacy}", + "received_events_url": "https://api.github.com/users/openai/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "name": "ChatGPT Codex Connector", + "description": "Bring ChatGPT and Codex to your GitHub repositories.", + "external_url": "https://www.chatgpt.com", + "html_url": "https://github.com/apps/chatgpt-codex-connector", + "created_at": "2025-02-14T01:37:05Z", + "updated_at": "2026-04-20T16:37:15Z", + "permissions": { + "actions": "write", + "checks": "read", + "contents": "write", + "emails": "read", + "issues": "write", + "metadata": "read", + "pull_requests": "write", + "statuses": "read", + "workflows": "write" + }, + "events": [ + "check_run", + "check_suite", + "commit_comment", + "issues", + "issue_comment", + "pull_request", + "pull_request_review", + "pull_request_review_comment", + "pull_request_review_thread", + "repository", + "status", + "sub_issues" + ] + }, + "state_reason": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-commits.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-commits.json new file mode 100644 index 000000000..c24cb7b91 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-commits.json @@ -0,0 +1,548 @@ +[ + { + "sha": "faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "node_id": "C_kwDOTIdMCNoAKGZhZjg1ZTliYTNkZjFhMTY2YWJlMjU4NWM4NjczOWEzYWE1Yzk4NjY", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T16:11:11Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T16:11:11Z" + }, + "message": "prototype windows singleton desktop deployment", + "tree": { + "sha": "561f841b9f4a2609b0cc24eee12a49eaf6376442", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/561f841b9f4a2609b0cc24eee12a49eaf6376442" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "html_url": "https://github.com/rickylabs/eis-chat/commit/faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/faf85e9ba3df1a166abe2585c86739a3aa5c9866/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "a7e7d2809fdf4dfb285977a6d794156db66277a3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/a7e7d2809fdf4dfb285977a6d794156db66277a3", + "html_url": "https://github.com/rickylabs/eis-chat/commit/a7e7d2809fdf4dfb285977a6d794156db66277a3" + } + ] + }, + { + "sha": "c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "node_id": "C_kwDOTIdMCNoAKGM0NmY4YjY5YzkyMDRiMWQyNzk3OWM3YWQzMGMzYjY1OWVlZGE1MTE", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T16:24:11Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T16:24:11Z" + }, + "message": "work around desktop sidecar spawn handles", + "tree": { + "sha": "6714ed28a8c15b9301fef12ae4767933fecc0c2c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6714ed28a8c15b9301fef12ae4767933fecc0c2c" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "html_url": "https://github.com/rickylabs/eis-chat/commit/c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/c46f8b69c9204b1d27979c7ad30c3b659eeda511/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/faf85e9ba3df1a166abe2585c86739a3aa5c9866", + "html_url": "https://github.com/rickylabs/eis-chat/commit/faf85e9ba3df1a166abe2585c86739a3aa5c9866" + } + ] + }, + { + "sha": "0c3639157fe5a23ce47245a437741606036eb49b", + "node_id": "C_kwDOTIdMCNoAKDBjMzYzOTE1N2ZlNWEyM2NlNDcyNDVhNDM3NzQxNjA2MDM2ZWI0OWI", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T20:49:38Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T20:49:38Z" + }, + "message": "document deno 2.9.3 sidecar retest", + "tree": { + "sha": "5f6ac1999262172b51d5aaae6035ba0e2fb63edd", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/5f6ac1999262172b51d5aaae6035ba0e2fb63edd" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/0c3639157fe5a23ce47245a437741606036eb49b", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0c3639157fe5a23ce47245a437741606036eb49b", + "html_url": "https://github.com/rickylabs/eis-chat/commit/0c3639157fe5a23ce47245a437741606036eb49b", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0c3639157fe5a23ce47245a437741606036eb49b/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/c46f8b69c9204b1d27979c7ad30c3b659eeda511", + "html_url": "https://github.com/rickylabs/eis-chat/commit/c46f8b69c9204b1d27979c7ad30c3b659eeda511" + } + ] + }, + { + "sha": "0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "node_id": "C_kwDOTIdMCNoAKDBkN2RkY2QwMDllNDA2MDhmMTMyNTY5ZDBjZjAzMTczYmE1YWY4YmM", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T21:08:04Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T21:08:04Z" + }, + "message": "capture windows singleton diagnostics", + "tree": { + "sha": "3c9b110ac9220419858f6f707c2e14030b6fea0c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3c9b110ac9220419858f6f707c2e14030b6fea0c" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "html_url": "https://github.com/rickylabs/eis-chat/commit/0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0d7ddcd009e40608f132569d0cf03173ba5af8bc/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "0c3639157fe5a23ce47245a437741606036eb49b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0c3639157fe5a23ce47245a437741606036eb49b", + "html_url": "https://github.com/rickylabs/eis-chat/commit/0c3639157fe5a23ce47245a437741606036eb49b" + } + ] + }, + { + "sha": "232a13f6015a2347b18fd05443dde1adf049276d", + "node_id": "C_kwDOTIdMCNoAKDIzMmExM2Y2MDE1YTIzNDdiMThmZDA1NDQzZGRlMWFkZjA0OTI3NmQ", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T21:33:24Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-15T21:33:24Z" + }, + "message": "run windows singleton without powershell", + "tree": { + "sha": "e5cc62f1a40dae5be2cb2bc8b2605f4bbc33a2d6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e5cc62f1a40dae5be2cb2bc8b2605f4bbc33a2d6" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/232a13f6015a2347b18fd05443dde1adf049276d", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/232a13f6015a2347b18fd05443dde1adf049276d", + "html_url": "https://github.com/rickylabs/eis-chat/commit/232a13f6015a2347b18fd05443dde1adf049276d", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/232a13f6015a2347b18fd05443dde1adf049276d/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/0d7ddcd009e40608f132569d0cf03173ba5af8bc", + "html_url": "https://github.com/rickylabs/eis-chat/commit/0d7ddcd009e40608f132569d0cf03173ba5af8bc" + } + ] + }, + { + "sha": "fa23bf0e225ec0174b92c471988a72a3c3348717", + "node_id": "C_kwDOTIdMCNoAKGZhMjNiZjBlMjI1ZWMwMTc0YjkyYzQ3MTk4OGE3MmEzYzMzNDg3MTc", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T08:52:33Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T08:52:33Z" + }, + "message": "complete windows singleton stack and fix markdown hydration", + "tree": { + "sha": "de2e104a7fcd78a476ceba3e9b9660b8399c367d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/de2e104a7fcd78a476ceba3e9b9660b8399c367d" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/fa23bf0e225ec0174b92c471988a72a3c3348717", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/fa23bf0e225ec0174b92c471988a72a3c3348717", + "html_url": "https://github.com/rickylabs/eis-chat/commit/fa23bf0e225ec0174b92c471988a72a3c3348717", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/fa23bf0e225ec0174b92c471988a72a3c3348717/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "232a13f6015a2347b18fd05443dde1adf049276d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/232a13f6015a2347b18fd05443dde1adf049276d", + "html_url": "https://github.com/rickylabs/eis-chat/commit/232a13f6015a2347b18fd05443dde1adf049276d" + } + ] + }, + { + "sha": "11f0125a9f0183cbd96667ec71750da4ea714a39", + "node_id": "C_kwDOTIdMCNoAKDExZjAxMjVhOWYwMTgzY2JkOTY2NjdlYzcxNzUwZGE0ZWE3MTRhMzk", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T10:30:30Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T10:30:30Z" + }, + "message": "fix singleton discovery and bundle Aspire dashboard", + "tree": { + "sha": "2ecffe64df62b16734304748243d5570e62ab698", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2ecffe64df62b16734304748243d5570e62ab698" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/11f0125a9f0183cbd96667ec71750da4ea714a39", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/11f0125a9f0183cbd96667ec71750da4ea714a39", + "html_url": "https://github.com/rickylabs/eis-chat/commit/11f0125a9f0183cbd96667ec71750da4ea714a39", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/11f0125a9f0183cbd96667ec71750da4ea714a39/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "fa23bf0e225ec0174b92c471988a72a3c3348717", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/fa23bf0e225ec0174b92c471988a72a3c3348717", + "html_url": "https://github.com/rickylabs/eis-chat/commit/fa23bf0e225ec0174b92c471988a72a3c3348717" + } + ] + }, + { + "sha": "4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "node_id": "C_kwDOTIdMCNoAKDQ4NTNiMGU5YmI5YTM5NjMyNjFhZGMxYjA3ZjQ4N2NmN2VhZGZiOGE", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:07:16Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:07:16Z" + }, + "message": "fix compiled singleton telemetry and CI", + "tree": { + "sha": "8ef8870218442772348678c462b7edf314cf9047", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8ef8870218442772348678c462b7edf314cf9047" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "html_url": "https://github.com/rickylabs/eis-chat/commit/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "11f0125a9f0183cbd96667ec71750da4ea714a39", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/11f0125a9f0183cbd96667ec71750da4ea714a39", + "html_url": "https://github.com/rickylabs/eis-chat/commit/11f0125a9f0183cbd96667ec71750da4ea714a39" + } + ] + }, + { + "sha": "92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "node_id": "C_kwDOTIdMCNoAKDkyY2VkNWFkZTAzNTFhOWRmZjI3ZGNkNThlOGYxMWJhZGM3YWI2ODU", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:12:14Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:12:14Z" + }, + "message": "normalize Deno npm specifiers in Vite", + "tree": { + "sha": "17617aa1a0eceec15d3aa8fcbb9a5a7545d42661", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/17617aa1a0eceec15d3aa8fcbb9a5a7545d42661" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "html_url": "https://github.com/rickylabs/eis-chat/commit/92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/92ced5ade0351a9dff27dcd58e8f11badc7ab685/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a", + "html_url": "https://github.com/rickylabs/eis-chat/commit/4853b0e9bb9a3963261adc1b07f487cf7eadfb8a" + } + ] + }, + { + "sha": "f325a1d737d08bea8e17d1982837028bec1beb98", + "node_id": "C_kwDOTIdMCNoAKGYzMjVhMWQ3MzdkMDhiZWE4ZTE3ZDE5ODI4MzcwMjhiZWMxYmViOTg", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:15:52Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:15:52Z" + }, + "message": "resolve durable streams export in cold Vite builds", + "tree": { + "sha": "ddd3af214890276d7290850d98a645fb31f7afb3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ddd3af214890276d7290850d98a645fb31f7afb3" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/f325a1d737d08bea8e17d1982837028bec1beb98", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/f325a1d737d08bea8e17d1982837028bec1beb98", + "html_url": "https://github.com/rickylabs/eis-chat/commit/f325a1d737d08bea8e17d1982837028bec1beb98", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/f325a1d737d08bea8e17d1982837028bec1beb98/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/92ced5ade0351a9dff27dcd58e8f11badc7ab685", + "html_url": "https://github.com/rickylabs/eis-chat/commit/92ced5ade0351a9dff27dcd58e8f11badc7ab685" + } + ] + }, + { + "sha": "bc44f266f23d563bfc030227338069677e0a7a65", + "node_id": "C_kwDOTIdMCNoAKGJjNDRmMjY2ZjIzZDU2M2JmYzAzMDIyNzMzODA2OTY3N2UwYTdhNjU", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:19:17Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:19:17Z" + }, + "message": "cover versioned durable streams imports", + "tree": { + "sha": "0634fafbcd84fd73304811d2e399f1efc2a1237f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/0634fafbcd84fd73304811d2e399f1efc2a1237f" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/bc44f266f23d563bfc030227338069677e0a7a65", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/bc44f266f23d563bfc030227338069677e0a7a65", + "html_url": "https://github.com/rickylabs/eis-chat/commit/bc44f266f23d563bfc030227338069677e0a7a65", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/bc44f266f23d563bfc030227338069677e0a7a65/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "f325a1d737d08bea8e17d1982837028bec1beb98", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/f325a1d737d08bea8e17d1982837028bec1beb98", + "html_url": "https://github.com/rickylabs/eis-chat/commit/f325a1d737d08bea8e17d1982837028bec1beb98" + } + ] + }, + { + "sha": "cf8887a403f5653179bbf47b9aa3749dea4516a5", + "node_id": "C_kwDOTIdMCNoAKGNmODg4N2E0MDNmNTY1MzE3OWJiZjQ3YjlhYTM3NDlkZWE0NTE2YTU", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:22:51Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T11:22:51Z" + }, + "message": "normalize versioned Deno npm imports", + "tree": { + "sha": "2179b3f9f27a02c00aae1b7320196c1788b94f64", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2179b3f9f27a02c00aae1b7320196c1788b94f64" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/cf8887a403f5653179bbf47b9aa3749dea4516a5", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/cf8887a403f5653179bbf47b9aa3749dea4516a5", + "html_url": "https://github.com/rickylabs/eis-chat/commit/cf8887a403f5653179bbf47b9aa3749dea4516a5", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/cf8887a403f5653179bbf47b9aa3749dea4516a5/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "bc44f266f23d563bfc030227338069677e0a7a65", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/bc44f266f23d563bfc030227338069677e0a7a65", + "html_url": "https://github.com/rickylabs/eis-chat/commit/bc44f266f23d563bfc030227338069677e0a7a65" + } + ] + }, + { + "sha": "8cdedd307a646cfb217e9e2b1928fac8467dc405", + "node_id": "C_kwDOTIdMCNoAKDhjZGVkZDMwN2E2NDZjZmIyMTdlOWUyYjE5MjhmYWM4NDY3ZGM0MDU", + "commit": { + "author": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T12:00:37Z" + }, + "committer": { + "name": "Eric Chautems", + "email": "eric.chautems@eisberg.com", + "date": "2026-07-16T12:00:37Z" + }, + "message": "document verified singleton integration limits", + "tree": { + "sha": "529738e4cdbf19494791b95f2f96597b95a93df3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/529738e4cdbf19494791b95f2f96597b95a93df3" + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits/8cdedd307a646cfb217e9e2b1928fac8467dc405", + "comment_count": 0, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null, + "verified_at": null + } + }, + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/8cdedd307a646cfb217e9e2b1928fac8467dc405", + "html_url": "https://github.com/rickylabs/eis-chat/commit/8cdedd307a646cfb217e9e2b1928fac8467dc405", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/commits/8cdedd307a646cfb217e9e2b1928fac8467dc405/comments", + "author": null, + "committer": null, + "parents": [ + { + "sha": "cf8887a403f5653179bbf47b9aa3749dea4516a5", + "url": "https://api.github.com/repos/rickylabs/eis-chat/commits/cf8887a403f5653179bbf47b9aa3749dea4516a5", + "html_url": "https://github.com/rickylabs/eis-chat/commit/cf8887a403f5653179bbf47b9aa3749dea4516a5" + } + ] + } +] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-files.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-files.json new file mode 100644 index 000000000..5199a53a0 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-files.json @@ -0,0 +1,230 @@ +[ + { + "sha": "12fc8bf33979bc8bde5b64d84a8412812cfd74ae", + "filename": ".github/workflows/ci.yml", + "status": "modified", + "additions": 1, + "deletions": 1, + "changes": 2, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/.github%2Fworkflows%2Fci.yml", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/.github%2Fworkflows%2Fci.yml", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/.github%2Fworkflows%2Fci.yml?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -30,7 +30,7 @@ jobs:\n uses: denoland/setup-deno@v2\n with:\n # Match the repo's local toolchain (deno.lock is baked against 2.9.x).\n- deno-version: '2.9.0'\n+ deno-version: '2.9.3'\n \n - name: Format check (first-party code; docs + resources excluded — see header)\n run: deno fmt --check apps contracts packages services plugins database workers" + }, + { + "sha": "0b5a33aefa46efb42fc61a56fef4e9fa7c446005", + "filename": "apps/dashboard/components/ui/markdown.tsx", + "status": "modified", + "additions": 40, + "deletions": 25, + "changes": 65, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fcomponents%2Fui%2Fmarkdown.tsx", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fcomponents%2Fui%2Fmarkdown.tsx", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Fcomponents%2Fui%2Fmarkdown.tsx?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -4,23 +4,26 @@\n * @depends theme-seed\n * @description Real markdown renderer for chat prose — GFM (tables, lists, task\n * lists), math (KaTeX), fenced code (reused `CodeBlock`), safe links, and our\n- * `[n]` citation chips. Built on `react-markdown@9` running under Preact via the\n- * `react`→`preact/compat` import-map alias (Onyx-proven). Adopts Onyx's `streaming`\n+ * `[n]` citation chips. Built on the unified remark/rehype pipeline and compiled\n+ * directly to the app's Preact JSX runtime. Adopts Onyx's `streaming`\n * flag: while a turn is mid-stream we SKIP `rehype-highlight` (it re-highlights the\n * whole tree every token — a perf sink) and only run it once the turn settles.\n * Sanitized (`rehype-sanitize`) so malformed/hostile markdown can never inject\n * markup or crash a turn.\n */\n \n-import type { VNode } from 'preact';\n+import { Fragment, type VNode } from 'preact';\n import { memo } from 'preact/compat';\n import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\n-import ReactMarkdown, { type Components } from 'react-markdown';\n-import type { PluggableList } from 'unified';\n+import { jsx, jsxs } from 'preact/jsx-runtime';\n+import { unified } from 'unified';\n import remarkGfm from 'remark-gfm';\n import remarkMath from 'remark-math';\n+import remarkParse from 'remark-parse';\n+import remarkRehype from 'remark-rehype';\n import rehypeKatex from 'rehype-katex';\n import rehypeHighlight from 'rehype-highlight';\n+import rehypeReact, { type Components } from 'rehype-react';\n import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\n import { visit } from 'unist-util-visit';\n import { cn } from '../../lib/cn.ts';\n@@ -122,7 +125,7 @@ const MemoizedPre = memo(({ children }: any) => <>{children});\n // deno-lint-ignore no-explicit-any\n const MemoizedCode = memo(({ className: cls, children, ...rest }: any) => {\n const match = /language-(\\w+)/.exec(cls ?? '');\n- // No language class AND no newline ⇒ inline code (react-markdown 9 dropped `inline`).\n+ // No language class AND no newline means inline code.\n const raw = codeText(children);\n const isBlock = !!match || raw.includes('\\n');\n if (!isBlock) {\n@@ -136,10 +139,11 @@ const MemoizedCode = memo(({ className: cls, children, ...rest }: any) => {\n // Safe links: same-tab in-app, new-tab external with noopener.\n // deno-lint-ignore no-explicit-any\n const MemoizedLink = memo(({ href, children, ...rest }: any) => {\n- const external = /^https?:\\/\\//i.test(href ?? '');\n+ const safeHref = transformLinkUri(href ?? '');\n+ const external = /^https?:\\/\\//i.test(safeHref);\n return (\n \n@@ -267,14 +271,6 @@ const MarkdownTable = memo(({ children, ...rest }: any) => {\n export function Markdown(\n { content, ctx, streaming = false, class: className }: MarkdownProps,\n ): VNode {\n- const rehypePlugins = useMemo(\n- () =>\n- streaming\n- ? [[rehypeSanitize, SANITIZE_SCHEMA], rehypeKatex]\n- : [[rehypeSanitize, SANITIZE_SCHEMA], [rehypeHighlight, { detect: true }], rehypeKatex],\n- [streaming],\n- );\n-\n const components = useMemo(() =>\n ({\n // Prop-only overrides — memoized at module scope so a streaming token that\n@@ -288,7 +284,8 @@ export function Markdown(\n table: MarkdownTable,\n // Our `[n]` citation chip (emitted by `remarkCitations` as ).\n // deno-lint-ignore no-explicit-any\n- 'ns-citation': ({ 'data-index': dataIndex }: any) => {\n+ 'ns-citation': ({ 'data-index': dashedIndex, dataIndex }: any) => {\n+ dataIndex ??= dashedIndex;\n const index = Number(dataIndex);\n if (!Number.isFinite(index)) return null;\n return (\n@@ -304,16 +301,34 @@ export function Markdown(\n [streaming, content],\n );\n \n+ const rendered = useMemo(() => {\n+ let processor = unified()\n+ .use(remarkParse)\n+ .use(remarkGfm)\n+ .use(remarkMath, { singleDollarTextMath: false })\n+ .use(remarkCitations)\n+ .use(remarkRehype)\n+ .use(rehypeSanitize, SANITIZE_SCHEMA);\n+\n+ if (!streaming) processor = processor.use(rehypeHighlight, { detect: true });\n+ processor = processor.use(rehypeKatex);\n+\n+ const file = processor\n+ .use(rehypeReact, {\n+ Fragment,\n+ jsx,\n+ jsxs,\n+ components,\n+ elementAttributeNameCase: 'html',\n+ })\n+ .processSync(source);\n+\n+ return file.result as VNode;\n+ }, [components, source, streaming]);\n+\n return (\n
\n- \n- {source}\n- \n+ {rendered}\n
\n );\n }" + }, + { + "sha": "95e5d4f37ba47e1e77bcb61a31ed1f17de75f601", + "filename": "apps/dashboard/lib/windows-singleton.test.ts", + "status": "added", + "additions": 66, + "deletions": 0, + "changes": 66, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Flib%2Fwindows-singleton.test.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Flib%2Fwindows-singleton.test.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Flib%2Fwindows-singleton.test.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,66 @@\n+import { assertEquals, assertThrows } from '@std/assert';\n+import { join } from '@std/path';\n+import {\n+ resolveWindowsSingletonPaths,\n+ windowsSingletonServiceEnvironment,\n+ windowsSingletonTelemetryEnvironment,\n+} from './windows-singleton.ts';\n+\n+Deno.test('windows singleton paths use per-user application data', () => {\n+ const paths = resolveWindowsSingletonPaths(\n+ { LOCALAPPDATA: 'C:\\\\Users\\\\alice\\\\AppData\\\\Local' },\n+ 'C:\\\\Program Files\\\\eis-chat',\n+ );\n+\n+ assertEquals(paths.dataDir, join('C:\\\\Users\\\\alice\\\\AppData\\\\Local', 'eis-chat'));\n+ assertEquals(paths.databaseUrl, `file:${join(paths.dataDir, 'eis_chat.db')}`);\n+ assertEquals(paths.channelDataDir, join(paths.dataDir, 'channels'));\n+ assertEquals(paths.logDir, join(paths.dataDir, 'logs'));\n+ assertEquals(paths.sidecarPath, join('C:\\\\Program Files\\\\eis-chat', 'eischat-service.exe'));\n+});\n+\n+Deno.test('windows singleton paths accept an explicit sidecar override', () => {\n+ const paths = resolveWindowsSingletonPaths(\n+ { APPDATA: 'C:\\\\Users\\\\alice\\\\AppData\\\\Roaming', EISCHAT_SINGLETON_SIDECAR: 'D:\\\\eis.exe' },\n+ 'C:\\\\Program Files\\\\eis-chat',\n+ );\n+ assertEquals(paths.sidecarPath, 'D:\\\\eis.exe');\n+});\n+\n+Deno.test('windows singleton paths require an application data root', () => {\n+ assertThrows(\n+ () => resolveWindowsSingletonPaths({}, 'C:\\\\Program Files\\\\eis-chat'),\n+ Error,\n+ 'LOCALAPPDATA or APPDATA',\n+ );\n+});\n+\n+Deno.test('windows singleton service environment covers server and browser discovery', () => {\n+ const runtime = windowsSingletonServiceEnvironment();\n+ assertEquals(runtime.services__eischat__http__0, 'http://127.0.0.1:3001');\n+ assertEquals(runtime.EISCHAT_URL, 'http://127.0.0.1:3001');\n+ assertEquals(runtime['services__workers-api__http__0'], 'http://127.0.0.1:8091');\n+ assertEquals(runtime.LEGACY_ARCHEO_MCP_URL, 'http://127.0.0.1:8095');\n+ assertEquals(runtime.DURABLE_STREAMS_URL, 'http://127.0.0.1:4437');\n+ assertEquals(runtime.VITE_services__eischat__http__0, undefined);\n+\n+ const build = windowsSingletonServiceEnvironment({ includeVite: true });\n+ assertEquals(build.VITE_services__eischat__http__0, 'http://127.0.0.1:3001');\n+ assertEquals(build.VITE_EISCHAT_URL, 'http://127.0.0.1:3001');\n+ assertEquals(build['VITE_services__workers-api__http__0'], undefined);\n+ assertEquals(build.VITE_WORKERS_API_URL, 'http://127.0.0.1:8091');\n+ assertEquals(build.VITE_DURABLE_STREAMS_URL, 'http://127.0.0.1:4437');\n+});\n+\n+Deno.test('windows singleton telemetry environment enables compiled Deno OTLP', () => {\n+ const env = windowsSingletonTelemetryEnvironment({ serviceName: 'eischat' });\n+ assertEquals(env.OTEL_DENO, 'true');\n+ assertEquals(env.OTEL_DENO_TRACING, 'true');\n+ assertEquals(env.OTEL_DENO_METRICS, 'true');\n+ assertEquals(env.OTEL_DENO_CONSOLE, 'capture');\n+ assertEquals(env.OTEL_PROPAGATORS, 'tracecontext,baggage');\n+ assertEquals(env.OTEL_SERVICE_NAME, 'eischat');\n+ assertEquals(env.OTEL_EXPORTER_OTLP_ENDPOINT, 'http://127.0.0.1:4318');\n+ assertEquals(env.OTEL_EXPORTER_OTLP_PROTOCOL, 'http/protobuf');\n+ assertEquals(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, undefined);\n+});" + }, + { + "sha": "28757bb978ccf6b458d50573f830bb68a6073fcd", + "filename": "apps/dashboard/lib/windows-singleton.ts", + "status": "added", + "additions": 389, + "deletions": 0, + "changes": 389, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Flib%2Fwindows-singleton.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Flib%2Fwindows-singleton.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Flib%2Fwindows-singleton.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,389 @@\n+import { dirname, join } from '@std/path';\n+\n+export const WINDOWS_SINGLETON_SERVICE_URLS = {\n+ eischat: 'http://127.0.0.1:3001',\n+ streams: 'http://127.0.0.1:4437',\n+ 'workers-api': 'http://127.0.0.1:8091',\n+ 'legacy-archeo-mcp': 'http://127.0.0.1:8095',\n+ 'excalidraw-mcp': 'http://127.0.0.1:8096',\n+} as const;\n+\n+const URLS = WINDOWS_SINGLETON_SERVICE_URLS;\n+\n+export const WINDOWS_SINGLETON_ASPIRE_ENDPOINTS = {\n+ frontend: 'http://127.0.0.1:18888',\n+ otlpGrpc: 'http://127.0.0.1:4317',\n+ otlpHttp: 'http://127.0.0.1:4318',\n+} as const;\n+\n+/**\n+ * Build the complete Deno OpenTelemetry environment for compiled processes.\n+ *\n+ * Deno embeds the OTEL enablement flags and propagators in `deno compile` and\n+ * `deno desktop` metadata, so this environment must be present both while the\n+ * executables are built and while they run. Exporter endpoints, resource\n+ * attributes, sampling and batching remain runtime configuration.\n+ */\n+export function windowsSingletonTelemetryEnvironment(\n+ options: { readonly serviceName?: string } = {},\n+): Record {\n+ const env: Record = {\n+ OTEL_DENO: 'true',\n+ OTEL_DENO_TRACING: 'true',\n+ OTEL_DENO_METRICS: 'true',\n+ OTEL_DENO_CONSOLE: 'capture',\n+ OTEL_PROPAGATORS: 'tracecontext,baggage',\n+ OTEL_EXPORTER_OTLP_ENDPOINT: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp,\n+ OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf',\n+ OTEL_RESOURCE_ATTRIBUTES:\n+ 'service.namespace=eis-chat,service.version=1.0.0,deployment.environment.name=windows-singleton',\n+ OTEL_TRACES_SAMPLER: 'always_on',\n+ OTEL_BSP_SCHEDULE_DELAY: '1000',\n+ OTEL_BLRP_SCHEDULE_DELAY: '1000',\n+ OTEL_METRIC_EXPORT_INTERVAL: '1000',\n+ };\n+ if (options.serviceName) env.OTEL_SERVICE_NAME = options.serviceName;\n+ return env;\n+}\n+\n+/**\n+ * Build the service-discovery environment used by the packaged singleton.\n+ *\n+ * NetScript resolves `services____http__0` in Deno, while browser code\n+ * must receive the corresponding `VITE_services__...` value during the Vite\n+ * build. Hyphenated service names use the SDK's `VITE__URL` fallback\n+ * because Vite cannot emit their canonical key as a dotted define expression.\n+ * The short `*_URL` aliases also cover the app's MCP / durable-stream\n+ * compatibility seams. Keeping the complete graph here prevents the build-time\n+ * and process-time environments from drifting.\n+ */\n+export function windowsSingletonServiceEnvironment(\n+ options: { readonly includeVite?: boolean } = {},\n+): Record {\n+ const env: Record = {};\n+ for (const [name, url] of Object.entries(URLS)) {\n+ const alias = name.toUpperCase().replaceAll('-', '_');\n+ env[`services__${name}__http__0`] = url;\n+ env[`${alias}_URL`] = url;\n+ if (options.includeVite) {\n+ // Vite converts each VITE_* key into an esbuild define expression. A\n+ // hyphenated property is not valid dotted JavaScript, so use the SDK's\n+ // documented VITE__URL fallback for those service names.\n+ if (/^[A-Za-z0-9_]+$/.test(name)) env[`VITE_services__${name}__http__0`] = url;\n+ env[`VITE_${alias}_URL`] = url;\n+ }\n+ }\n+ env.DURABLE_STREAMS_URL = URLS.streams;\n+ if (options.includeVite) env.VITE_DURABLE_STREAMS_URL = URLS.streams;\n+ return env;\n+}\n+\n+export interface WindowsSingletonPaths {\n+ readonly dataDir: string;\n+ readonly databaseUrl: string;\n+ readonly channelDataDir: string;\n+ readonly logDir: string;\n+ readonly sidecarPath: string;\n+}\n+\n+export interface WindowsSingletonHandle {\n+ readonly children: readonly Deno.ChildProcess[];\n+ readonly serviceUrl: string;\n+ stop(): void;\n+}\n+\n+interface SidecarSpec {\n+ readonly name: string;\n+ readonly executable: string;\n+ readonly args?: readonly string[];\n+ readonly url?: string;\n+ readonly env?: Readonly>;\n+ readonly ready?: 'http' | 'tcp' | 'process';\n+}\n+\n+function desktopRuntime(): boolean {\n+ const runtime = Deno as typeof Deno & { readonly BrowserWindow?: unknown };\n+ return runtime.BrowserWindow !== undefined;\n+}\n+\n+/** Resolve writable data and adjacent-sidecar paths without relying on the launch cwd. */\n+export function resolveWindowsSingletonPaths(\n+ env: Readonly>,\n+ executableDir: string,\n+): WindowsSingletonPaths {\n+ const appData = env.LOCALAPPDATA ?? env.APPDATA;\n+ if (!appData) throw new Error('windows-singleton requires LOCALAPPDATA or APPDATA.');\n+ const dataDir = join(appData, 'eis-chat');\n+ return {\n+ dataDir,\n+ databaseUrl: `file:${join(dataDir, 'eis_chat.db')}`,\n+ channelDataDir: join(dataDir, 'channels'),\n+ logDir: join(dataDir, 'logs'),\n+ sidecarPath: env.EISCHAT_SINGLETON_SIDECAR ?? join(executableDir, 'eischat-service.exe'),\n+ };\n+}\n+\n+async function httpReachable(url: string): Promise {\n+ try {\n+ await fetch(new URL('/health', url), { signal: AbortSignal.timeout(1_000) });\n+ return true;\n+ } catch {\n+ return false;\n+ }\n+}\n+\n+async function endpointReachable(url: string): Promise {\n+ try {\n+ const response = await fetch(url, { signal: AbortSignal.timeout(1_000) });\n+ return response.ok;\n+ } catch {\n+ return false;\n+ }\n+}\n+\n+async function tcpReachable(hostname: string, port: number): Promise {\n+ try {\n+ const connection = await Deno.connect({ hostname, port });\n+ connection.close();\n+ return true;\n+ } catch {\n+ return false;\n+ }\n+}\n+\n+async function waitUntilReady(child: Deno.ChildProcess, spec: SidecarSpec): Promise {\n+ const deadline = Date.now() + 120_000;\n+ while (Date.now() < deadline) {\n+ if (spec.ready === 'process') {\n+ await new Promise((resolve) => setTimeout(resolve, 1_000));\n+ const status = await Promise.race([\n+ child.status,\n+ new Promise((resolve) => setTimeout(() => resolve(undefined), 10)),\n+ ]);\n+ if (!status) return;\n+ } else if (spec.ready === 'tcp') {\n+ if (await tcpReachable('127.0.0.1', 6379)) return;\n+ } else if (spec.url && await httpReachable(spec.url)) return;\n+\n+ const status = await Promise.race([\n+ child.status,\n+ new Promise((resolve) => setTimeout(() => resolve(undefined), 250)),\n+ ]);\n+ if (status) throw new Error(`${spec.name} exited with code ${status.code}.`);\n+ }\n+ throw new Error(`${spec.name} did not become ready${spec.url ? ` at ${spec.url}` : ''}.`);\n+}\n+\n+async function spawnSidecar(\n+ spec: SidecarSpec,\n+ baseEnv: Record,\n+ logDir: string,\n+): Promise {\n+ const child = new Deno.Command(spec.executable, {\n+ args: spec.args ? [...spec.args] : [],\n+ clearEnv: true,\n+ env: { ...baseEnv, OTEL_SERVICE_NAME: spec.name, ...spec.env },\n+ stdin: 'piped',\n+ stdout: 'piped',\n+ stderr: 'piped',\n+ }).spawn();\n+ await child.stdin.close();\n+ const stdout = await Deno.open(join(logDir, `${spec.name}.stdout.log`), {\n+ create: true,\n+ write: true,\n+ truncate: true,\n+ });\n+ const stderr = await Deno.open(join(logDir, `${spec.name}.stderr.log`), {\n+ create: true,\n+ write: true,\n+ truncate: true,\n+ });\n+ void child.stdout.pipeTo(stdout.writable).catch(() => undefined);\n+ void child.stderr.pipeTo(stderr.writable).catch(() => undefined);\n+ await waitUntilReady(child, spec);\n+ return child;\n+}\n+\n+/** Start the complete adjacent process graph for a packaged Deno Desktop singleton. */\n+export async function startWindowsSingleton(): Promise {\n+ if (!desktopRuntime() || Deno.env.get('EISCHAT_WINDOWS_SINGLETON') !== '1') return undefined;\n+\n+ const serviceEnvironment = windowsSingletonServiceEnvironment();\n+ for (const [name, value] of Object.entries(serviceEnvironment)) Deno.env.set(name, value);\n+ if (await httpReachable(URLS.eischat) && await httpReachable(URLS.streams)) return undefined;\n+\n+ const executableDir = dirname(Deno.execPath());\n+ const paths = resolveWindowsSingletonPaths(Deno.env.toObject(), executableDir);\n+ await Deno.mkdir(paths.channelDataDir, { recursive: true });\n+ await Deno.mkdir(paths.logDir, { recursive: true });\n+ await Deno.mkdir(join(paths.dataDir, 'streams'), { recursive: true });\n+ await Deno.mkdir(join(paths.dataDir, 'garnet'), { recursive: true });\n+\n+ const permissions = Object.fromEntries(\n+ await Promise.all((['env', 'read', 'write', 'run', 'net'] as const).map(async (name) => [\n+ name,\n+ (await Deno.permissions.query({ name })).state,\n+ ])),\n+ );\n+ const baseEnv = Deno.env.toObject();\n+ const removedRuntimeEnv = Object.keys(baseEnv).filter((name) =>\n+ name.startsWith('DENO_') || name === 'NODE_CHANNEL_FD'\n+ );\n+ for (const name of removedRuntimeEnv) delete baseEnv[name];\n+\n+ const common = {\n+ DATABASE_URL: paths.databaseUrl,\n+ SQLITE_URI: paths.databaseUrl,\n+ DB_PROVIDER: 'sqlite',\n+ DATABASE_PROVIDER: 'sqlite',\n+ GARNET_URI: '127.0.0.1:6379',\n+ REDIS_URI: '127.0.0.1:6379',\n+ CACHE_PROVIDER: 'garnet',\n+ LOG_LEVEL: 'debug',\n+ DEBUG: 'netscript:*',\n+ ...windowsSingletonTelemetryEnvironment(),\n+ };\n+ Object.assign(baseEnv, common);\n+\n+ const dashboardRequested = Deno.env.get('EISCHAT_ASPIRE_DASHBOARD') === '1';\n+ const dashboardUrl = dashboardRequested ? WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend : undefined;\n+ const dashboardAlreadyRunning = dashboardUrl ? await endpointReachable(dashboardUrl) : false;\n+ const specs: SidecarSpec[] = [];\n+ if (dashboardRequested && !dashboardAlreadyRunning) {\n+ specs.push({\n+ name: 'aspire-dashboard',\n+ executable: join(executableDir, 'tools', 'aspire', 'aspire.exe'),\n+ args: [\n+ 'dashboard',\n+ 'run',\n+ '--frontend-url',\n+ WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend,\n+ '--otlp-grpc-url',\n+ WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpGrpc,\n+ '--otlp-http-url',\n+ WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp,\n+ '--config-file-path',\n+ join(executableDir, 'tools', 'aspire', 'aspire-dashboard.json'),\n+ '--allow-anonymous',\n+ '--non-interactive',\n+ ],\n+ url: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend,\n+ env: {\n+ ASPNETCORE_URLS: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend,\n+ ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpGrpc,\n+ ASPIRE_DASHBOARD_OTLP_HTTP_ENDPOINT_URL: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp,\n+ ASPIRE_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS: 'true',\n+ ASPIRE_DASHBOARD_CONFIG_FILE_PATH: join(\n+ executableDir,\n+ 'tools',\n+ 'aspire',\n+ 'aspire-dashboard.json',\n+ ),\n+ // The receiver is loopback-only and anonymous. Preparing CORS here\n+ // makes it usable by a future browser OTEL SDK without changing the\n+ // bundled dashboard; Deno's server-side exporter does not need CORS.\n+ DASHBOARD__OTLP__CORS__ALLOWEDORIGINS: '*',\n+ },\n+ });\n+ }\n+ specs.push(\n+ {\n+ name: 'garnet',\n+ executable: join(executableDir, 'tools', 'garnet', 'garnet-server.exe'),\n+ args: ['--port', '6379'],\n+ ready: 'tcp',\n+ },\n+ {\n+ name: 'streams',\n+ executable: join(executableDir, 'streams-service.exe'),\n+ url: URLS.streams,\n+ env: { PORT: '4437', STREAMS_DATA_DIR: join(paths.dataDir, 'streams') },\n+ },\n+ {\n+ name: 'workers-api',\n+ executable: join(executableDir, 'workers-api-service.exe'),\n+ url: URLS['workers-api'],\n+ env: { PORT: '8091', services__streams__http__0: URLS.streams },\n+ },\n+ {\n+ name: 'eischat',\n+ executable: paths.sidecarPath,\n+ url: URLS.eischat,\n+ env: {\n+ PORT: '3001',\n+ CHANNEL_DATA_DIR: paths.channelDataDir,\n+ EISCHAT_NO_DOTENV: '1',\n+ 'services__workers-api__http__0': URLS['workers-api'],\n+ services__streams__http__0: URLS.streams,\n+ },\n+ },\n+ {\n+ name: 'legacy-archeo-mcp',\n+ executable: join(executableDir, 'legacy-archeo-mcp-service.exe'),\n+ url: URLS['legacy-archeo-mcp'],\n+ env: { PORT: '8095', MCP_TRANSPORT: 'http' },\n+ },\n+ {\n+ name: 'excalidraw-mcp',\n+ executable: join(executableDir, 'excalidraw-mcp-service.exe'),\n+ url: URLS['excalidraw-mcp'],\n+ env: { PORT: '8096', MCP_TRANSPORT: 'http' },\n+ },\n+ {\n+ name: 'workers',\n+ executable: join(executableDir, 'workers-service.exe'),\n+ ready: 'process',\n+ env: {\n+ WORKER_CONCURRENCY: '2',\n+ services__eischat__http__0: URLS.eischat,\n+ services__workers_api__http__0: URLS['workers-api'],\n+ services__streams__http__0: URLS.streams,\n+ },\n+ },\n+ );\n+\n+ await Deno.writeTextFile(\n+ join(paths.logDir, 'desktop-supervisor.log'),\n+ `${new Date().toISOString()} starting full stack\\n` +\n+ `${\n+ JSON.stringify(\n+ {\n+ paths,\n+ permissions,\n+ removedRuntimeEnv,\n+ serviceEnvironment,\n+ telemetryEnvironment: common,\n+ dashboardUrl,\n+ dashboardAlreadyRunning,\n+ resources: specs,\n+ },\n+ null,\n+ 2,\n+ )\n+ }\\n`,\n+ { append: true },\n+ );\n+\n+ const children: Deno.ChildProcess[] = [];\n+ try {\n+ for (const spec of specs) children.push(await spawnSidecar(spec, baseEnv, paths.logDir));\n+ } catch (error) {\n+ for (const child of children.toReversed()) {\n+ try {\n+ child.kill('SIGKILL');\n+ } catch { /* already stopped */ }\n+ }\n+ throw error;\n+ }\n+\n+ const stop = () => {\n+ for (const child of children.toReversed()) {\n+ try {\n+ child.kill('SIGTERM');\n+ } catch { /* best effort */ }\n+ }\n+ };\n+ globalThis.addEventListener('unload', stop, { once: true });\n+ console.log(`[windows-singleton] full stack ready (${children.length} processes)`);\n+ return { children, serviceUrl: URLS.eischat, stop };\n+}" + }, + { + "sha": "851b08a6cef45fb1cdc6cc84fe5839f586e537ef", + "filename": "apps/dashboard/main.ts", + "status": "modified", + "additions": 5, + "deletions": 0, + "changes": 5, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fmain.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fmain.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Fmain.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -11,6 +11,11 @@\n import { defineFreshApp } from '@netscript/fresh/server';\n import type { State } from '@app/utils.ts';\n import { initDesktopChrome } from '@app/lib/desktop-chrome.ts';\n+import { startWindowsSingleton } from '@app/lib/windows-singleton.ts';\n+\n+// The experimental Windows singleton package places a compiled eischat executable\n+// beside the Deno Desktop launcher. Start it before the Fresh app serves requests.\n+await startWindowsSingleton();\n \n export const app = defineFreshApp({ name: 'dashboard' });\n " + }, + { + "sha": "cd09ace6a8213e34e953af05bce0248d66340560", + "filename": "apps/dashboard/package.json", + "status": "modified", + "additions": 3, + "deletions": 1, + "changes": 4, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fpackage.json", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fpackage.json", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Fpackage.json?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -21,12 +21,14 @@\n \"preact\": \"catalog:\",\n \"react\": \"npm:preact@^10.29.7\",\n \"react-dom\": \"npm:preact@^10.29.7\",\n- \"react-markdown\": \"catalog:\",\n+ \"rehype-react\": \"catalog:\",\n \"rehype-highlight\": \"catalog:\",\n \"rehype-katex\": \"catalog:\",\n \"rehype-sanitize\": \"catalog:\",\n \"remark-gfm\": \"catalog:\",\n \"remark-math\": \"catalog:\",\n+ \"remark-parse\": \"catalog:\",\n+ \"remark-rehype\": \"catalog:\",\n \"tailwind-merge\": \"catalog:\",\n \"tailwindcss\": \"catalog:\",\n \"unified\": \"catalog:\"," + }, + { + "sha": "56041b4019cd5765627bdf3b9db4c782ef45f6af", + "filename": "apps/dashboard/vite.config.ts", + "status": "modified", + "additions": 34, + "deletions": 11, + "changes": 45, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fvite.config.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/apps%2Fdashboard%2Fvite.config.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/apps%2Fdashboard%2Fvite.config.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -3,7 +3,7 @@ import tailwindCSS from '@tailwindcss/vite';\n import { resolve } from 'node:path';\n import process from 'node:process';\n import { createNetScriptVitePlugin } from '@netscript/fresh/vite';\n-import { defineConfig, loadEnv } from 'vite';\n+import { defineConfig, loadEnv, normalizePath } from 'vite';\n \n const appRoot = resolve(import.meta.dirname!, '.');\n const workspaceRoot = resolve(import.meta.dirname!, '../..');\n@@ -33,16 +33,19 @@ export default defineConfig(({ mode }) => {\n \n return {\n resolve: {\n- // Force react-markdown's (and any npm dep's) transitive `react` imports onto\n- // preact/compat so its output vnodes render in the Fresh/preact tree. The\n- // deno.json import-map alias covers our OWN `react` imports, but a dep's own\n- // `import 'react'` resolves to the real react@19 in node_modules unless the\n- // BUNDLER rewrites it — hence these build-time aliases. Anchored regexes so we\n- // never shadow `react-markdown` / `react-dom/*` subpaths. (These live in the\n- // vite-native `resolve.alias`, not the netscript `aliasEntries`, because that\n- // API only accepts string `find`s and a bare `react` string would prefix-match\n- // `react-markdown` too.)\n+ // A cold Deno loader graph can expose JSR dependencies' npm imports as\n+ // versioned Deno specifiers (sometimes with an extra scheme slash).\n+ // Hand scoped and unscoped forms back to Vite as bare package exports;\n+ // Fresh applies aliases before Deno resolution.\n alias: [\n+ {\n+ find: /^npm:\\/?(@[^/]+\\/[^@/]+)@[^/]+(\\/.*)?$/,\n+ replacement: '$1$2',\n+ },\n+ {\n+ find: /^npm:\\/?([^@/]+)@[^/]+(\\/.*)?$/,\n+ replacement: '$1$2',\n+ },\n // Fresh/NetScript import Signals through versioned `npm:` specifiers while\n // app modules resolve the package through package.json. Normalize both to\n // one Vite module identity: loading Signals twice installs nested Preact\n@@ -54,6 +57,10 @@ export default defineConfig(({ mode }) => {\n { find: /^react\\/jsx-runtime$/, replacement: 'npm:preact@^10.29.2/jsx-runtime' },\n { find: /^react\\/jsx-dev-runtime$/, replacement: 'npm:preact@^10.29.2/jsx-runtime' },\n ],\n+ // Vite's standard baseline for packages that consume Preact through peers.\n+ // Windows also needs the resolved-ID normalization plugin below: dedupe\n+ // chooses one package copy, but cannot merge slash variants of that copy.\n+ dedupe: ['preact'],\n },\n server: {\n port: Number.parseInt(env.NETSCRIPT_VITE_PORT ?? process.env.PORT ?? '5173', 10),\n@@ -66,6 +73,23 @@ export default defineConfig(({ mode }) => {\n external: ['@modelcontextprotocol/sdk'],\n },\n plugins: [\n+ {\n+ name: 'normalize-preact-windows-module-ids',\n+ enforce: 'pre',\n+ async resolveId(source, importer, options) {\n+ if (\n+ !/^(?:npm:\\/?)?preact(?:@[^/]+)?(?:\\/|$)/.test(source)\n+ ) return null;\n+\n+ const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n+ if (!resolved) return null;\n+ // Fresh disables optimize-deps discovery, but a production Rollup build\n+ // can still see one physical Preact file as both C:\\\\... and C:/....\n+ // Canonicalizing the delegated result prevents duplicate hooks runtimes.\n+ // Framework follow-up: https://github.com/rickylabs/netscript/issues/782\n+ return { ...resolved, id: normalizePath(resolved.id) };\n+ },\n+ },\n {\n name: 'netscript-telemetry-runtime-import',\n enforce: 'pre',\n@@ -120,7 +144,6 @@ export default defineConfig(({ mode }) => {\n moduleId.includes('/node_modules/lowlight/')\n ) return 'vendor-highlight';\n if (\n- moduleId.includes('/node_modules/react-markdown/') ||\n moduleId.includes('/node_modules/remark-') ||\n moduleId.includes('/node_modules/rehype-') ||\n moduleId.includes('/node_modules/unified/') ||" + }, + { + "sha": "415379758867bcf784f1d4f8429125b371da0285", + "filename": "database/sqlite/mod.test.ts", + "status": "added", + "additions": 34, + "deletions": 0, + "changes": 34, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/database%2Fsqlite%2Fmod.test.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/database%2Fsqlite%2Fmod.test.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/database%2Fsqlite%2Fmod.test.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,34 @@\n+import { assertEquals } from '@std/assert';\n+import { db, ensureSqliteSchema } from './mod.ts';\n+\n+Deno.test('ensureSqliteSchema bootstraps an empty catalog database', async () => {\n+ const previousUrl = Deno.env.get('SQLITE_URI');\n+ const tempDir = await Deno.makeTempDir();\n+ try {\n+ await db.disconnect();\n+ Deno.env.set('SQLITE_URI', `file:${tempDir}/catalog.db`);\n+ await ensureSqliteSchema();\n+ await ensureSqliteSchema();\n+\n+ const tables = await db.client.$queryRawUnsafe>(\n+ \"SELECT name FROM sqlite_master WHERE type = 'table' AND name IN ('Channel', 'ExampleRecord') ORDER BY name\",\n+ );\n+ assertEquals(tables.map(({ name }) => name), ['Channel', 'ExampleRecord']);\n+ } finally {\n+ await db.disconnect();\n+ if (previousUrl === undefined) Deno.env.delete('SQLITE_URI');\n+ else Deno.env.set('SQLITE_URI', previousUrl);\n+ for (let attempt = 0; attempt < 10; attempt++) {\n+ try {\n+ await Deno.remove(tempDir, { recursive: true });\n+ break;\n+ } catch (error) {\n+ if (Deno.build.os === 'windows') break;\n+ if (!(error instanceof Deno.errors.Busy || error instanceof Deno.errors.PermissionDenied)) {\n+ throw error;\n+ }\n+ await new Promise((resolve) => setTimeout(resolve, 50));\n+ }\n+ }\n+ }\n+});" + }, + { + "sha": "73ea06425d33835345393c0663c3ebb8823a2e40", + "filename": "database/sqlite/mod.ts", + "status": "modified", + "additions": 24, + "deletions": 0, + "changes": 24, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/database%2Fsqlite%2Fmod.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/database%2Fsqlite%2Fmod.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/database%2Fsqlite%2Fmod.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -35,6 +35,30 @@ export function getSqlite(): Promise {\n return Promise.resolve(getClientSync());\n }\n \n+/** Bootstrap the catalog schema for first-run, packaged SQLite deployments. */\n+export async function ensureSqliteSchema(): Promise {\n+ const sqlite = getClientSync();\n+ await sqlite.$executeRawUnsafe(`\n+ CREATE TABLE IF NOT EXISTS \"ExampleRecord\" (\n+ \"id\" TEXT NOT NULL PRIMARY KEY,\n+ \"name\" TEXT NOT NULL,\n+ \"createdAt\" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n+ \"updatedAt\" DATETIME NOT NULL\n+ )\n+ `);\n+ await sqlite.$executeRawUnsafe(`\n+ CREATE TABLE IF NOT EXISTS \"Channel\" (\n+ \"id\" TEXT NOT NULL PRIMARY KEY,\n+ \"name\" TEXT NOT NULL,\n+ \"slug\" TEXT NOT NULL,\n+ \"createdAt\" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP\n+ )\n+ `);\n+ await sqlite.$executeRawUnsafe(\n+ 'CREATE UNIQUE INDEX IF NOT EXISTS \"Channel_slug_key\" ON \"Channel\"(\"slug\")',\n+ );\n+}\n+\n /** Unified database facade for this workspace. */\n export const db = {\n get sqlite(): SqliteClient {" + }, + { + "sha": "d06fb62b96a2df493d34d3a84423b88b8b7fcb21", + "filename": "deno.json", + "status": "modified", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/deno.json", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/deno.json", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/deno.json?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -78,6 +78,7 @@\n ],\n \"tasks\": {\n \"dev\": \"deno run --allow-all apps/dashboard/main.ts\",\n+ \"deploy:windows-singleton\": \"deno run -A scripts/windows-singleton/build.ts\",\n \"check\": \"deno check --minimum-dependency-age=0 apps/**/*.ts services/**/*.ts contracts/**/*.ts packages/**/*.ts plugins/**/*.ts workers/**/*.ts\",\n \"lint\": \"deno lint\",\n \"fmt\": \"deno fmt\"," + }, + { + "sha": "0337daec9b93ae3988322421b7f3399ac438f80e", + "filename": "deno.lock", + "status": "modified", + "additions": 20, + "deletions": 24, + "changes": 44, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/deno.lock", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/deno.lock", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/deno.lock?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -21,6 +21,7 @@\n \"jsr:@fresh/build-id@1\": \"1.0.1\",\n \"jsr:@fresh/core@2\": \"2.3.3\",\n \"jsr:@fresh/core@^2.3.3\": \"2.3.3\",\n+ \"jsr:@fresh/plugin-vite@1.1.2\": \"1.1.2\",\n \"jsr:@fresh/plugin-vite@^1.1.2\": \"1.1.2\",\n \"jsr:@hono/hono@4.12.24\": \"4.12.24\",\n \"jsr:@hono/hono@^4.8.3\": \"4.12.24\",\n@@ -182,12 +183,14 @@\n \"npm:preact@^10.29.7\": \"10.29.7_preact-render-to-string@6.7.0\",\n \"npm:prisma@^7.4.2\": \"7.8.0_typescript@7.0.2\",\n \"npm:prisma@^7.8.0\": \"7.8.0_typescript@7.0.2\",\n- \"npm:react-markdown@^9.1.0\": \"9.1.0_@types+react@19.2.17_react@19.2.7\",\n \"npm:rehype-highlight@^7.0.2\": \"7.0.2\",\n \"npm:rehype-katex@^7.0.1\": \"7.0.1\",\n+ \"npm:rehype-react@8\": \"8.0.0\",\n \"npm:rehype-sanitize@6\": \"6.0.0\",\n \"npm:remark-gfm@^4.0.1\": \"4.0.1\",\n \"npm:remark-math@6\": \"6.0.0\",\n+ \"npm:remark-parse@11\": \"11.0.0\",\n+ \"npm:remark-rehype@^11.1.2\": \"11.1.2\",\n \"npm:rollup@^4.55.1\": \"4.62.2\",\n \"npm:structured-field-values@^2.0.4\": \"2.0.4\",\n \"npm:tailwind-merge@^3.6.0\": \"3.6.0\",\n@@ -507,6 +510,7 @@\n \"@netscript/plugin-streams@0.0.1-beta.9\": {\n \"integrity\": \"5ad0eed126979799818d8ae5d34176b9d60cfb9456aea56208cfb5d390432673\",\n \"dependencies\": [\n+ \"jsr:@hono/hono@4.12.24\",\n \"jsr:@netscript/plugin@0.0.1-beta.9\",\n \"jsr:@netscript/service@0.0.1-beta.9\",\n \"jsr:@std/net@1\",\n@@ -543,6 +547,7 @@\n \"jsr:@netscript/plugin-workers-core@0.0.1-beta.9\",\n \"jsr:@netscript/plugin@0.0.1-beta.9\",\n \"jsr:@netscript/queue\",\n+ \"jsr:@netscript/service@0.0.1-beta.9\",\n \"jsr:@netscript/telemetry@0.0.1-beta.9\",\n \"jsr:@std/async@1\",\n \"jsr:@std/path@1\",\n@@ -3423,9 +3428,6 @@\n \"hono@4.12.30\": {\n \"integrity\": \"sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==\"\n },\n- \"html-url-attributes@3.0.1\": {\n- \"integrity\": \"sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==\"\n- },\n \"http-errors@2.0.1\": {\n \"integrity\": \"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==\",\n \"dependencies\": [\n@@ -4682,24 +4684,6 @@\n \"scheduler\"\n ]\n },\n- \"react-markdown@9.1.0_@types+react@19.2.17_react@19.2.7\": {\n- \"integrity\": \"sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==\",\n- \"dependencies\": [\n- \"@types/hast\",\n- \"@types/mdast\",\n- \"@types/react\",\n- \"devlop\",\n- \"hast-util-to-jsx-runtime\",\n- \"html-url-attributes\",\n- \"mdast-util-to-hast\",\n- \"react\",\n- \"remark-parse\",\n- \"remark-rehype\",\n- \"unified\",\n- \"unist-util-visit\",\n- \"vfile\"\n- ]\n- },\n \"react@19.2.7\": {\n \"integrity\": \"sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==\"\n },\n@@ -4750,6 +4734,14 @@\n \"vfile\"\n ]\n },\n+ \"rehype-react@8.0.0\": {\n+ \"integrity\": \"sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==\",\n+ \"dependencies\": [\n+ \"@types/hast\",\n+ \"hast-util-to-jsx-runtime\",\n+ \"unified\"\n+ ]\n+ },\n \"rehype-sanitize@6.0.0\": {\n \"integrity\": \"sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==\",\n \"dependencies\": [\n@@ -5439,12 +5431,14 @@\n \"npm:katex@~0.16.47\",\n \"npm:preact@^10.29.7\",\n \"npm:prisma@^7.8.0\",\n- \"npm:react-markdown@^9.1.0\",\n \"npm:rehype-highlight@^7.0.2\",\n \"npm:rehype-katex@^7.0.1\",\n+ \"npm:rehype-react@8\",\n \"npm:rehype-sanitize@6\",\n \"npm:remark-gfm@^4.0.1\",\n \"npm:remark-math@6\",\n+ \"npm:remark-parse@11\",\n+ \"npm:remark-rehype@^11.1.2\",\n \"npm:tailwind-merge@^3.6.0\",\n \"npm:tailwindcss@^4.3.2\",\n \"npm:tesseract.js@7\",\n@@ -5488,12 +5482,14 @@\n \"npm:clsx@^2.1.1\",\n \"npm:katex@~0.16.47\",\n \"npm:preact@^10.29.7\",\n- \"npm:react-markdown@^9.1.0\",\n \"npm:rehype-highlight@^7.0.2\",\n \"npm:rehype-katex@^7.0.1\",\n+ \"npm:rehype-react@8\",\n \"npm:rehype-sanitize@6\",\n \"npm:remark-gfm@^4.0.1\",\n \"npm:remark-math@6\",\n+ \"npm:remark-parse@11\",\n+ \"npm:remark-rehype@^11.1.2\",\n \"npm:tailwind-merge@^3.6.0\",\n \"npm:tailwindcss@^4.3.2\",\n \"npm:unified@^11.0.5\"," + }, + { + "sha": "719daea7845b2991b06c4b4bf247bdd6c203daad", + "filename": "docs/DESKTOP-SHELL.md", + "status": "modified", + "additions": 138, + "deletions": 7, + "changes": 145, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/docs%2FDESKTOP-SHELL.md", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/docs%2FDESKTOP-SHELL.md", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/docs%2FDESKTOP-SHELL.md?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -1,15 +1,18 @@\n # Desktop shell — `deno desktop` window + packaging (#118)\n \n-Status (PR #125, `feat/118-desktop-shell`): **S1 decided · S2 build verified · S3 launch evidence ·\n-S4 tray+auto-update gated · Aspire POC proposed**. Follow-ups sub-issued below.\n+Current status (PR #150, `agent/windows-singleton-desktop`): **full-stack Windows singleton staged\n+and smoke-tested · adjacent sidecars launched directly by Deno Desktop · Aspire standalone telemetry\n+verified · MSI assembly still open**.\n \n This is the build/run/distribute reference for wrapping eis-chat as a native desktop app with\n-`deno desktop` (Deno 2.9+). It captures the S1 decision — how the multi-process backend runs for a\n-packaged desktop app — plus the verified build flow and the open follow-ups.\n+`deno desktop` (Deno 2.9+). The original Phase-1 dashboard-only investigation is retained below as\n+historical context. Its decision has been superseded by the verified `windows-singleton` experiment,\n+documented in the final section, which stages and supervises the complete process graph without\n+PowerShell or Docker.\n \n ---\n \n-## S1 — Architecture decision: services alongside the desktop app\n+## Historical Phase-1 architecture decision (superseded for `windows-singleton`)\n \n ### The problem\n \n@@ -59,9 +62,11 @@ dashboard-only desktop wrap cannot own the data plane; it must reach a running e\n dashboard process). A genuine architecture change + upstream `@netscript/sdk` link-mode feature.\n Out of scope for Phase 1.\n \n-### Decision (MVP)\n+### Historical decision (Phase-1 MVP)\n \n-**Adopt (b) for the Phase-1 MVP, with a path to (a).**\n+**Phase 1 adopted (b), with a path to (a).** The `windows-singleton` experiment later completed that\n+path by compiling and staging adjacent sidecars; this paragraph records the earlier decision, not\n+the current deployment status.\n \n - **S2–S4 target:** a launchable native dashboard binary in `dist/` that renders the app and talks\n to a **separately-launched services process** over localhost (the same `services__*__http__0`\n@@ -306,3 +311,129 @@ that spawns the window in dev.\n · `docs/PHASE-1-FOUNDATION.md` · `docs/BUILD-PLAN.md` · `services/eischat/src/channel-client.ts`\n (single-writer note) · `apps/dashboard/lib/channel-service.ts` (HTTP-only SDK client) ·\n `aspire/.helpers/register-apps.mts` (`services__*__http__0` discovery env).\n+\n+---\n+\n+## Experimental `windows-singleton` deployment target\n+\n+The repository now carries the first experiment for a future NetScript\n+`deploy.targets.windows.singleton` option. It stages a Deno Desktop application, Garnet, and the\n+compiled service process graph needed by the chat, streams, workers, and MCP surfaces. The desktop\n+process supervises every sidecar and waits for readiness before serving UI requests.\n+\n+```powershell\n+deno task deploy:windows-singleton\n+dist\\windows\\eis-chat-singleton-\\eis-chat-singleton.cmd\n+```\n+\n+Builds are placed in a new Temporal-generated timestamped directory so a running or inspected\n+desktop build cannot lock the next release. Automation may set\n+`EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR` to an explicit child of `dist/windows`.\n+\n+The generated launcher sets `EISCHAT_WINDOWS_SINGLETON=1`. Normal browser, Aspire, and existing\n+desktop builds do not start a sidecar. Singleton data is placed under `%LOCALAPPDATA%\\eis-chat`\n+(`%APPDATA%` fallback), including the SQLite catalog and channel files; the installation directory\n+remains read-only.\n+\n+Supervisor diagnostics and debug sidecar output are written to `%LOCALAPPDATA%\\eis-chat\\logs`\n+(`desktop-supervisor.log` plus `.stdout.log` / `.stderr.log`). Deno Desktop's\n+app-scoped `Deno.openKv()` storage uses the stable `eis-chat` application identity and therefore\n+survives timestamped rebuilds.\n+\n+The packager injects the complete fixed loopback graph twice from one source of truth:\n+`services____http__0` (plus compatibility aliases) for the Fresh server and sidecars, and\n+`VITE_services____http__0` / `VITE__URL` while Vite builds browser islands. Hyphenated\n+names use the short form (for example `VITE_WORKERS_API_URL`) because Vite define expressions cannot\n+contain a hyphenated dotted property. Runtime environment assignment alone is too late for\n+`import.meta.env`; without the build-time form, browser-side typed clients fail even though\n+server-side RPC works. The supervisor records the non-secret service-discovery and OTLP environment\n+in `desktop-supervisor.log` for auditing.\n+\n+The staged graph contains:\n+\n+- Garnet on 6379;\n+- durable streams on 4437;\n+- workers API on 8091 and the background workers process;\n+- the core `eischat` service on 3001 with SQLite data under the per-user directory;\n+- legacy-archeology and Excalidraw MCP HTTP services on 8095 and 8096.\n+\n+Run `eis-chat-singleton-observed.cmd` to also start the bundled Aspire 13.4.6 standalone dashboard\n+on 18888 with anonymous local access and OTLP receivers on 4317/4318. The packager stages the pinned\n+NativeAOT `Aspire.Cli` executable, its MIT license and third-party notices, and a bounded telemetry\n+configuration under `eis-chat/tools/aspire`; the installed application therefore needs neither\n+Docker, a .NET runtime, nor a system Aspire installation. If a dashboard is already reachable, the\n+supervisor reuses it instead of competing for the ports. Open `http://127.0.0.1:18888` to inspect\n+structured logs, traces, and metrics.\n+\n+This is Aspire's documented **standalone** mode and the `aspire dashboard` command remains Preview\n+in 13.4. It intentionally has no AppHost resource service, so the resource list, resource graph, and\n+AppHost console-log surfaces are unavailable; those require an AppHost-provided\n+`ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`. The singleton supervisor remains the resource authority and\n+writes its complete non-secret resource/environment audit to `desktop-supervisor.log`. Shipping an\n+AppHost resource service solely for that UI would replace the Deno supervisor with the Aspire\n+orchestrator and is a distinct deployment design, not another dashboard setting.\n+\n+The packager supplies Deno's OpenTelemetry enablement variables during **both build and launch**.\n+This is essential for standalone executables: `deno compile` and `deno desktop` serialize tracing,\n+metrics, console-capture, and propagator enablement into their runtime metadata. Supplying\n+`OTEL_DENO=true` only to the finished executable is too late and produces a healthy but empty\n+dashboard. Runtime configuration then gives every process its own `OTEL_SERVICE_NAME` and the shared\n+`OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318` with `http/protobuf`; Deno appends the standard\n+signal paths. A compiled control executable exported both its console log and `fetch` span to the\n+bundled dashboard with this setup, without a JavaScript OTel SDK.\n+\n+The dashboard process receives the corresponding documented Aspire variables for its frontend,\n+OTLP/gRPC and OTLP/HTTP listeners, anonymous local access, config path, and standalone browser CORS.\n+Browser-originated telemetry still requires an OpenTelemetry JavaScript SDK in the Fresh client;\n+that is separate from Deno's built-in server/runtime instrumentation and is not required for the\n+singleton services to populate logs, traces, and metrics.\n+\n+### Fresh/Vite production module identity\n+\n+Fresh 2.3's Vite integration correctly owns React-compat aliases and disables dependency discovery,\n+which prevents the pre-bundling duplicate described in its release notes. A clean Windows production\n+build on current stable Fresh 2.3.3 / `@fresh/plugin-vite` 1.1.2 nevertheless resolves the same\n+installed `preact/hooks` and Signals files through both `C:/...` and `C:\\...` IDs. Rollup then emits\n+two hook runtimes; the second patches the same Preact options object and hydration fails.\n+\n+`resolve.dedupe`, import-map pins, browser conditions, and declarative aliases were each retested\n+without the application resolver and did not merge those final resolved IDs. The Vite config\n+therefore retains one narrow temporary resolver that delegates normal resolution and applies Vite's\n+`normalizePath()` only to Preact IDs. It is not a Babel pass or a custom bundle transform. The\n+framework-level fix and reproduction are tracked in\n+[NetScript #782](https://github.com/rickylabs/netscript/issues/782); once final Deno-resolved IDs\n+are canonicalized upstream, the Preact ID resolver can be removed from this app. The generic\n+versioned-`npm:` aliases cover a separate cold Deno-resolution case seen by Linux CI.\n+\n+The chat renderer no longer uses `react-markdown`. Markdown is parsed through the existing unified\n+pipeline and rendered directly by `rehype-react` with Preact's JSX runtime. This removes the React\n+wrapper and its dependency surface while keeping the rehype plugin ecosystem; the framework\n+follow-up is [NetScript #783](https://github.com/rickylabs/netscript/issues/783).\n+\n+Image ingestion and semantic retrieval are separate settings. The default offline Tesseract OCR\n+still produces searchable text chunks, but the default embedding provider is `disabled`; in that\n+mode the KB is intentionally keyword-only. A generic question such as “what is in this image?” may\n+not match OCR text even though the document is `ready`. Select an embedding provider in Settings for\n+semantic retrieval, or query for terms visible in the image to verify the offline OCR path.\n+\n+Current experiment constraints:\n+\n+- Deno sidecars are compiled with `--node-modules-dir=none --exclude-unused-npm`; this avoids\n+ inheriting Deno Desktop's npm process-state handles. The experimental `--bundle` mode remains\n+ unsuitable for the libSQL sidecar because it cannot resolve the dynamically selected\n+ `@libsql/win32-x64-msvc` native package.\n+- Garnet is staged from the pinned `garnet-server` .NET tool package; Docker is not required.\n+- The observed launcher adds the pinned Aspire 13.4.6 NativeAOT CLI (~144 MB) to provide the\n+ official zero-container standalone dashboard path. Normal launches do not start it.\n+- The target stages an application directory. Producing an MSI containing the adjacent sidecars\n+ needs a packaging hook in `deno desktop` or a second installer pass over the staged directory.\n+- Deno 2.9.3 or newer is required for denoland/deno#36005. The desktop supervisor removes inherited\n+ `DENO_*` runtime variables, including the desktop-only `DENO_SERVE_ADDRESS`, before starting the\n+ independently listening sidecar.\n+- First run idempotently creates the catalog's `Channel`, `ExampleRecord`, and unique-slug schema in\n+ the per-user SQLite database.\n+- The supervisor treats any response from HTTP `/health` as listener readiness, uses a TCP probe for\n+ Garnet, and terminates children in reverse order during normal desktop teardown. NetScript beta.9\n+ currently includes an unused MySQL adapter in aggregate health for this SQLite-only app, so the\n+ response status cannot yet be the readiness authority. Fixing that upstream, crash restart, and\n+ Windows Job Object containment are follow-ups." + }, + { + "sha": "23e6f189591d1bb9de29a6a0c1f92cf82bf7bab2", + "filename": "package.json", + "status": "modified", + "additions": 6, + "deletions": 2, + "changes": 8, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/package.json", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/package.json", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/package.json?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -33,12 +33,14 @@\n \"katex\": \"^0.16.47\",\n \"preact\": \"^10.29.7\",\n \"prisma\": \"^7.8.0\",\n- \"react-markdown\": \"^9.1.0\",\n+ \"rehype-react\": \"^8.0.0\",\n \"rehype-highlight\": \"^7.0.2\",\n \"rehype-katex\": \"^7.0.1\",\n \"rehype-sanitize\": \"^6.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-math\": \"^6.0.0\",\n+ \"remark-parse\": \"^11.0.0\",\n+ \"remark-rehype\": \"^11.1.2\",\n \"tailwind-merge\": \"^3.6.0\",\n \"tailwindcss\": \"^4.3.2\",\n \"tesseract.js\": \"^7.0.0\",\n@@ -82,12 +84,14 @@\n \"katex\": \"catalog:\",\n \"preact\": \"catalog:\",\n \"prisma\": \"catalog:\",\n- \"react-markdown\": \"catalog:\",\n+ \"rehype-react\": \"catalog:\",\n \"rehype-highlight\": \"catalog:\",\n \"rehype-katex\": \"catalog:\",\n \"rehype-sanitize\": \"catalog:\",\n \"remark-gfm\": \"catalog:\",\n \"remark-math\": \"catalog:\",\n+ \"remark-parse\": \"catalog:\",\n+ \"remark-rehype\": \"catalog:\",\n \"tailwind-merge\": \"catalog:\",\n \"tailwindcss\": \"catalog:\",\n \"tesseract.js\": \"catalog:\"," + }, + { + "sha": "984713a49622a96da110443c15477613bc12656b", + "filename": "scripts/windows-singleton/assets/ASPIRE-LICENSE.TXT", + "status": "added", + "additions": 23, + "deletions": 0, + "changes": 23, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fassets%2FASPIRE-LICENSE.TXT", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fassets%2FASPIRE-LICENSE.TXT", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/scripts%2Fwindows-singleton%2Fassets%2FASPIRE-LICENSE.TXT?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,23 @@\n+The MIT License (MIT)\n+\n+Copyright (c) .NET Foundation and Contributors\n+\n+All rights reserved.\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE." + }, + { + "sha": "b2ef73f01dd94f37f6a13d2c939541e3057b3671", + "filename": "scripts/windows-singleton/assets/aspire-dashboard.json", + "status": "added", + "additions": 13, + "deletions": 0, + "changes": 13, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fassets%2Faspire-dashboard.json", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fassets%2Faspire-dashboard.json", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/scripts%2Fwindows-singleton%2Fassets%2Faspire-dashboard.json?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,13 @@\n+{\n+ \"Dashboard\": {\n+ \"ApplicationName\": \"eis-chat Windows singleton\",\n+ \"TelemetryLimits\": {\n+ \"MaxLogCount\": 25000,\n+ \"MaxTraceCount\": 25000,\n+ \"MaxMetricsCount\": 50000\n+ },\n+ \"UI\": {\n+ \"DisableResourceGraph\": true\n+ }\n+ }\n+}" + }, + { + "sha": "be305c9d9864561a6295dd53879955fd704ee16b", + "filename": "scripts/windows-singleton/build.ts", + "status": "added", + "additions": 193, + "deletions": 0, + "changes": 193, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fbuild.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fbuild.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/scripts%2Fwindows-singleton%2Fbuild.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,193 @@\n+import { dirname, fromFileUrl, isAbsolute, join, relative, resolve } from '@std/path';\n+import {\n+ windowsSingletonServiceEnvironment,\n+ windowsSingletonTelemetryEnvironment,\n+} from '../../apps/dashboard/lib/windows-singleton.ts';\n+\n+const repoRoot = resolve(dirname(fromFileUrl(import.meta.url)), '..', '..');\n+const windowsOutputRoot = join(repoRoot, 'dist', 'windows');\n+const buildTimestamp = Temporal.Now.instant()\n+ .toString({ smallestUnit: 'second' })\n+ .replaceAll('-', '')\n+ .replaceAll(':', '');\n+const outputDir = resolve(\n+ Deno.env.get('EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR') ??\n+ join(windowsOutputRoot, `eis-chat-singleton-${buildTimestamp}`),\n+);\n+const relativeOutputDir = relative(windowsOutputRoot, outputDir);\n+if (\n+ !relativeOutputDir || isAbsolute(relativeOutputDir) || relativeOutputDir.startsWith('..')\n+) {\n+ throw new Error('Windows singleton output must be a child of dist/windows.');\n+}\n+const desktopOutput = join(outputDir, 'eis-chat');\n+const dashboardDir = join(repoRoot, 'apps', 'dashboard');\n+const aspireCliVersion = '13.4.6';\n+const aspireToolStaging = join(windowsOutputRoot, `.aspire-cli-${buildTimestamp}`);\n+const aspireOutput = join(desktopOutput, 'tools', 'aspire');\n+const sidecars = [\n+ ['eischat-service.exe', join(repoRoot, 'services', 'eischat', 'src', 'main.ts')],\n+ ['streams-service.exe', 'jsr:@netscript/plugin-streams@0.0.1-beta.9/services'],\n+ [\n+ 'workers-api-service.exe',\n+ join(repoRoot, 'scripts', 'windows-singleton', 'entries', 'workers-api.ts'),\n+ ],\n+ ['workers-service.exe', join(repoRoot, 'scripts', 'windows-singleton', 'entries', 'workers.ts')],\n+ ['legacy-archeo-mcp-service.exe', join(repoRoot, 'tools', 'legacy-archeo-mcp.ts')],\n+ ['excalidraw-mcp-service.exe', join(repoRoot, 'tools', 'excalidraw-mcp.ts')],\n+] as const;\n+\n+async function run(\n+ command: string,\n+ args: readonly string[],\n+ cwd = repoRoot,\n+ env?: Readonly>,\n+): Promise {\n+ console.log(`> ${command} ${args.join(' ')}`);\n+ const child = new Deno.Command(command, {\n+ args: [...args],\n+ cwd,\n+ stdin: 'null',\n+ stdout: 'inherit',\n+ stderr: 'inherit',\n+ env: env ? { ...env } : undefined,\n+ }).spawn();\n+ const result = await child.status;\n+ if (!result.success) throw new Error(`${command} exited with code ${result.code}.`);\n+}\n+\n+await Deno.remove(outputDir, { recursive: true }).catch((error) => {\n+ if (!(error instanceof Deno.errors.NotFound)) throw error;\n+});\n+\n+// Browser-side typed clients cannot read the runtime `services__...` variables.\n+// Vite must replace their `import.meta.env.VITE_services__...` lookups while it\n+// builds the Fresh client. Inject the whole singleton graph from the same source\n+// used by the runtime supervisor so packaged and Aspire-style discovery agree.\n+const viteEnvironment = windowsSingletonServiceEnvironment({ includeVite: true });\n+const telemetryBuildEnvironment = windowsSingletonTelemetryEnvironment({\n+ serviceName: 'eis-chat-build',\n+});\n+await run(\n+ 'deno',\n+ ['task', 'build'],\n+ dashboardDir,\n+ viteEnvironment,\n+);\n+// Deno Desktop recognizes Fresh applications and performs another production\n+// build before bundling them. Preserve the discovery environment for that\n+// second build too, otherwise it silently replaces the correctly built client.\n+await run(\n+ 'deno',\n+ [\n+ 'desktop',\n+ '--backend',\n+ 'cef',\n+ '--no-check',\n+ '--allow-all',\n+ '-o',\n+ desktopOutput,\n+ '.',\n+ ],\n+ dashboardDir,\n+ { ...viteEnvironment, ...telemetryBuildEnvironment },\n+);\n+for (const [fileName, entrypoint] of sidecars) {\n+ await run(\n+ 'deno',\n+ [\n+ 'compile',\n+ '--node-modules-dir=none',\n+ '--allow-all',\n+ '--no-check',\n+ '--exclude-unused-npm',\n+ '--output',\n+ join(desktopOutput, fileName),\n+ entrypoint,\n+ ],\n+ repoRoot,\n+ telemetryBuildEnvironment,\n+ );\n+}\n+\n+await run('dotnet', [\n+ 'tool',\n+ 'install',\n+ 'garnet-server',\n+ '--version',\n+ '1.1.10',\n+ '--tool-path',\n+ join(desktopOutput, 'tools', 'garnet'),\n+]);\n+\n+// Aspire 13.4 ships its CLI as a self-contained NativeAOT .NET tool. The\n+// standalone dashboard command is the documented zero-container hosting path,\n+// so stage only its portable executable (not the NuGet tool cache/shim) beside\n+// the singleton. End-user machines do not need Aspire, .NET, or Docker.\n+await Deno.remove(aspireToolStaging, { recursive: true }).catch((error) => {\n+ if (!(error instanceof Deno.errors.NotFound)) throw error;\n+});\n+try {\n+ await run('dotnet', [\n+ 'tool',\n+ 'install',\n+ 'Aspire.Cli',\n+ '--version',\n+ aspireCliVersion,\n+ '--tool-path',\n+ aspireToolStaging,\n+ ]);\n+ const aspirePackageRoot = join(\n+ aspireToolStaging,\n+ '.store',\n+ 'aspire.cli',\n+ aspireCliVersion,\n+ 'aspire.cli.win-x64',\n+ aspireCliVersion,\n+ );\n+ await Deno.mkdir(aspireOutput, { recursive: true });\n+ await Deno.copyFile(\n+ join(aspirePackageRoot, 'tools', 'net10.0', 'win-x64', 'aspire.exe'),\n+ join(aspireOutput, 'aspire.exe'),\n+ );\n+ await Deno.copyFile(\n+ join(aspirePackageRoot, 'THIRD-PARTY-NOTICES.TXT'),\n+ join(aspireOutput, 'THIRD-PARTY-NOTICES.TXT'),\n+ );\n+ await Deno.copyFile(\n+ join(repoRoot, 'scripts', 'windows-singleton', 'assets', 'ASPIRE-LICENSE.TXT'),\n+ join(aspireOutput, 'LICENSE.TXT'),\n+ );\n+ await Deno.copyFile(\n+ join(repoRoot, 'scripts', 'windows-singleton', 'assets', 'aspire-dashboard.json'),\n+ join(aspireOutput, 'aspire-dashboard.json'),\n+ );\n+} finally {\n+ await Deno.remove(aspireToolStaging, { recursive: true }).catch((error) => {\n+ if (!(error instanceof Deno.errors.NotFound)) throw error;\n+ });\n+}\n+\n+const launcherPath = join(outputDir, 'eis-chat-singleton.cmd');\n+const observedLauncherPath = join(outputDir, 'eis-chat-singleton-observed.cmd');\n+const observedEnvironment = {\n+ EISCHAT_WINDOWS_SINGLETON: '1',\n+ EISCHAT_ASPIRE_DASHBOARD: '1',\n+ ...windowsSingletonTelemetryEnvironment({ serviceName: 'eis-chat-desktop' }),\n+};\n+const observedEnvironmentScript = Object.entries(observedEnvironment)\n+ .map(([name, value]) => `set \"${name}=${value}\"\\r\\n`)\n+ .join('');\n+await Deno.writeTextFile(\n+ launcherPath,\n+ '@echo off\\r\\nset EISCHAT_WINDOWS_SINGLETON=1\\r\\n\"%~dp0eis-chat\\\\eis-chat.exe\" %*\\r\\n',\n+);\n+await Deno.writeTextFile(\n+ observedLauncherPath,\n+ '@echo off\\r\\n' +\n+ observedEnvironmentScript +\n+ '\"%~dp0eis-chat\\\\eis-chat.exe\" %*\\r\\n',\n+);\n+\n+console.log(`\\nwindows-singleton staged at ${outputDir}`);\n+console.log(`Launch with: ${launcherPath}`);" + }, + { + "sha": "7d04a466c4338d9b05cfab18270a14aa64203352", + "filename": "scripts/windows-singleton/entries/workers-api.ts", + "status": "added", + "additions": 4, + "deletions": 0, + "changes": 4, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fentries%2Fworkers-api.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fentries%2Fworkers-api.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/scripts%2Fwindows-singleton%2Fentries%2Fworkers-api.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,4 @@\n+import { createPluginServiceContext } from '../../../services/_shared/plugin-service-context.ts';\n+import createWorkersService from 'jsr:@netscript/plugin-workers@0.0.1-beta.9/services';\n+\n+await createWorkersService(await createPluginServiceContext('workers'));" + }, + { + "sha": "98a3cb5ff2cc3927186b8e11d7f443b918a995b7", + "filename": "scripts/windows-singleton/entries/workers.ts", + "status": "added", + "additions": 21, + "deletions": 0, + "changes": 21, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fentries%2Fworkers.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/scripts%2Fwindows-singleton%2Fentries%2Fworkers.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/scripts%2Fwindows-singleton%2Fentries%2Fworkers.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -0,0 +1,21 @@\n+import workersPluginHealthCheck from '@netscript/plugin-workers/health-check';\n+import {\n+ startCombinedProcess,\n+ type StaticJobDefinitionRegistry,\n+} from '@netscript/plugin-workers/runtime';\n+import type { StaticJobRegistry } from '@netscript/plugin-workers-core/runtime';\n+import {\n+ jobDefinitions,\n+ registry as generatedRegistry,\n+} from '../../../.netscript/generated/plugin-workers/job-registry.ts';\n+\n+type StaticJobHandler = StaticJobRegistry extends ReadonlyMap ? Handler\n+ : never;\n+\n+const registry = new Map(generatedRegistry);\n+registry.set('workers-plugin-health-check', workersPluginHealthCheck);\n+\n+await startCombinedProcess({\n+ definitions: jobDefinitions as StaticJobDefinitionRegistry,\n+ registry,\n+});" + }, + { + "sha": "b0f44dfc95352a578a212e1ca214c8e1a5ed6981", + "filename": "services/eischat/src/main.ts", + "status": "modified", + "additions": 3, + "deletions": 1, + "changes": 4, + "blob_url": "https://github.com/rickylabs/eis-chat/blob/8cdedd307a646cfb217e9e2b1928fac8467dc405/services%2Feischat%2Fsrc%2Fmain.ts", + "raw_url": "https://github.com/rickylabs/eis-chat/raw/8cdedd307a646cfb217e9e2b1928fac8467dc405/services%2Feischat%2Fsrc%2Fmain.ts", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/services%2Feischat%2Fsrc%2Fmain.ts?ref=8cdedd307a646cfb217e9e2b1928fac8467dc405", + "patch": "@@ -5,9 +5,11 @@\n */\n \n import { defineService } from '@netscript/service';\n-import { db } from '@eis-chat/database-sqlite';\n+import { db, ensureSqliteSchema } from '@eis-chat/database-sqlite';\n import { router } from './router.ts';\n \n+await ensureSqliteSchema();\n+\n await defineService(router, {\n name: 'eischat',\n version: '1.0.0'," + } +] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-issue-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-issue-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-issue-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-review-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-review-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150-review-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150.json new file mode 100644 index 000000000..50f8dfe4f --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-pr150.json @@ -0,0 +1,371 @@ +{ + "url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150", + "id": 4061954977, + "node_id": "PR_kwDOTIdMCM7yHIOh", + "html_url": "https://github.com/rickylabs/eis-chat/pull/150", + "diff_url": "https://github.com/rickylabs/eis-chat/pull/150.diff", + "patch_url": "https://github.com/rickylabs/eis-chat/pull/150.patch", + "issue_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/150", + "number": 150, + "state": "closed", + "locked": false, + "title": "Prototype full-stack Windows singleton desktop deployment", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "body": "## Outcome\n\nThis draft proves a complete no-Docker Windows `--singleton` deployment around Deno Desktop. The native window directly supervises the adjacent service graph—no PowerShell trampoline—and the packaged app has been exercised through chat streaming, persistence, knowledge ingestion, offline image OCR, and Aspire telemetry.\n\nThe experiment is intended as an executable companion to the NetScript deployment work: it identifies which behavior belongs in a future `deploy.targets.windows.singleton` implementation and which remaining fixes belong in Fresh/NetScript.\n\n## Current status\n\n| Area | Status |\n| --- | --- |\n| Deno Desktop window | Working on Deno 2.9.3+ |\n| Direct sidecar launch | Working; no PowerShell and no Docker |\n| Full service graph | Working; Garnet plus six compiled Deno processes |\n| Browser/server service discovery | Working; runtime and `VITE_*` values derive from one map |\n| Persistent storage | Working under `%LOCALAPPDATA%\\eis-chat` |\n| Chat stream/hydration | Working after Markdown and Preact identity fixes |\n| Text KB ingestion | Working |\n| Offline Tesseract image OCR | Working; semantic retrieval still requires an embedding provider |\n| Aspire logs/traces/metrics | Working over OTLP HTTP/protobuf |\n| Timestamped output | Working through Temporal |\n| MSI containing adjacent sidecars | Not implemented; requires a Desktop packaging hook or second installer pass |\n| Crash restart / Windows Job Objects | Follow-up |\n\n## Packaged graph\n\n| Resource | Endpoint | Packaging/readiness |\n| --- | --- | --- |\n| Deno Desktop dashboard | dynamic loopback port | CEF desktop output |\n| Garnet | `127.0.0.1:6379` | pinned `garnet-server` tool, TCP probe |\n| streams | `127.0.0.1:4437` | compiled Deno sidecar, HTTP readiness |\n| workers API | `127.0.0.1:8091` | compiled Deno sidecar, HTTP readiness |\n| workers | background process | compiled Deno sidecar, process readiness |\n| eischat | `127.0.0.1:3001` | compiled Deno sidecar, HTTP readiness |\n| legacy-archeology MCP | `127.0.0.1:8095` | compiled Deno sidecar, HTTP readiness |\n| Excalidraw MCP | `127.0.0.1:8096` | compiled Deno sidecar, HTTP readiness |\n| optional Aspire dashboard | `127.0.0.1:18888` | bundled Aspire CLI 13.4.6; OTLP on 4317/4318 |\n\nThe supervisor strips inherited Desktop-only `DENO_*` process state, writes per-resource stdout/stderr plus a non-secret environment audit, waits for readiness, and terminates children in reverse order.\n\n## Packaging, discovery, and storage\n\n- `deno task deploy:windows-singleton` creates `dist/windows/eis-chat-singleton-YYYYMMDDTHHMMSSZ`; Temporal supplies the UTC timestamp.\n- `EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR` may select an explicit child of `dist/windows` for automation.\n- Runtime `services____http__0` values and browser `VITE_services__...` / `VITE__URL` values come from one service map. Build-time injection is required because `import.meta.env` cannot be repaired at launch.\n- SQLite is the persistent catalog and per-channel data store. Deno Desktop uses its stable app identity for `Deno.openKv()` provider settings. Garnet is the Redis-compatible cache/runtime dependency; it is not the primary database and does not hold provider keys.\n- All mutable data and logs live below `%LOCALAPPDATA%\\eis-chat`; timestamped application directories remain read-only and replaceable.\n\n## Aspire telemetry\n\n`eis-chat-singleton-observed.cmd` starts the bundled NativeAOT Aspire CLI 13.4.6 dashboard with its documented frontend, OTLP/gRPC, OTLP/HTTP, anonymous-local, config-path, and browser-CORS variables. The package needs neither Docker, an installed .NET runtime, nor a system Aspire installation.\n\nDeno telemetry activation is supplied during both `deno compile` / `deno desktop` and launch. This matters because compiled executables serialize `OTEL_DENO`, tracing, metrics, console capture, and propagator activation into runtime metadata. Each process receives its own `OTEL_SERVICE_NAME` and exports to `http://127.0.0.1:4318` using `http/protobuf`. Logs, metrics, and correlated traces were observed from the desktop and every Deno sidecar without a JavaScript OTel SDK.\n\nThis is Aspire standalone mode. It provides logs, traces, and metrics but intentionally has no AppHost resource service, so the Resources graph and AppHost console surfaces are unavailable. The singleton supervisor remains the process authority and records the graph in `desktop-supervisor.log`.\n\n## Markdown improvement\n\nThe chat renderer no longer uses `react-markdown`. It drives the existing unified/remark/rehype pipeline directly and renders with `rehype-react` configured for Preact's JSX runtime.\n\n- preserves streaming, GFM, math/KaTeX, highlighting, citations, URL filtering, and sanitization\n- removes the React wrapper and compat boundary\n- reduced the client Markdown chunk from 200,151 to 176,118 raw bytes (24,033 bytes, about 12%)\n\nFramework follow-up: https://github.com/rickylabs/netscript/issues/783\n\n## Fresh/Vite production identity finding\n\nFresh 2.3.3 / `@fresh/plugin-vite` 1.1.2 already owns React-compat aliases and disables dependency discovery, so the Fresh 2.3 pre-bundling fix is active. A clean Windows production build still resolves the same installed `preact/hooks` and Signals files through both `C:/...` and `C:\\...` final IDs. Rollup then emits two hook runtimes and hydration fails with `TypeError: options.__ is not a function`.\n\nConfiguration-only variants were retested: `resolve.dedupe`, import-map pins, browser conditions, and declarative aliases did not merge the final slash variants. The working build therefore retains one narrow temporary resolver that delegates normal resolution and applies Vite `normalizePath()` only to Preact IDs. There are no custom Babel/CJS passes or Markdown bundle transforms. The clean failure and the removable framework-level fix are tracked in:\n\n- https://github.com/rickylabs/netscript/issues/782\n- related Vite path report: https://github.com/vitejs/vite/issues/22264\n\nThe generic versioned-`npm:` aliases are a separate cold Deno-resolution compatibility requirement found by Linux CI.\n\n## Runtime/upstream findings\n\n- Deno 2.9.3+ contains the merged Windows GUI child-process fix required for direct sidecars: https://github.com/denoland/deno/issues/35994\n- sidecars use `--node-modules-dir=none --exclude-unused-npm`; experimental bundling cannot currently resolve the dynamically selected libSQL native package\n- Garnet is staged from `garnet-server` 1.1.10; Docker Desktop is not required\n- producing one MSI containing the adjacent sidecars remains installer work\n- NetScript aggregate health currently includes an unused MySQL adapter for this SQLite app, so listener readiness is used pending an upstream health fix\n\n## Verification\n\n- full `deno task test`: **144 passed, 0 failed**\n- targeted `deno check apps/dashboard/vite.config.ts`: passed\n- local aggregate `deno task check`: blocked on Windows by command-line length (`os error 206`); the same repository check runs in Linux CI\n- clean Fresh/Vite client + SSR production build: passed (1,380 client and 3,212 SSR modules)\n- emitted client graph: exactly one `hooks.module.mjs` and one `signals.module.mjs`\n- timestamped packaged output: `eis-chat-singleton-20260716T105913Z`\n- packaged service health: Garnet listening; all six HTTP endpoints returned 200\n- packaged browser smoke: chat streamed without hard refresh; KB page and image OCR completed; zero console errors\n- Aspire smoke: dashboard HTTP 200 and telemetry present for `eis-chat-desktop`, `streams`, `workers-api`, `workers`, `eischat`, and both MCP services\n- head CI: **all gates passed** on Deno 2.9.3, including formatting, dashboard/workspace type checks, 144 tests, and the cold Linux Vite client+SSR build ([run 29496352343](https://github.com/rickylabs/eis-chat/actions/runs/29496352343))\n\n## References\n\n- [Fresh 2.3 Vite changes](https://deno.com/blog/fresh-2.3)\n- [Deno OpenTelemetry configuration](https://docs.deno.com/runtime/fundamentals/open_telemetry/#configuration)\n- [Aspire standalone dashboard](https://aspire.dev/dashboard/standalone/)\n- [Aspire dashboard configuration](https://aspire.dev/dashboard/configuration)\n- [Aspire standalone limitations](https://aspire.dev/dashboard/standalone/#unavailable-features-when-standalone)\n- [Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/)", + "created_at": "2026-07-15T16:08:41Z", + "updated_at": "2026-07-16T12:14:43Z", + "closed_at": "2026-07-16T12:14:42Z", + "merged_at": "2026-07-16T12:14:42Z", + "merge_commit_sha": "aeaf2df5c62733f28da970e232c54cb7f0010281", + "assignees": [], + "requested_reviewers": [], + "requested_teams": [], + "labels": [], + "milestone": null, + "draft": false, + "commits_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150/commits", + "review_comments_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150/comments", + "review_comment_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/150/comments", + "statuses_url": "https://api.github.com/repos/rickylabs/eis-chat/statuses/8cdedd307a646cfb217e9e2b1928fac8467dc405", + "head": { + "label": "rickylabs:agent/windows-singleton-desktop", + "ref": "agent/windows-singleton-desktop", + "sha": "8cdedd307a646cfb217e9e2b1928fac8467dc405", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "repo": { + "id": 1283935240, + "node_id": "R_kgDOTIdMCA", + "name": "eis-chat", + "full_name": "rickylabs/eis-chat", + "private": true, + "owner": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/rickylabs/eis-chat", + "description": "Self-hosted desktop context-accumulator (Deno desktop + Fresh + TanStack AI) grounding ad-hoc context against the legacy-archeo graph via MCP. MVP reusing eiskap seams.", + "fork": false, + "url": "https://api.github.com/repos/rickylabs/eis-chat", + "forks_url": "https://api.github.com/repos/rickylabs/eis-chat/forks", + "keys_url": "https://api.github.com/repos/rickylabs/eis-chat/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rickylabs/eis-chat/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rickylabs/eis-chat/teams", + "hooks_url": "https://api.github.com/repos/rickylabs/eis-chat/hooks", + "issue_events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/events{/number}", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/events", + "assignees_url": "https://api.github.com/repos/rickylabs/eis-chat/assignees{/user}", + "branches_url": "https://api.github.com/repos/rickylabs/eis-chat/branches{/branch}", + "tags_url": "https://api.github.com/repos/rickylabs/eis-chat/tags", + "blobs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rickylabs/eis-chat/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rickylabs/eis-chat/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rickylabs/eis-chat/languages", + "stargazers_url": "https://api.github.com/repos/rickylabs/eis-chat/stargazers", + "contributors_url": "https://api.github.com/repos/rickylabs/eis-chat/contributors", + "subscribers_url": "https://api.github.com/repos/rickylabs/eis-chat/subscribers", + "subscription_url": "https://api.github.com/repos/rickylabs/eis-chat/subscription", + "commits_url": "https://api.github.com/repos/rickylabs/eis-chat/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/{+path}", + "compare_url": "https://api.github.com/repos/rickylabs/eis-chat/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rickylabs/eis-chat/merges", + "archive_url": "https://api.github.com/repos/rickylabs/eis-chat/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rickylabs/eis-chat/downloads", + "issues_url": "https://api.github.com/repos/rickylabs/eis-chat/issues{/number}", + "pulls_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rickylabs/eis-chat/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rickylabs/eis-chat/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/labels{/name}", + "releases_url": "https://api.github.com/repos/rickylabs/eis-chat/releases{/id}", + "deployments_url": "https://api.github.com/repos/rickylabs/eis-chat/deployments", + "created_at": "2026-06-29T11:21:39Z", + "updated_at": "2026-07-16T12:15:18Z", + "pushed_at": "2026-07-16T21:53:17Z", + "git_url": "git://github.com/rickylabs/eis-chat.git", + "ssh_url": "git@github.com:rickylabs/eis-chat.git", + "clone_url": "https://github.com/rickylabs/eis-chat.git", + "svn_url": "https://github.com/rickylabs/eis-chat", + "homepage": null, + "size": 9835, + "stargazers_count": 0, + "watchers_count": 0, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [], + "visibility": "private", + "forks": 0, + "open_issues": 17, + "watchers": 0, + "default_branch": "master" + } + }, + "base": { + "label": "rickylabs:master", + "ref": "master", + "sha": "a7e7d2809fdf4dfb285977a6d794156db66277a3", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "repo": { + "id": 1283935240, + "node_id": "R_kgDOTIdMCA", + "name": "eis-chat", + "full_name": "rickylabs/eis-chat", + "private": true, + "owner": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/rickylabs/eis-chat", + "description": "Self-hosted desktop context-accumulator (Deno desktop + Fresh + TanStack AI) grounding ad-hoc context against the legacy-archeo graph via MCP. MVP reusing eiskap seams.", + "fork": false, + "url": "https://api.github.com/repos/rickylabs/eis-chat", + "forks_url": "https://api.github.com/repos/rickylabs/eis-chat/forks", + "keys_url": "https://api.github.com/repos/rickylabs/eis-chat/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rickylabs/eis-chat/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rickylabs/eis-chat/teams", + "hooks_url": "https://api.github.com/repos/rickylabs/eis-chat/hooks", + "issue_events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/events{/number}", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/events", + "assignees_url": "https://api.github.com/repos/rickylabs/eis-chat/assignees{/user}", + "branches_url": "https://api.github.com/repos/rickylabs/eis-chat/branches{/branch}", + "tags_url": "https://api.github.com/repos/rickylabs/eis-chat/tags", + "blobs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rickylabs/eis-chat/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rickylabs/eis-chat/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rickylabs/eis-chat/languages", + "stargazers_url": "https://api.github.com/repos/rickylabs/eis-chat/stargazers", + "contributors_url": "https://api.github.com/repos/rickylabs/eis-chat/contributors", + "subscribers_url": "https://api.github.com/repos/rickylabs/eis-chat/subscribers", + "subscription_url": "https://api.github.com/repos/rickylabs/eis-chat/subscription", + "commits_url": "https://api.github.com/repos/rickylabs/eis-chat/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/{+path}", + "compare_url": "https://api.github.com/repos/rickylabs/eis-chat/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rickylabs/eis-chat/merges", + "archive_url": "https://api.github.com/repos/rickylabs/eis-chat/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rickylabs/eis-chat/downloads", + "issues_url": "https://api.github.com/repos/rickylabs/eis-chat/issues{/number}", + "pulls_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rickylabs/eis-chat/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rickylabs/eis-chat/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/labels{/name}", + "releases_url": "https://api.github.com/repos/rickylabs/eis-chat/releases{/id}", + "deployments_url": "https://api.github.com/repos/rickylabs/eis-chat/deployments", + "created_at": "2026-06-29T11:21:39Z", + "updated_at": "2026-07-16T12:15:18Z", + "pushed_at": "2026-07-16T21:53:17Z", + "git_url": "git://github.com/rickylabs/eis-chat.git", + "ssh_url": "git@github.com:rickylabs/eis-chat.git", + "clone_url": "https://github.com/rickylabs/eis-chat.git", + "svn_url": "https://github.com/rickylabs/eis-chat", + "homepage": null, + "size": 9835, + "stargazers_count": 0, + "watchers_count": 0, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [], + "visibility": "private", + "forks": 0, + "open_issues": 17, + "watchers": 0, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150" + }, + "html": { + "href": "https://github.com/rickylabs/eis-chat/pull/150" + }, + "issue": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/issues/150" + }, + "comments": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/issues/150/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/pulls/150/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/rickylabs/eis-chat/statuses/8cdedd307a646cfb217e9e2b1928fac8467dc405" + } + }, + "author_association": "OWNER", + "auto_merge": null, + "assignee": null, + "active_lock_reason": null, + "merged": true, + "mergeable": null, + "rebaseable": null, + "mergeable_state": "unknown", + "merged_by": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "comments": 0, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 13, + "additions": 1018, + "deletions": 72, + "changed_files": 19 +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-repo.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-repo.json new file mode 100644 index 000000000..69af16856 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-repo.json @@ -0,0 +1,124 @@ +{ + "id": 1283935240, + "node_id": "R_kgDOTIdMCA", + "name": "eis-chat", + "full_name": "rickylabs/eis-chat", + "private": true, + "owner": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/rickylabs/eis-chat", + "description": "Self-hosted desktop context-accumulator (Deno desktop + Fresh + TanStack AI) grounding ad-hoc context against the legacy-archeo graph via MCP. MVP reusing eiskap seams.", + "fork": false, + "url": "https://api.github.com/repos/rickylabs/eis-chat", + "forks_url": "https://api.github.com/repos/rickylabs/eis-chat/forks", + "keys_url": "https://api.github.com/repos/rickylabs/eis-chat/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rickylabs/eis-chat/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rickylabs/eis-chat/teams", + "hooks_url": "https://api.github.com/repos/rickylabs/eis-chat/hooks", + "issue_events_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/events{/number}", + "events_url": "https://api.github.com/repos/rickylabs/eis-chat/events", + "assignees_url": "https://api.github.com/repos/rickylabs/eis-chat/assignees{/user}", + "branches_url": "https://api.github.com/repos/rickylabs/eis-chat/branches{/branch}", + "tags_url": "https://api.github.com/repos/rickylabs/eis-chat/tags", + "blobs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rickylabs/eis-chat/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rickylabs/eis-chat/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rickylabs/eis-chat/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rickylabs/eis-chat/languages", + "stargazers_url": "https://api.github.com/repos/rickylabs/eis-chat/stargazers", + "contributors_url": "https://api.github.com/repos/rickylabs/eis-chat/contributors", + "subscribers_url": "https://api.github.com/repos/rickylabs/eis-chat/subscribers", + "subscription_url": "https://api.github.com/repos/rickylabs/eis-chat/subscription", + "commits_url": "https://api.github.com/repos/rickylabs/eis-chat/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rickylabs/eis-chat/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rickylabs/eis-chat/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rickylabs/eis-chat/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rickylabs/eis-chat/contents/{+path}", + "compare_url": "https://api.github.com/repos/rickylabs/eis-chat/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rickylabs/eis-chat/merges", + "archive_url": "https://api.github.com/repos/rickylabs/eis-chat/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rickylabs/eis-chat/downloads", + "issues_url": "https://api.github.com/repos/rickylabs/eis-chat/issues{/number}", + "pulls_url": "https://api.github.com/repos/rickylabs/eis-chat/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rickylabs/eis-chat/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rickylabs/eis-chat/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rickylabs/eis-chat/labels{/name}", + "releases_url": "https://api.github.com/repos/rickylabs/eis-chat/releases{/id}", + "deployments_url": "https://api.github.com/repos/rickylabs/eis-chat/deployments", + "created_at": "2026-06-29T11:21:39Z", + "updated_at": "2026-07-16T12:15:18Z", + "pushed_at": "2026-07-16T21:53:17Z", + "git_url": "git://github.com/rickylabs/eis-chat.git", + "ssh_url": "git@github.com:rickylabs/eis-chat.git", + "clone_url": "https://github.com/rickylabs/eis-chat.git", + "svn_url": "https://github.com/rickylabs/eis-chat", + "homepage": null, + "size": 9835, + "stargazers_count": 0, + "watchers_count": 0, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": null, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "has_pull_requests": true, + "pull_request_creation_policy": "all", + "topics": [], + "visibility": "private", + "forks": 0, + "open_issues": 17, + "watchers": 0, + "default_branch": "master", + "permissions": { + "admin": true, + "maintain": true, + "push": true, + "triage": true, + "pull": true + }, + "temp_clone_token": "A627SWMOPUXX7XPU2S7YLNDKLH7M2", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "allow_auto_merge": false, + "delete_branch_on_merge": false, + "allow_update_branch": false, + "use_squash_pr_title_as_default": false, + "squash_merge_commit_message": "COMMIT_MESSAGES", + "squash_merge_commit_title": "COMMIT_OR_PR_TITLE", + "merge_commit_message": "PR_TITLE", + "merge_commit_title": "MERGE_MESSAGE", + "network_count": 0, + "subscribers_count": 0 +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-tree-aeaf2df.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-tree-aeaf2df.json new file mode 100644 index 000000000..0c66e1c0a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ec-tree-aeaf2df.json @@ -0,0 +1,11758 @@ +{ + "sha": "aeaf2df5c62733f28da970e232c54cb7f0010281", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/aeaf2df5c62733f28da970e232c54cb7f0010281", + "tree": [ + { + "path": ".agents", + "mode": "040000", + "type": "tree", + "sha": "2658693557928cea3fbf4914514a59602223059f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2658693557928cea3fbf4914514a59602223059f" + }, + { + "path": ".agents/skills", + "mode": "040000", + "type": "tree", + "sha": "1c62fd21357a560144d4cc69a1a2578f1b1d6cb2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/1c62fd21357a560144d4cc69a1a2578f1b1d6cb2" + }, + { + "path": ".agents/skills/aspire-deployment", + "mode": "040000", + "type": "tree", + "sha": "0fbbb459cf351ad44345a76146ce4a71ed5528c7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/0fbbb459cf351ad44345a76146ce4a71ed5528c7" + }, + { + "path": ".agents/skills/aspire-deployment/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "5a7ebe0d4195c6a1a63b42c48fbf96fc24b64b26", + "size": 15942, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5a7ebe0d4195c6a1a63b42c48fbf96fc24b64b26" + }, + { + "path": ".agents/skills/aspire-deployment/references", + "mode": "040000", + "type": "tree", + "sha": "b9058428320dd60fd5ea09e203b0d1af9233e370", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b9058428320dd60fd5ea09e203b0d1af9233e370" + }, + { + "path": ".agents/skills/aspire-deployment/references/aws.md", + "mode": "100644", + "type": "blob", + "sha": "e00750a5b87cdb9026c7c953161e6bb9730df430", + "size": 8637, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e00750a5b87cdb9026c7c953161e6bb9730df430" + }, + { + "path": ".agents/skills/aspire-deployment/references/azure.md", + "mode": "100644", + "type": "blob", + "sha": "e8a9dd833bb0f64371a5d7613e0623452c28efc9", + "size": 19545, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e8a9dd833bb0f64371a5d7613e0623452c28efc9" + }, + { + "path": ".agents/skills/aspire-deployment/references/cicd.md", + "mode": "100644", + "type": "blob", + "sha": "26343353707694c09c406c4955322165f73aa495", + "size": 14761, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/26343353707694c09c406c4955322165f73aa495" + }, + { + "path": ".agents/skills/aspire-deployment/references/docker-compose.md", + "mode": "100644", + "type": "blob", + "sha": "8db92ca1c87f41bc40acaf6223e640eb9fcc3d31", + "size": 6917, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8db92ca1c87f41bc40acaf6223e640eb9fcc3d31" + }, + { + "path": ".agents/skills/aspire-deployment/references/github-actions-azure-csharp.yml", + "mode": "100644", + "type": "blob", + "sha": "76abb909fe1e32bc929bd2eaaf7a11589bb26432", + "size": 1594, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/76abb909fe1e32bc929bd2eaaf7a11589bb26432" + }, + { + "path": ".agents/skills/aspire-deployment/references/github-actions-azure-typescript.yml", + "mode": "100644", + "type": "blob", + "sha": "6517dd358b93d53150bf13e730f28d2009543a32", + "size": 1559, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6517dd358b93d53150bf13e730f28d2009543a32" + }, + { + "path": ".agents/skills/aspire-deployment/references/javascript.md", + "mode": "100644", + "type": "blob", + "sha": "c82f911fce53ec37677b11ddc691171819a2f873", + "size": 8136, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c82f911fce53ec37677b11ddc691171819a2f873" + }, + { + "path": ".agents/skills/aspire-deployment/references/kubernetes.md", + "mode": "100644", + "type": "blob", + "sha": "32108c976ab07a19c7cee38af9e8db0cad4f1f1f", + "size": 13720, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/32108c976ab07a19c7cee38af9e8db0cad4f1f1f" + }, + { + "path": ".agents/skills/aspire-deployment/references/preflight.md", + "mode": "100644", + "type": "blob", + "sha": "52361d85f67947665094d2a7464cf6a0d964bbb3", + "size": 9843, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/52361d85f67947665094d2a7464cf6a0d964bbb3" + }, + { + "path": ".agents/skills/aspire-init", + "mode": "040000", + "type": "tree", + "sha": "3ff81586e07824f6173b0a10cc3dbcdf0544dd4b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3ff81586e07824f6173b0a10cc3dbcdf0544dd4b" + }, + { + "path": ".agents/skills/aspire-init/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "75a894b6b909d36c9b125f7b6e8f93e5b39c0bab", + "size": 7726, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/75a894b6b909d36c9b125f7b6e8f93e5b39c0bab" + }, + { + "path": ".agents/skills/aspire-init/references", + "mode": "040000", + "type": "tree", + "sha": "c590ba4d4eb30868bd804b575b7be9f5de948eb7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c590ba4d4eb30868bd804b575b7be9f5de948eb7" + }, + { + "path": ".agents/skills/aspire-init/references/init-workflow.md", + "mode": "100644", + "type": "blob", + "sha": "ea24ffa7b375a4e11cd4da230aa4bb440205cf3e", + "size": 5975, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ea24ffa7b375a4e11cd4da230aa4bb440205cf3e" + }, + { + "path": ".agents/skills/aspire-init/references/templates.md", + "mode": "100644", + "type": "blob", + "sha": "044b6c34d392dd56a76107e0e51d77f11ebd852a", + "size": 3909, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/044b6c34d392dd56a76107e0e51d77f11ebd852a" + }, + { + "path": ".agents/skills/aspire-monitoring", + "mode": "040000", + "type": "tree", + "sha": "8bb2fa76f16fe2cea4939eaebf84cfe4bbb1d81a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8bb2fa76f16fe2cea4939eaebf84cfe4bbb1d81a" + }, + { + "path": ".agents/skills/aspire-monitoring/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "6e26e36e240a147be83c6203aa865161f0c75c7a", + "size": 12522, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e26e36e240a147be83c6203aa865161f0c75c7a" + }, + { + "path": ".agents/skills/aspire-monitoring/references", + "mode": "040000", + "type": "tree", + "sha": "e4914b9902674695d27228917dfd994059544c50", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e4914b9902674695d27228917dfd994059544c50" + }, + { + "path": ".agents/skills/aspire-monitoring/references/diagnostics-bridge.md", + "mode": "100644", + "type": "blob", + "sha": "7a7c6d77e1783ad4f5f50b8cfcff1d1263850279", + "size": 11418, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a7c6d77e1783ad4f5f50b8cfcff1d1263850279" + }, + { + "path": ".agents/skills/aspire-monitoring/references/monitoring.md", + "mode": "100644", + "type": "blob", + "sha": "1a4898996c66a46d1467f895949a5aeee2e617fb", + "size": 8577, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1a4898996c66a46d1467f895949a5aeee2e617fb" + }, + { + "path": ".agents/skills/aspire-monitoring/references/playwright-handoff.md", + "mode": "100644", + "type": "blob", + "sha": "4c22b230935bb6515744af502aa6e5863888b061", + "size": 963, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c22b230935bb6515744af502aa6e5863888b061" + }, + { + "path": ".agents/skills/aspire-orchestration", + "mode": "040000", + "type": "tree", + "sha": "116b3a44bb0b1ee4a7fcc301b46c9ac3ce39d15f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/116b3a44bb0b1ee4a7fcc301b46c9ac3ce39d15f" + }, + { + "path": ".agents/skills/aspire-orchestration/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "974cf2230f6a000191254cc4092c2122e7c69b47", + "size": 13217, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/974cf2230f6a000191254cc4092c2122e7c69b47" + }, + { + "path": ".agents/skills/aspire-orchestration/references", + "mode": "040000", + "type": "tree", + "sha": "4c55469c35651c4f8976c6a3f892a32b412b95de", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4c55469c35651c4f8976c6a3f892a32b412b95de" + }, + { + "path": ".agents/skills/aspire-orchestration/references/agent-workflows.md", + "mode": "100644", + "type": "blob", + "sha": "d5d34729d31780a37fed5fba5771a720878a96a2", + "size": 6019, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d5d34729d31780a37fed5fba5771a720878a96a2" + }, + { + "path": ".agents/skills/aspire-orchestration/references/app-commands.md", + "mode": "100644", + "type": "blob", + "sha": "1c3254036ff869ca363455185cced62b076f41ec", + "size": 6273, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1c3254036ff869ca363455185cced62b076f41ec" + }, + { + "path": ".agents/skills/aspire-orchestration/references/detection.md", + "mode": "100644", + "type": "blob", + "sha": "b0cba929d391b1e56162d70551efd0f68efc9ff9", + "size": 5214, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b0cba929d391b1e56162d70551efd0f68efc9ff9" + }, + { + "path": ".agents/skills/aspire-orchestration/references/resource-management.md", + "mode": "100644", + "type": "blob", + "sha": "7a5b7984abd349995061f3bbc5c254f6320da19f", + "size": 1934, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a5b7984abd349995061f3bbc5c254f6320da19f" + }, + { + "path": ".agents/skills/aspire-orchestration/references/safety-guardrails.md", + "mode": "100644", + "type": "blob", + "sha": "4cc337b294ee022df8b614b7a758777372925ad1", + "size": 10553, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4cc337b294ee022df8b614b7a758777372925ad1" + }, + { + "path": ".agents/skills/aspire", + "mode": "040000", + "type": "tree", + "sha": "91b6045b9ff9ae109f278efb03a5171bbf52ab90", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/91b6045b9ff9ae109f278efb03a5171bbf52ab90" + }, + { + "path": ".agents/skills/aspire/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "409c5ead8bf5df19d9088400ad6b31a9d4fe2662", + "size": 10764, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/409c5ead8bf5df19d9088400ad6b31a9d4fe2662" + }, + { + "path": ".agents/skills/aspire/references", + "mode": "040000", + "type": "tree", + "sha": "89b9f1345cf4755bebfcbf44a958ca1c9789de10", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/89b9f1345cf4755bebfcbf44a958ca1c9789de10" + }, + { + "path": ".agents/skills/aspire/references/aspire-13-3-breaking-changes.md", + "mode": "100644", + "type": "blob", + "sha": "2419ef593d34af2232050e17cb6998a19d6ba1d5", + "size": 6932, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2419ef593d34af2232050e17cb6998a19d6ba1d5" + }, + { + "path": ".agents/skills/aspireify", + "mode": "040000", + "type": "tree", + "sha": "df1b18742e33e016937aec9b2133e62ce8baa303", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/df1b18742e33e016937aec9b2133e62ce8baa303" + }, + { + "path": ".agents/skills/aspireify/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "4219af53fcae9aaed80a7610e0915542e2545c10", + "size": 18296, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4219af53fcae9aaed80a7610e0915542e2545c10" + }, + { + "path": ".agents/skills/aspireify/references", + "mode": "040000", + "type": "tree", + "sha": "0ff22d80f46e2940158e1897cef9e3492cf7c2ac", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/0ff22d80f46e2940158e1897cef9e3492cf7c2ac" + }, + { + "path": ".agents/skills/aspireify/references/apphost-wiring.md", + "mode": "100644", + "type": "blob", + "sha": "77b31d099db175c3c2c3e220422722049b13ffed", + "size": 18159, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/77b31d099db175c3c2c3e220422722049b13ffed" + }, + { + "path": ".agents/skills/aspireify/references/csharp-authoring.md", + "mode": "100644", + "type": "blob", + "sha": "3ac06bf36fdb3cabed99cba743d4cef0926a06de", + "size": 6360, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3ac06bf36fdb3cabed99cba743d4cef0926a06de" + }, + { + "path": ".agents/skills/aspireify/references/docker-compose.md", + "mode": "100644", + "type": "blob", + "sha": "54ae1206f2cfe7aef56c0d4ac4fdb1c34cd20a50", + "size": 9835, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/54ae1206f2cfe7aef56c0d4ac4fdb1c34cd20a50" + }, + { + "path": ".agents/skills/aspireify/references/full-solution-apphosts.md", + "mode": "100644", + "type": "blob", + "sha": "d5939db33d37afbe178123fd2b9cd0375c451f12", + "size": 16014, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d5939db33d37afbe178123fd2b9cd0375c451f12" + }, + { + "path": ".agents/skills/aspireify/references/javascript-apps.md", + "mode": "100644", + "type": "blob", + "sha": "fb1335b96159574e1728b283f40ec8137498a7bd", + "size": 7081, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fb1335b96159574e1728b283f40ec8137498a7bd" + }, + { + "path": ".agents/skills/aspireify/references/opentelemetry.md", + "mode": "100644", + "type": "blob", + "sha": "382fe8f79c7ef9bbadbf418034244427955eed99", + "size": 3873, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/382fe8f79c7ef9bbadbf418034244427955eed99" + }, + { + "path": ".agents/skills/aspireify/references/scan-and-propose.md", + "mode": "100644", + "type": "blob", + "sha": "20a01d46a79fc02259e8e9b0bb7af8eada433bd3", + "size": 6545, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/20a01d46a79fc02259e8e9b0bb7af8eada433bd3" + }, + { + "path": ".agents/skills/aspireify/references/service-defaults.md", + "mode": "100644", + "type": "blob", + "sha": "0f8b417f370d44760615b2fb6f59901de825a5b2", + "size": 3548, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0f8b417f370d44760615b2fb6f59901de825a5b2" + }, + { + "path": ".agents/skills/aspireify/references/typescript-authoring.md", + "mode": "100644", + "type": "blob", + "sha": "6e4cb25be6fbe236f29360e92cfe6208dace7827", + "size": 8616, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e4cb25be6fbe236f29360e92cfe6208dace7827" + }, + { + "path": ".agents/skills/aspireify/references/validation.md", + "mode": "100644", + "type": "blob", + "sha": "0c9b1efb971c5c710ca57c5b8f430f02d26c6433", + "size": 3580, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0c9b1efb971c5c710ca57c5b8f430f02d26c6433" + }, + { + "path": ".agents/skills/playwright-cli", + "mode": "040000", + "type": "tree", + "sha": "4da7802c1b788ca0054c45d868cc593f6fb3d385", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4da7802c1b788ca0054c45d868cc593f6fb3d385" + }, + { + "path": ".agents/skills/playwright-cli/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "2fa5d0e96f9fe6617f1c48cb6889b9e71216fd81", + "size": 11903, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2fa5d0e96f9fe6617f1c48cb6889b9e71216fd81" + }, + { + "path": ".agents/skills/playwright-cli/references", + "mode": "040000", + "type": "tree", + "sha": "89ee280bca979a73772fdf536e5e2e469bf967b7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/89ee280bca979a73772fdf536e5e2e469bf967b7" + }, + { + "path": ".agents/skills/playwright-cli/references/element-attributes.md", + "mode": "100644", + "type": "blob", + "sha": "4e9fa6b99103bbe4e1262c37a9c4a664dfe1dbd5", + "size": 665, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4e9fa6b99103bbe4e1262c37a9c4a664dfe1dbd5" + }, + { + "path": ".agents/skills/playwright-cli/references/playwright-tests.md", + "mode": "100644", + "type": "blob", + "sha": "bec2ec90e4adbc6ed56f06ab19c34916ce7f736b", + "size": 1690, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bec2ec90e4adbc6ed56f06ab19c34916ce7f736b" + }, + { + "path": ".agents/skills/playwright-cli/references/request-mocking.md", + "mode": "100644", + "type": "blob", + "sha": "9005fda67dfc4af13848fd9ebedee08420aeec97", + "size": 2182, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9005fda67dfc4af13848fd9ebedee08420aeec97" + }, + { + "path": ".agents/skills/playwright-cli/references/running-code.md", + "mode": "100644", + "type": "blob", + "sha": "98b541fb54cd68942795bc81519684eb2f58ecc9", + "size": 5642, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98b541fb54cd68942795bc81519684eb2f58ecc9" + }, + { + "path": ".agents/skills/playwright-cli/references/session-management.md", + "mode": "100644", + "type": "blob", + "sha": "bf39acd5f4e3863d1dc2891d50183c03a5293646", + "size": 5671, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf39acd5f4e3863d1dc2891d50183c03a5293646" + }, + { + "path": ".agents/skills/playwright-cli/references/spec-driven-testing.md", + "mode": "100644", + "type": "blob", + "sha": "336dbfc13a3d3f88c852d8d7420500357750c395", + "size": 11578, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/336dbfc13a3d3f88c852d8d7420500357750c395" + }, + { + "path": ".agents/skills/playwright-cli/references/storage-state.md", + "mode": "100644", + "type": "blob", + "sha": "bb5021a09097127c051eaad83a262ff755e62971", + "size": 5198, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bb5021a09097127c051eaad83a262ff755e62971" + }, + { + "path": ".agents/skills/playwright-cli/references/test-generation.md", + "mode": "100644", + "type": "blob", + "sha": "a045c55d6e673a5258d9b7819a196c98ebd868e1", + "size": 4585, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a045c55d6e673a5258d9b7819a196c98ebd868e1" + }, + { + "path": ".agents/skills/playwright-cli/references/tracing.md", + "mode": "100644", + "type": "blob", + "sha": "7ce7babbdf17c685a65228d4328e56fbd42e10a2", + "size": 3440, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ce7babbdf17c685a65228d4328e56fbd42e10a2" + }, + { + "path": ".agents/skills/playwright-cli/references/video-recording.md", + "mode": "100644", + "type": "blob", + "sha": "5209d21ee09805485d1ce12e8bc70176f9b69e25", + "size": 5387, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5209d21ee09805485d1ce12e8bc70176f9b69e25" + }, + { + "path": ".env.example", + "mode": "100644", + "type": "blob", + "sha": "01bdbc57d725cd3e50b17b0e681f524314ecffcc", + "size": 2354, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/01bdbc57d725cd3e50b17b0e681f524314ecffcc" + }, + { + "path": ".gitattributes", + "mode": "100644", + "type": "blob", + "sha": "71910b87e0562d938334484ba13704470393cf01", + "size": 411, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/71910b87e0562d938334484ba13704470393cf01" + }, + { + "path": ".github", + "mode": "040000", + "type": "tree", + "sha": "acb0841bf4886eb82d2f4b031a5fb45359b80ad8", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/acb0841bf4886eb82d2f4b031a5fb45359b80ad8" + }, + { + "path": ".github/workflows", + "mode": "040000", + "type": "tree", + "sha": "c7b29b376fa13c3838cd0eb6cb02b7f2d87ec041", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c7b29b376fa13c3838cd0eb6cb02b7f2d87ec041" + }, + { + "path": ".github/workflows/ci.yml", + "mode": "100644", + "type": "blob", + "sha": "12fc8bf33979bc8bde5b64d84a8412812cfd74ae", + "size": 1677, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/12fc8bf33979bc8bde5b64d84a8412812cfd74ae" + }, + { + "path": ".gitignore", + "mode": "100644", + "type": "blob", + "sha": "e1a1814721e2dee1e388e71ffe3eeefbcb52790d", + "size": 961, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e1a1814721e2dee1e388e71ffe3eeefbcb52790d" + }, + { + "path": ".mcp.json", + "mode": "100644", + "type": "blob", + "sha": "4a6cfc7af91a62b3027ba2e4782c752464642849", + "size": 151, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4a6cfc7af91a62b3027ba2e4782c752464642849" + }, + { + "path": ".netscript", + "mode": "040000", + "type": "tree", + "sha": "979d2d73d3e1b578b04861a0dfa6f5657c594c5a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/979d2d73d3e1b578b04861a0dfa6f5657c594c5a" + }, + { + "path": ".netscript/generated", + "mode": "040000", + "type": "tree", + "sha": "283bd6c111dddd1990ffbc0759690d68dc54d8ac", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/283bd6c111dddd1990ffbc0759690d68dc54d8ac" + }, + { + "path": ".netscript/generated/plugin-workers", + "mode": "040000", + "type": "tree", + "sha": "882a516c22c778897727a505e5fe67c139adc5ff", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/882a516c22c778897727a505e5fe67c139adc5ff" + }, + { + "path": ".netscript/generated/plugin-workers/job-registry.ts", + "mode": "100644", + "type": "blob", + "sha": "fbaa86052b03b6f44ea7cac63a7d2aeca9b823e8", + "size": 1869, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fbaa86052b03b6f44ea7cac63a7d2aeca9b823e8" + }, + { + "path": "NOTICE", + "mode": "100644", + "type": "blob", + "sha": "4303fa9fd5eeca12e9aa5a5ff8fa9c25145f4cc8", + "size": 1244, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4303fa9fd5eeca12e9aa5a5ff8fa9c25145f4cc8" + }, + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "sha": "0d16f5c9cbdcfbb6ff668a13a4231369ce9ffccf", + "size": 4707, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0d16f5c9cbdcfbb6ff668a13a4231369ce9ffccf" + }, + { + "path": "apps", + "mode": "040000", + "type": "tree", + "sha": "24252d13370a70b69bf36810d78c1d10c13a0040", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/24252d13370a70b69bf36810d78c1d10c13a0040" + }, + { + "path": "apps/dashboard", + "mode": "040000", + "type": "tree", + "sha": "a1af3e6e780065ff16dbb566b3b45ac158f79da9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a1af3e6e780065ff16dbb566b3b45ac158f79da9" + }, + { + "path": "apps/dashboard/.generated", + "mode": "040000", + "type": "tree", + "sha": "841a69ffca05baef9eb8b757ed92337dc5a205b0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/841a69ffca05baef9eb8b757ed92337dc5a205b0" + }, + { + "path": "apps/dashboard/.generated/manifest.ts", + "mode": "100644", + "type": "blob", + "sha": "8f9915fef01dbe668ac32e78693a52b295e81e7e", + "size": 2121, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f9915fef01dbe668ac32e78693a52b295e81e7e" + }, + { + "path": "apps/dashboard/.generated/routes.ts", + "mode": "100644", + "type": "blob", + "sha": "c688bbd01f9bd143023e52471de5288865a97a4c", + "size": 4685, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c688bbd01f9bd143023e52471de5288865a97a4c" + }, + { + "path": "apps/dashboard/.gitignore", + "mode": "100644", + "type": "blob", + "sha": "0735100f50191e1544e9f8a8f5bef9525a1e717c", + "size": 196, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0735100f50191e1544e9f8a8f5bef9525a1e717c" + }, + { + "path": "apps/dashboard/README.md", + "mode": "100644", + "type": "blob", + "sha": "7547787b9976ef771b14419989dd5dbb38833cbe", + "size": 386, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7547787b9976ef771b14419989dd5dbb38833cbe" + }, + { + "path": "apps/dashboard/assets", + "mode": "040000", + "type": "tree", + "sha": "6fab80736201ddf8a99126c81e5fff97f398be34", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6fab80736201ddf8a99126c81e5fff97f398be34" + }, + { + "path": "apps/dashboard/assets/blocks", + "mode": "040000", + "type": "tree", + "sha": "efe79321fe1d5bed6a1b5b90883de81060f269eb", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/efe79321fe1d5bed6a1b5b90883de81060f269eb" + }, + { + "path": "apps/dashboard/assets/blocks/app-shell.css", + "mode": "100644", + "type": "blob", + "sha": "19beb26a5ce9af0558d151fe20e65d195c21ccee", + "size": 30318, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/19beb26a5ce9af0558d151fe20e65d195c21ccee" + }, + { + "path": "apps/dashboard/assets/blocks/blocks.css", + "mode": "100644", + "type": "blob", + "sha": "c4e04fc9a247573c7187b1256114765a617d3f51", + "size": 4045, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c4e04fc9a247573c7187b1256114765a617d3f51" + }, + { + "path": "apps/dashboard/assets/blocks/breadcrumbs.css", + "mode": "100644", + "type": "blob", + "sha": "d9b2f2964dbce02a644979427e7cd15985b872e1", + "size": 771, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d9b2f2964dbce02a644979427e7cd15985b872e1" + }, + { + "path": "apps/dashboard/assets/blocks/channel.css", + "mode": "100644", + "type": "blob", + "sha": "5c9c383666d4788fbe313a2f8389a15259a27515", + "size": 2903, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5c9c383666d4788fbe313a2f8389a15259a27515" + }, + { + "path": "apps/dashboard/assets/blocks/insights.css", + "mode": "100644", + "type": "blob", + "sha": "35afa380751562295cb77ab7ff770b75bc21dc7b", + "size": 6800, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/35afa380751562295cb77ab7ff770b75bc21dc7b" + }, + { + "path": "apps/dashboard/assets/blocks/knowledge.css", + "mode": "100644", + "type": "blob", + "sha": "226818ae456fc62ffc6f832cf51a469cc0753971", + "size": 5039, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/226818ae456fc62ffc6f832cf51a469cc0753971" + }, + { + "path": "apps/dashboard/assets/blocks/mcp.css", + "mode": "100644", + "type": "blob", + "sha": "0053d400e0d4efdf14105ae0fb06070bedb29389", + "size": 3352, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0053d400e0d4efdf14105ae0fb06070bedb29389" + }, + { + "path": "apps/dashboard/assets/blocks/nav-progress.css", + "mode": "100644", + "type": "blob", + "sha": "fcf6bc3484d6b10d6f0fc9dbbedc88613a05cbf6", + "size": 986, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fcf6bc3484d6b10d6f0fc9dbbedc88613a05cbf6" + }, + { + "path": "apps/dashboard/assets/blocks/session-actions.css", + "mode": "100644", + "type": "blob", + "sha": "314881fd26f3bafd675c5a0fb7fc35773a605680", + "size": 2864, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/314881fd26f3bafd675c5a0fb7fc35773a605680" + }, + { + "path": "apps/dashboard/assets/blocks/session.css", + "mode": "100644", + "type": "blob", + "sha": "e5732d2d8be48170215829b599f934b7f6c6537e", + "size": 8878, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e5732d2d8be48170215829b599f934b7f6c6537e" + }, + { + "path": "apps/dashboard/assets/blocks/skills.css", + "mode": "100644", + "type": "blob", + "sha": "2f9e97cf53ec63a744f84cce1b5dcbef49ccdfc8", + "size": 7419, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2f9e97cf53ec63a744f84cce1b5dcbef49ccdfc8" + }, + { + "path": "apps/dashboard/assets/design.css", + "mode": "100644", + "type": "blob", + "sha": "877a3d9237dbab9407b186a8d11da6cf52ab6133", + "size": 16693, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/877a3d9237dbab9407b186a8d11da6cf52ab6133" + }, + { + "path": "apps/dashboard/assets/layouts.css", + "mode": "100644", + "type": "blob", + "sha": "0e2f2a4bb0429aa90e4eb90e792bf9b7142e2d62", + "size": 16965, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0e2f2a4bb0429aa90e4eb90e792bf9b7142e2d62" + }, + { + "path": "apps/dashboard/assets/styles.css", + "mode": "100644", + "type": "blob", + "sha": "a222ccc23c9595768c8654ad5c5370b7c6f34b11", + "size": 2543, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a222ccc23c9595768c8654ad5c5370b7c6f34b11" + }, + { + "path": "apps/dashboard/assets/theme-bridge.css", + "mode": "100644", + "type": "blob", + "sha": "2831b863ac1004659b325c1227f5ac3ae794d6c7", + "size": 3728, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2831b863ac1004659b325c1227f5ac3ae794d6c7" + }, + { + "path": "apps/dashboard/assets/tokens.css", + "mode": "100644", + "type": "blob", + "sha": "c8543e57f83fa7f7a13891d1212dfa255cab60a6", + "size": 8234, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c8543e57f83fa7f7a13891d1212dfa255cab60a6" + }, + { + "path": "apps/dashboard/assets/tokens.json", + "mode": "100644", + "type": "blob", + "sha": "076141fe4cb0d83ac266bb116606b69610c50548", + "size": 33922, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/076141fe4cb0d83ac266bb116606b69610c50548" + }, + { + "path": "apps/dashboard/assets/ui", + "mode": "040000", + "type": "tree", + "sha": "d3e513df4f3c1ff9c676eaada22e59fe70be738a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d3e513df4f3c1ff9c676eaada22e59fe70be738a" + }, + { + "path": "apps/dashboard/assets/ui/alert-styles.css", + "mode": "100644", + "type": "blob", + "sha": "dc9392e260909081bd7825b94525cece271c1c04", + "size": 1962, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dc9392e260909081bd7825b94525cece271c1c04" + }, + { + "path": "apps/dashboard/assets/ui/alert.css", + "mode": "100644", + "type": "blob", + "sha": "9d2e9b18ca97a51f8dbfd2bc157b82a4f457691c", + "size": 162, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9d2e9b18ca97a51f8dbfd2bc157b82a4f457691c" + }, + { + "path": "apps/dashboard/assets/ui/attach-strip.css", + "mode": "100644", + "type": "blob", + "sha": "5b7ca289f8014441556721c077604e080b38d6ce", + "size": 1211, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5b7ca289f8014441556721c077604e080b38d6ce" + }, + { + "path": "apps/dashboard/assets/ui/avatar.css", + "mode": "100644", + "type": "blob", + "sha": "46e29141d9110b09c0efaf550d50ecabdea106c0", + "size": 1458, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/46e29141d9110b09c0efaf550d50ecabdea106c0" + }, + { + "path": "apps/dashboard/assets/ui/badge.css", + "mode": "100644", + "type": "blob", + "sha": "de095d70cc24632c6477023ad2a71f82b481b57b", + "size": 1222, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de095d70cc24632c6477023ad2a71f82b481b57b" + }, + { + "path": "apps/dashboard/assets/ui/button.css", + "mode": "100644", + "type": "blob", + "sha": "44e680653f17be36041fc98ce7af3d2976850aaa", + "size": 3980, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/44e680653f17be36041fc98ce7af3d2976850aaa" + }, + { + "path": "apps/dashboard/assets/ui/card.css", + "mode": "100644", + "type": "blob", + "sha": "5a8bd91d2718d8010d3f23e9e4853a81b344c873", + "size": 694, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5a8bd91d2718d8010d3f23e9e4853a81b344c873" + }, + { + "path": "apps/dashboard/assets/ui/chart-block.css", + "mode": "100644", + "type": "blob", + "sha": "ab6138a8be39cadbd0673168ee5516fa19233c79", + "size": 4444, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ab6138a8be39cadbd0673168ee5516fa19233c79" + }, + { + "path": "apps/dashboard/assets/ui/checkbox.css", + "mode": "100644", + "type": "blob", + "sha": "cbf16487fd4fb5d0386e138da12eb1866748102a", + "size": 764, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cbf16487fd4fb5d0386e138da12eb1866748102a" + }, + { + "path": "apps/dashboard/assets/ui/choice-styles.css", + "mode": "100644", + "type": "blob", + "sha": "37760a050c2e1a8ebae98fccbb51ea3cf20ce82b", + "size": 868, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/37760a050c2e1a8ebae98fccbb51ea3cf20ce82b" + }, + { + "path": "apps/dashboard/assets/ui/citation-chip.css", + "mode": "100644", + "type": "blob", + "sha": "b9a736397655e0e5c8c870471642677674c656a9", + "size": 1012, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b9a736397655e0e5c8c870471642677674c656a9" + }, + { + "path": "apps/dashboard/assets/ui/code-block.css", + "mode": "100644", + "type": "blob", + "sha": "61820174200d401b7dec9e2041c0db4d0518a48c", + "size": 2853, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/61820174200d401b7dec9e2041c0db4d0518a48c" + }, + { + "path": "apps/dashboard/assets/ui/command-palette.css", + "mode": "100644", + "type": "blob", + "sha": "e64d083e74d8f6c9654c02f5afda604c0a8724cd", + "size": 3610, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e64d083e74d8f6c9654c02f5afda604c0a8724cd" + }, + { + "path": "apps/dashboard/assets/ui/donut.css", + "mode": "100644", + "type": "blob", + "sha": "7b0a8181e682dfdc3d4b9978c9364a1a335ed7aa", + "size": 1751, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7b0a8181e682dfdc3d4b9978c9364a1a335ed7aa" + }, + { + "path": "apps/dashboard/assets/ui/dropzone.css", + "mode": "100644", + "type": "blob", + "sha": "dcf7f0d1eda1fa9f91881914253b62fe717b7a93", + "size": 1240, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dcf7f0d1eda1fa9f91881914253b62fe717b7a93" + }, + { + "path": "apps/dashboard/assets/ui/floating.css", + "mode": "100644", + "type": "blob", + "sha": "aaae9d50dd6c4aa2f3e0b64864eed7b6ad030352", + "size": 1056, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aaae9d50dd6c4aa2f3e0b64864eed7b6ad030352" + }, + { + "path": "apps/dashboard/assets/ui/form-control-styles.css", + "mode": "100644", + "type": "blob", + "sha": "957e683f4894e45590b512748a04f3accd50a30f", + "size": 1026, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/957e683f4894e45590b512748a04f3accd50a30f" + }, + { + "path": "apps/dashboard/assets/ui/form-field.css", + "mode": "100644", + "type": "blob", + "sha": "d77f4c008306dfedb9bce3247ce683ed2d4aa7c1", + "size": 411, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d77f4c008306dfedb9bce3247ce683ed2d4aa7c1" + }, + { + "path": "apps/dashboard/assets/ui/html-block.css", + "mode": "100644", + "type": "blob", + "sha": "0baf580e098058b1ae2f39f34252b59579d87cb4", + "size": 1067, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0baf580e098058b1ae2f39f34252b59579d87cb4" + }, + { + "path": "apps/dashboard/assets/ui/inline-notice.css", + "mode": "100644", + "type": "blob", + "sha": "4b94f818d3ae0472aa42eca787955709c3323356", + "size": 178, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4b94f818d3ae0472aa42eca787955709c3323356" + }, + { + "path": "apps/dashboard/assets/ui/label.css", + "mode": "100644", + "type": "blob", + "sha": "4350121057be248f4732844325bdb8aedbb08520", + "size": 224, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4350121057be248f4732844325bdb8aedbb08520" + }, + { + "path": "apps/dashboard/assets/ui/markdown.css", + "mode": "100644", + "type": "blob", + "sha": "8d6668e700e578dd0cbe1fbd740f679f4a764ecb", + "size": 6111, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8d6668e700e578dd0cbe1fbd740f679f4a764ecb" + }, + { + "path": "apps/dashboard/assets/ui/mcp-widget.css", + "mode": "100644", + "type": "blob", + "sha": "efe4ae81b764a9a528cdb2c256dd5ecf47510710", + "size": 1533, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/efe4ae81b764a9a528cdb2c256dd5ecf47510710" + }, + { + "path": "apps/dashboard/assets/ui/message.css", + "mode": "100644", + "type": "blob", + "sha": "f405ba59f61e43fd0fb74c0b23b0b8bc92f92cb2", + "size": 5337, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f405ba59f61e43fd0fb74c0b23b0b8bc92f92cb2" + }, + { + "path": "apps/dashboard/assets/ui/model-combobox.css", + "mode": "100644", + "type": "blob", + "sha": "665790d1c91870b40a911e345016d6513ae07276", + "size": 1488, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/665790d1c91870b40a911e345016d6513ae07276" + }, + { + "path": "apps/dashboard/assets/ui/model-selector.css", + "mode": "100644", + "type": "blob", + "sha": "d69b5a8c73d32a637161258af5214195d3fdfb4f", + "size": 2618, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d69b5a8c73d32a637161258af5214195d3fdfb4f" + }, + { + "path": "apps/dashboard/assets/ui/panel.css", + "mode": "100644", + "type": "blob", + "sha": "c2254098ff7b782788de1ce8111e90243690790a", + "size": 672, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c2254098ff7b782788de1ce8111e90243690790a" + }, + { + "path": "apps/dashboard/assets/ui/progress.css", + "mode": "100644", + "type": "blob", + "sha": "3d1504b31a13d7ba488872bcac4a4f8033d9ac67", + "size": 1463, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3d1504b31a13d7ba488872bcac4a4f8033d9ac67" + }, + { + "path": "apps/dashboard/assets/ui/prompt-input.css", + "mode": "100644", + "type": "blob", + "sha": "94cffcb92a621105d35a967237f4976360486934", + "size": 3694, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94cffcb92a621105d35a967237f4976360486934" + }, + { + "path": "apps/dashboard/assets/ui/responsive-table.css", + "mode": "100644", + "type": "blob", + "sha": "ac510acab3aeff765fb48514ed5ba878dc299d0a", + "size": 3298, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ac510acab3aeff765fb48514ed5ba878dc299d0a" + }, + { + "path": "apps/dashboard/assets/ui/search.css", + "mode": "100644", + "type": "blob", + "sha": "8e684d8364aa670cf7d1663cc7555e315f2faa8b", + "size": 1387, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8e684d8364aa670cf7d1663cc7555e315f2faa8b" + }, + { + "path": "apps/dashboard/assets/ui/separator.css", + "mode": "100644", + "type": "blob", + "sha": "63d1e320a2ba5750ca8b79a45aded0f72a4767ff", + "size": 213, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/63d1e320a2ba5750ca8b79a45aded0f72a4767ff" + }, + { + "path": "apps/dashboard/assets/ui/sheet.css", + "mode": "100644", + "type": "blob", + "sha": "418d1a4aa3fefa4b55b294ae74b788f6ef13d83f", + "size": 3558, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/418d1a4aa3fefa4b55b294ae74b788f6ef13d83f" + }, + { + "path": "apps/dashboard/assets/ui/skeleton.css", + "mode": "100644", + "type": "blob", + "sha": "2735f6d6438182ace2aa94d40ab347c29b1d9b5b", + "size": 1170, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2735f6d6438182ace2aa94d40ab347c29b1d9b5b" + }, + { + "path": "apps/dashboard/assets/ui/spinner.css", + "mode": "100644", + "type": "blob", + "sha": "6f46b2044763fcad59e219deb06ac62b391c776b", + "size": 628, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6f46b2044763fcad59e219deb06ac62b391c776b" + }, + { + "path": "apps/dashboard/assets/ui/surface-styles.css", + "mode": "100644", + "type": "blob", + "sha": "59c90afc1cea74991542c325908ef517cbab2021", + "size": 481, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59c90afc1cea74991542c325908ef517cbab2021" + }, + { + "path": "apps/dashboard/assets/ui/switch.css", + "mode": "100644", + "type": "blob", + "sha": "146e74bca1f3e805d00ef0068d83bd53df496c10", + "size": 1026, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/146e74bca1f3e805d00ef0068d83bd53df496c10" + }, + { + "path": "apps/dashboard/assets/ui/textarea.css", + "mode": "100644", + "type": "blob", + "sha": "2039aa639c63bd433dd2a350c7c0fbec94902ecf", + "size": 57, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2039aa639c63bd433dd2a350c7c0fbec94902ecf" + }, + { + "path": "apps/dashboard/assets/ui/toast.css", + "mode": "100644", + "type": "blob", + "sha": "3d52e6420ae761033bbc030bd393e16a1e208b8c", + "size": 6236, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3d52e6420ae761033bbc030bd393e16a1e208b8c" + }, + { + "path": "apps/dashboard/assets/ui/tool-call-card.css", + "mode": "100644", + "type": "blob", + "sha": "31fff1972b6a6f5e9f96899433b437ed6bbb710b", + "size": 2244, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31fff1972b6a6f5e9f96899433b437ed6bbb710b" + }, + { + "path": "apps/dashboard/assets/ui/ui-block.css", + "mode": "100644", + "type": "blob", + "sha": "cd587d0e1ab98566571b63f58954037e3c876f65", + "size": 38133, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cd587d0e1ab98566571b63f58954037e3c876f65" + }, + { + "path": "apps/dashboard/client.ts", + "mode": "100644", + "type": "blob", + "sha": "9d4a512544da15e810f3220b6376e850cedfcd74", + "size": 119, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9d4a512544da15e810f3220b6376e850cedfcd74" + }, + { + "path": "apps/dashboard/components", + "mode": "040000", + "type": "tree", + "sha": "aa7a6de43ec6760c8acbabad90547b4252024e44", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/aa7a6de43ec6760c8acbabad90547b4252024e44" + }, + { + "path": "apps/dashboard/components/blocks", + "mode": "040000", + "type": "tree", + "sha": "a5c982a505224ff53d0d9e1645a8775ebfabeae3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a5c982a505224ff53d0d9e1645a8775ebfabeae3" + }, + { + "path": "apps/dashboard/components/blocks/activity-feed.tsx", + "mode": "100644", + "type": "blob", + "sha": "df63c653d1baadb892e824066c2f3faa35b97948", + "size": 5683, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/df63c653d1baadb892e824066c2f3faa35b97948" + }, + { + "path": "apps/dashboard/components/blocks/breadcrumbs.tsx", + "mode": "100644", + "type": "blob", + "sha": "ec907bc7aa7e038ddc4f53a5876a84ba1bb2bb17", + "size": 3002, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ec907bc7aa7e038ddc4f53a5876a84ba1bb2bb17" + }, + { + "path": "apps/dashboard/components/blocks/channel-tree.tsx", + "mode": "100644", + "type": "blob", + "sha": "9a8c35608e57c2ec34412fb3640455326654f001", + "size": 3208, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9a8c35608e57c2ec34412fb3640455326654f001" + }, + { + "path": "apps/dashboard/components/blocks/chat-empty.tsx", + "mode": "100644", + "type": "blob", + "sha": "7bb6dbb43b6a70d8ab98d43e471eac1e481f7cc9", + "size": 2878, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7bb6dbb43b6a70d8ab98d43e471eac1e481f7cc9" + }, + { + "path": "apps/dashboard/components/blocks/connector.tsx", + "mode": "100644", + "type": "blob", + "sha": "102c0beeb72501c88792dc93df9821cd5291a090", + "size": 2384, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/102c0beeb72501c88792dc93df9821cd5291a090" + }, + { + "path": "apps/dashboard/components/blocks/context-rail.tsx", + "mode": "100644", + "type": "blob", + "sha": "332e486f47db327827b7c326fc76203f47371a2a", + "size": 9195, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/332e486f47db327827b7c326fc76203f47371a2a" + }, + { + "path": "apps/dashboard/components/blocks/data-grid.tsx", + "mode": "100644", + "type": "blob", + "sha": "fd9606f6d9aa0d941956b8cf4ca4bd7960db302f", + "size": 4607, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fd9606f6d9aa0d941956b8cf4ca4bd7960db302f" + }, + { + "path": "apps/dashboard/components/blocks/member-rail.tsx", + "mode": "100644", + "type": "blob", + "sha": "0eae20ae563f0785d56974b713629dc1c6fc8bff", + "size": 1859, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0eae20ae563f0785d56974b713629dc1c6fc8bff" + }, + { + "path": "apps/dashboard/components/blocks/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "c4ee27cbf1fab50d40ae4855e910b98d52d63bfa", + "size": 1035, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c4ee27cbf1fab50d40ae4855e910b98d52d63bfa" + }, + { + "path": "apps/dashboard/components/blocks/plugin-gated-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "2c6b70bb1a2be4767ebc2cde24466a5a2d879523", + "size": 1071, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2c6b70bb1a2be4767ebc2cde24466a5a2d879523" + }, + { + "path": "apps/dashboard/components/ui", + "mode": "040000", + "type": "tree", + "sha": "f2fb973b554c3f8e88001519ae9e7a7539959ec4", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f2fb973b554c3f8e88001519ae9e7a7539959ec4" + }, + { + "path": "apps/dashboard/components/ui/alert.tsx", + "mode": "100644", + "type": "blob", + "sha": "08ea956c47e118cc3304be735f5f550d056b781c", + "size": 1518, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/08ea956c47e118cc3304be735f5f550d056b781c" + }, + { + "path": "apps/dashboard/components/ui/avatar.tsx", + "mode": "100644", + "type": "blob", + "sha": "726f8f945a7949b444acb5cc5cb056f278b684ff", + "size": 2069, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/726f8f945a7949b444acb5cc5cb056f278b684ff" + }, + { + "path": "apps/dashboard/components/ui/badge.tsx", + "mode": "100644", + "type": "blob", + "sha": "9d0fd3da06db73aeb3d112f371498afef330087d", + "size": 1196, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9d0fd3da06db73aeb3d112f371498afef330087d" + }, + { + "path": "apps/dashboard/components/ui/breadcrumb.tsx", + "mode": "100644", + "type": "blob", + "sha": "2639d4c7e3a2c22e758631e30f62641703b3fda5", + "size": 2047, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2639d4c7e3a2c22e758631e30f62641703b3fda5" + }, + { + "path": "apps/dashboard/components/ui/button.tsx", + "mode": "100644", + "type": "blob", + "sha": "91125cb435f24b5165ba4e56da4df96da675e96c", + "size": 3855, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/91125cb435f24b5165ba4e56da4df96da675e96c" + }, + { + "path": "apps/dashboard/components/ui/card.tsx", + "mode": "100644", + "type": "blob", + "sha": "5776c6756e71e777a67553be86e8c3fd2120788b", + "size": 2332, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5776c6756e71e777a67553be86e8c3fd2120788b" + }, + { + "path": "apps/dashboard/components/ui/chart-block.tsx", + "mode": "100644", + "type": "blob", + "sha": "6e74eee0f3571f104e0a26519b9eabffb1e27acd", + "size": 5337, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e74eee0f3571f104e0a26519b9eabffb1e27acd" + }, + { + "path": "apps/dashboard/components/ui/checkbox.tsx", + "mode": "100644", + "type": "blob", + "sha": "0aa135786829a8402f01d48388ae31c37fe322e5", + "size": 1222, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0aa135786829a8402f01d48388ae31c37fe322e5" + }, + { + "path": "apps/dashboard/components/ui/citation-chip.tsx", + "mode": "100644", + "type": "blob", + "sha": "a3f76c91e860611d745a21300005def1e735b29e", + "size": 1266, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3f76c91e860611d745a21300005def1e735b29e" + }, + { + "path": "apps/dashboard/components/ui/code-block.tsx", + "mode": "100644", + "type": "blob", + "sha": "31c3317795898a40e3a8db7f3a922867913d9bd4", + "size": 1754, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31c3317795898a40e3a8db7f3a922867913d9bd4" + }, + { + "path": "apps/dashboard/components/ui/command-palette.tsx", + "mode": "100644", + "type": "blob", + "sha": "48e5f56c9e283ef2ff212713bb82ef995315dc88", + "size": 6283, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/48e5f56c9e283ef2ff212713bb82ef995315dc88" + }, + { + "path": "apps/dashboard/components/ui/control-props.ts", + "mode": "100644", + "type": "blob", + "sha": "bf6fafdd9d3c3551fd47907cbbc111b8652b2a33", + "size": 5030, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf6fafdd9d3c3551fd47907cbbc111b8652b2a33" + }, + { + "path": "apps/dashboard/components/ui/data-table.tsx", + "mode": "100644", + "type": "blob", + "sha": "ad01c223277948dede7ec97efbf7a2ffa372a582", + "size": 2581, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad01c223277948dede7ec97efbf7a2ffa372a582" + }, + { + "path": "apps/dashboard/components/ui/detail-layout.tsx", + "mode": "100644", + "type": "blob", + "sha": "d6945a784c1704cc127a61cfd0597a0d2a32a7bf", + "size": 1367, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d6945a784c1704cc127a61cfd0597a0d2a32a7bf" + }, + { + "path": "apps/dashboard/components/ui/donut.tsx", + "mode": "100644", + "type": "blob", + "sha": "7ae013498f116d1c9715e2797bdf2073425079d7", + "size": 2924, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ae013498f116d1c9715e2797bdf2073425079d7" + }, + { + "path": "apps/dashboard/components/ui/dropzone.tsx", + "mode": "100644", + "type": "blob", + "sha": "87cb6ab010880fe74e516d77046d8bbd90c44f7a", + "size": 1459, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/87cb6ab010880fe74e516d77046d8bbd90c44f7a" + }, + { + "path": "apps/dashboard/components/ui/empty-state.tsx", + "mode": "100644", + "type": "blob", + "sha": "11518db7707119093d2e03a663b455d10466771d", + "size": 853, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/11518db7707119093d2e03a663b455d10466771d" + }, + { + "path": "apps/dashboard/components/ui/filter-form.tsx", + "mode": "100644", + "type": "blob", + "sha": "7fc5c080c8cd9682adf607d853df2b3c7758c990", + "size": 1431, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7fc5c080c8cd9682adf607d853df2b3c7758c990" + }, + { + "path": "apps/dashboard/components/ui/form-field.tsx", + "mode": "100644", + "type": "blob", + "sha": "a7886690d2ea6fdc33911ae735bb0f0065456c0b", + "size": 1331, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a7886690d2ea6fdc33911ae735bb0f0065456c0b" + }, + { + "path": "apps/dashboard/components/ui/html-block.tsx", + "mode": "100644", + "type": "blob", + "sha": "31095abf8eee8a000646b9e093d1928bcc879ca6", + "size": 6750, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31095abf8eee8a000646b9e093d1928bcc879ca6" + }, + { + "path": "apps/dashboard/components/ui/icon-button.tsx", + "mode": "100644", + "type": "blob", + "sha": "7a6cfd2c26b26b1e6559306a824447351c958cda", + "size": 1409, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a6cfd2c26b26b1e6559306a824447351c958cda" + }, + { + "path": "apps/dashboard/components/ui/icon.tsx", + "mode": "100644", + "type": "blob", + "sha": "9a67d316120b66baf7013fe5c35725000540428b", + "size": 5217, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9a67d316120b66baf7013fe5c35725000540428b" + }, + { + "path": "apps/dashboard/components/ui/inline-notice.tsx", + "mode": "100644", + "type": "blob", + "sha": "84d873362fd0d92d20b37ae93e5b2f2028a84ab4", + "size": 1533, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/84d873362fd0d92d20b37ae93e5b2f2028a84ab4" + }, + { + "path": "apps/dashboard/components/ui/input.tsx", + "mode": "100644", + "type": "blob", + "sha": "a78493032b658b4738f2ad668de244f1b92d4ab4", + "size": 758, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a78493032b658b4738f2ad668de244f1b92d4ab4" + }, + { + "path": "apps/dashboard/components/ui/label.tsx", + "mode": "100644", + "type": "blob", + "sha": "194d49348266b4e6fbfc0119042a248f57e33298", + "size": 907, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/194d49348266b4e6fbfc0119042a248f57e33298" + }, + { + "path": "apps/dashboard/components/ui/markdown.tsx", + "mode": "100644", + "type": "blob", + "sha": "0b5a33aefa46efb42fc61a56fef4e9fa7c446005", + "size": 14160, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0b5a33aefa46efb42fc61a56fef4e9fa7c446005" + }, + { + "path": "apps/dashboard/components/ui/mcp-widget.tsx", + "mode": "100644", + "type": "blob", + "sha": "e3b7b489abe347b8aa49b177f350f940aaca52cd", + "size": 8689, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e3b7b489abe347b8aa49b177f350f940aaca52cd" + }, + { + "path": "apps/dashboard/components/ui/message.tsx", + "mode": "100644", + "type": "blob", + "sha": "c82f5d6d62e0ab5a9968ad545152821527465987", + "size": 13794, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c82f5d6d62e0ab5a9968ad545152821527465987" + }, + { + "path": "apps/dashboard/components/ui/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "01960c7fd33b7239317b8a28b4dd4128df239b93", + "size": 3018, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/01960c7fd33b7239317b8a28b4dd4128df239b93" + }, + { + "path": "apps/dashboard/components/ui/model-selector.tsx", + "mode": "100644", + "type": "blob", + "sha": "98991c43b5b0388728d08df0f0c6019708f26f75", + "size": 2449, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98991c43b5b0388728d08df0f0c6019708f26f75" + }, + { + "path": "apps/dashboard/components/ui/page-header.tsx", + "mode": "100644", + "type": "blob", + "sha": "cf2107bc622ac1ec253c21d06bddf9a38674af8c", + "size": 2739, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cf2107bc622ac1ec253c21d06bddf9a38674af8c" + }, + { + "path": "apps/dashboard/components/ui/pagination.tsx", + "mode": "100644", + "type": "blob", + "sha": "fc4889fc37032c63bd03562afe3f7a9bee8d9561", + "size": 1316, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fc4889fc37032c63bd03562afe3f7a9bee8d9561" + }, + { + "path": "apps/dashboard/components/ui/panel.tsx", + "mode": "100644", + "type": "blob", + "sha": "3d43ca93e8d7ebd560fff6f720e6bc085085edb6", + "size": 2487, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3d43ca93e8d7ebd560fff6f720e6bc085085edb6" + }, + { + "path": "apps/dashboard/components/ui/progress.tsx", + "mode": "100644", + "type": "blob", + "sha": "008d206ca640569531120d71423bd273eea90069", + "size": 2051, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/008d206ca640569531120d71423bd273eea90069" + }, + { + "path": "apps/dashboard/components/ui/prompt-input.tsx", + "mode": "100644", + "type": "blob", + "sha": "578f8683cb62613a9ee8b561cea9ca08e47ecde7", + "size": 7463, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/578f8683cb62613a9ee8b561cea9ca08e47ecde7" + }, + { + "path": "apps/dashboard/components/ui/responsive-table.tsx", + "mode": "100644", + "type": "blob", + "sha": "ce323fd4c2db6472d85f78fd0fb33329a56469e7", + "size": 3437, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ce323fd4c2db6472d85f78fd0fb33329a56469e7" + }, + { + "path": "apps/dashboard/components/ui/search.tsx", + "mode": "100644", + "type": "blob", + "sha": "f66b3ee60f7748d33215543ce0a64ab228d177cf", + "size": 1361, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f66b3ee60f7748d33215543ce0a64ab228d177cf" + }, + { + "path": "apps/dashboard/components/ui/section-divider.tsx", + "mode": "100644", + "type": "blob", + "sha": "7ee9d3f5c895626730c9df74a143c3730cee1537", + "size": 780, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ee9d3f5c895626730c9df74a143c3730cee1537" + }, + { + "path": "apps/dashboard/components/ui/select.tsx", + "mode": "100644", + "type": "blob", + "sha": "7a00d3b3fe8f68c83a48bfbb8b4aca74a5f39dab", + "size": 2245, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a00d3b3fe8f68c83a48bfbb8b4aca74a5f39dab" + }, + { + "path": "apps/dashboard/components/ui/separator.tsx", + "mode": "100644", + "type": "blob", + "sha": "0ef90f4b10723565cdbac6470ff3809b0a040ae6", + "size": 823, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0ef90f4b10723565cdbac6470ff3809b0a040ae6" + }, + { + "path": "apps/dashboard/components/ui/sidebar-shell.tsx", + "mode": "100644", + "type": "blob", + "sha": "b6d8188352349291c334e09f222312c9bc596a95", + "size": 4181, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b6d8188352349291c334e09f222312c9bc596a95" + }, + { + "path": "apps/dashboard/components/ui/skeleton.tsx", + "mode": "100644", + "type": "blob", + "sha": "72286c8fc92f2891b60f5339422f232424300ea4", + "size": 4646, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/72286c8fc92f2891b60f5339422f232424300ea4" + }, + { + "path": "apps/dashboard/components/ui/spinner.tsx", + "mode": "100644", + "type": "blob", + "sha": "faa155ca10fc59378696ca963525ec8a97b9916c", + "size": 1191, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/faa155ca10fc59378696ca963525ec8a97b9916c" + }, + { + "path": "apps/dashboard/components/ui/stats-grid.tsx", + "mode": "100644", + "type": "blob", + "sha": "eab81e110da220db2ab278728350d2ccddf31b8a", + "size": 1967, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eab81e110da220db2ab278728350d2ccddf31b8a" + }, + { + "path": "apps/dashboard/components/ui/switch.tsx", + "mode": "100644", + "type": "blob", + "sha": "0c07784562f6802badf9ad5743131caa9ff31ba7", + "size": 1268, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0c07784562f6802badf9ad5743131caa9ff31ba7" + }, + { + "path": "apps/dashboard/components/ui/textarea.tsx", + "mode": "100644", + "type": "blob", + "sha": "8f9bc74e421804a8a7cf739fbb7b0cf0c5472f80", + "size": 647, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f9bc74e421804a8a7cf739fbb7b0cf0c5472f80" + }, + { + "path": "apps/dashboard/components/ui/tool-call-card.tsx", + "mode": "100644", + "type": "blob", + "sha": "7ec9e281bdf0356e0472617807610575b33da47f", + "size": 2383, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ec9e281bdf0356e0472617807610575b33da47f" + }, + { + "path": "apps/dashboard/components/ui/ui-block.tsx", + "mode": "100644", + "type": "blob", + "sha": "c05fbd68c16166e184ea4e84e5b28089afbd8b9f", + "size": 42659, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c05fbd68c16166e184ea4e84e5b28089afbd8b9f" + }, + { + "path": "apps/dashboard/deno.json", + "mode": "100644", + "type": "blob", + "sha": "f3cb2a24443121e2b168de80e786dd8215b918a9", + "size": 2298, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f3cb2a24443121e2b168de80e786dd8215b918a9" + }, + { + "path": "apps/dashboard/islands", + "mode": "040000", + "type": "tree", + "sha": "31df3f1f70fd06f702767945b49f77624e8eb765", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/31df3f1f70fd06f702767945b49f77624e8eb765" + }, + { + "path": "apps/dashboard/islands/ChannelInstructions.tsx", + "mode": "100644", + "type": "blob", + "sha": "cb797d05876584bbd87177e707742258557cfc33", + "size": 3224, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cb797d05876584bbd87177e707742258557cfc33" + }, + { + "path": "apps/dashboard/islands/ChannelShareActions.tsx", + "mode": "100644", + "type": "blob", + "sha": "5eed19de75935fdf65e3b866862d9cca3e2f367b", + "size": 3380, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5eed19de75935fdf65e3b866862d9cca3e2f367b" + }, + { + "path": "apps/dashboard/islands/ChannelTreeIsland.tsx", + "mode": "100644", + "type": "blob", + "sha": "ad31647deaa3fd152984271193c155d17cef89ac", + "size": 1954, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad31647deaa3fd152984271193c155d17cef89ac" + }, + { + "path": "apps/dashboard/islands/ChatPane.tsx", + "mode": "100644", + "type": "blob", + "sha": "f111cb274f6c5e39764ba5086b1dcb8398152788", + "size": 36133, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f111cb274f6c5e39764ba5086b1dcb8398152788" + }, + { + "path": "apps/dashboard/islands/CommandBar.tsx", + "mode": "100644", + "type": "blob", + "sha": "484d87bba9ca13f43430879ba96be4fcb0bbce17", + "size": 4736, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/484d87bba9ca13f43430879ba96be4fcb0bbce17" + }, + { + "path": "apps/dashboard/islands/CustomModelsPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "63eaae177b9833c967c2f009e2cdb2fc974e39b1", + "size": 9357, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/63eaae177b9833c967c2f009e2cdb2fc974e39b1" + }, + { + "path": "apps/dashboard/islands/FeedbackControl.tsx", + "mode": "100644", + "type": "blob", + "sha": "f7bf7cc7052b488629cb2b3fc740565c7a2500d3", + "size": 2924, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f7bf7cc7052b488629cb2b3fc740565c7a2500d3" + }, + { + "path": "apps/dashboard/islands/KnowledgePanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "de9ca7517a2c7e9cc09fc675fb53c3427b094001", + "size": 25860, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de9ca7517a2c7e9cc09fc675fb53c3427b094001" + }, + { + "path": "apps/dashboard/islands/McpPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "f76b447d07d73beadd8b6e75165bc6c6f4a28b8a", + "size": 6931, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f76b447d07d73beadd8b6e75165bc6c6f4a28b8a" + }, + { + "path": "apps/dashboard/islands/ProvidersPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "ee148d30512db73a7bdaede859eb4c7e979e417a", + "size": 21966, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ee148d30512db73a7bdaede859eb4c7e979e417a" + }, + { + "path": "apps/dashboard/islands/SessionActions.tsx", + "mode": "100644", + "type": "blob", + "sha": "ee0df4af7ce1c1841132c94c3a09dcee52b87c8f", + "size": 7166, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ee0df4af7ce1c1841132c94c3a09dcee52b87c8f" + }, + { + "path": "apps/dashboard/islands/SessionRail.tsx", + "mode": "100644", + "type": "blob", + "sha": "b9aa902b34cd0470a9c48522f04ecf7749b5bc45", + "size": 6256, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b9aa902b34cd0470a9c48522f04ecf7749b5bc45" + }, + { + "path": "apps/dashboard/islands/SessionScratch.tsx", + "mode": "100644", + "type": "blob", + "sha": "90d7a49396671dc378fe378b71dac13456616654", + "size": 10934, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/90d7a49396671dc378fe378b71dac13456616654" + }, + { + "path": "apps/dashboard/islands/SessionShareActions.tsx", + "mode": "100644", + "type": "blob", + "sha": "731aab3a4e22a8d005e916e7e26d1cf27f50d9f0", + "size": 4023, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/731aab3a4e22a8d005e916e7e26d1cf27f50d9f0" + }, + { + "path": "apps/dashboard/islands/SettingsPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "25e348f1df08ec4ac2173988a5ef1858dc8a85bd", + "size": 4594, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/25e348f1df08ec4ac2173988a5ef1858dc8a85bd" + }, + { + "path": "apps/dashboard/islands/SharingPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "1f838cd30afa2531c752edf2b264df08814641cd", + "size": 6896, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1f838cd30afa2531c752edf2b264df08814641cd" + }, + { + "path": "apps/dashboard/islands/SkillsPanel.tsx", + "mode": "100644", + "type": "blob", + "sha": "1d0de581f56e3a0f0fd3d3bf79b41e51447f2f73", + "size": 24520, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1d0de581f56e3a0f0fd3d3bf79b41e51447f2f73" + }, + { + "path": "apps/dashboard/islands/session-signals.ts", + "mode": "100644", + "type": "blob", + "sha": "380805774f4375c6b3a91ca7a1bd2b941d2feffb", + "size": 1748, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/380805774f4375c6b3a91ca7a1bd2b941d2feffb" + }, + { + "path": "apps/dashboard/islands/ui", + "mode": "040000", + "type": "tree", + "sha": "4569efcac6319dfbe6e93d04723b2e47578c5699", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4569efcac6319dfbe6e93d04723b2e47578c5699" + }, + { + "path": "apps/dashboard/islands/ui/ActionToasts.tsx", + "mode": "100644", + "type": "blob", + "sha": "d073d8ee3a7a516626f35147e8a8e448d702ca88", + "size": 4384, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d073d8ee3a7a516626f35147e8a8e448d702ca88" + }, + { + "path": "apps/dashboard/islands/ui/NavProfile.tsx", + "mode": "100644", + "type": "blob", + "sha": "fdc012d854dc571c57b2164f4ecf949224e1a473", + "size": 2243, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fdc012d854dc571c57b2164f4ecf949224e1a473" + }, + { + "path": "apps/dashboard/islands/ui/NavProgress.tsx", + "mode": "100644", + "type": "blob", + "sha": "d49ca1ea6253c6eb90948baa9b517cd2715c0978", + "size": 3549, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d49ca1ea6253c6eb90948baa9b517cd2715c0978" + }, + { + "path": "apps/dashboard/islands/ui/NewSessionButton.tsx", + "mode": "100644", + "type": "blob", + "sha": "eae0eb2cc348a47dc4a885b822bedc9723b75516", + "size": 2958, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eae0eb2cc348a47dc4a885b822bedc9723b75516" + }, + { + "path": "apps/dashboard/islands/ui/SidebarToggle.tsx", + "mode": "100644", + "type": "blob", + "sha": "f3f873e87bf18e99a2c49c982b8cb522cc5f1f97", + "size": 2631, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f3f873e87bf18e99a2c49c982b8cb522cc5f1f97" + }, + { + "path": "apps/dashboard/islands/ui/ThemeToggle.tsx", + "mode": "100644", + "type": "blob", + "sha": "9badfb1f5f5e87cfbc917b7db597c033457b2a69", + "size": 2955, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9badfb1f5f5e87cfbc917b7db597c033457b2a69" + }, + { + "path": "apps/dashboard/islands/ui/Toast.tsx", + "mode": "100644", + "type": "blob", + "sha": "91bc9e43f1098a1249cf6f4e37acb81d8ae867a6", + "size": 5281, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/91bc9e43f1098a1249cf6f4e37acb81d8ae867a6" + }, + { + "path": "apps/dashboard/lib", + "mode": "040000", + "type": "tree", + "sha": "cb407f719c9fcc3596e3a6d59fb089c2a8cf87e0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/cb407f719c9fcc3596e3a6d59fb089c2a8cf87e0" + }, + { + "path": "apps/dashboard/lib/active-channel.ts", + "mode": "100644", + "type": "blob", + "sha": "836e16f4bb429f7f60c5c07d21cbfb7b68321543", + "size": 3591, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/836e16f4bb429f7f60c5c07d21cbfb7b68321543" + }, + { + "path": "apps/dashboard/lib/active-theme.ts", + "mode": "100644", + "type": "blob", + "sha": "e2d2c0d9e5ca3d67a3484514b86c9fffec11a956", + "size": 1349, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e2d2c0d9e5ca3d67a3484514b86c9fffec11a956" + }, + { + "path": "apps/dashboard/lib/channel-service.ts", + "mode": "100644", + "type": "blob", + "sha": "1fbfeba20f97c49511153705bf0042f6aa75e39f", + "size": 859, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1fbfeba20f97c49511153705bf0042f6aa75e39f" + }, + { + "path": "apps/dashboard/lib/chat-agent-loop.test.ts", + "mode": "100644", + "type": "blob", + "sha": "5d5145697c6c018b4ee95c491178834fb1712929", + "size": 12093, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5d5145697c6c018b4ee95c491178834fb1712929" + }, + { + "path": "apps/dashboard/lib/chat-orchestration.test.ts", + "mode": "100644", + "type": "blob", + "sha": "540f91e89ea5566d6f99cff0db6f4b4a0480d8d5", + "size": 6171, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/540f91e89ea5566d6f99cff0db6f4b4a0480d8d5" + }, + { + "path": "apps/dashboard/lib/chat-orchestration.ts", + "mode": "100644", + "type": "blob", + "sha": "4a1b51935244f48898f2ae1886e6be0ec0f36947", + "size": 18472, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4a1b51935244f48898f2ae1886e6be0ec0f36947" + }, + { + "path": "apps/dashboard/lib/chat-render.test.ts", + "mode": "100644", + "type": "blob", + "sha": "ec2001ad72ee051753e54dddaa7a284494e4ec4a", + "size": 1865, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ec2001ad72ee051753e54dddaa7a284494e4ec4a" + }, + { + "path": "apps/dashboard/lib/chat-render.ts", + "mode": "100644", + "type": "blob", + "sha": "b64f8ff2f99cae3903ec1f3687e79e128cc0f037", + "size": 16471, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b64f8ff2f99cae3903ec1f3687e79e128cc0f037" + }, + { + "path": "apps/dashboard/lib/chat-render_test.ts", + "mode": "100644", + "type": "blob", + "sha": "1d9561cab7ef5c9c1a1a639be8fa5d1d0fef234e", + "size": 11502, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1d9561cab7ef5c9c1a1a639be8fa5d1d0fef234e" + }, + { + "path": "apps/dashboard/lib/chat-route.test.ts", + "mode": "100644", + "type": "blob", + "sha": "2a6335ed925cc43f9df00ef232c5ed392f03b178", + "size": 5272, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a6335ed925cc43f9df00ef232c5ed392f03b178" + }, + { + "path": "apps/dashboard/lib/chat-stream.ts", + "mode": "100644", + "type": "blob", + "sha": "27f23c7addb2287ef64c5d6b00e8ed81daf77c7c", + "size": 897, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/27f23c7addb2287ef64c5d6b00e8ed81daf77c7c" + }, + { + "path": "apps/dashboard/lib/cn.ts", + "mode": "100644", + "type": "blob", + "sha": "96a93decea55fb348163f55050c50670049cb19f", + "size": 365, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/96a93decea55fb348163f55050c50670049cb19f" + }, + { + "path": "apps/dashboard/lib/desktop-chrome.ts", + "mode": "100644", + "type": "blob", + "sha": "16cfc637b1b337bbf7df581cde12d477b34e25c2", + "size": 2981, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/16cfc637b1b337bbf7df581cde12d477b34e25c2" + }, + { + "path": "apps/dashboard/lib/guest-tokens.ts", + "mode": "100644", + "type": "blob", + "sha": "f13e6c0b31a31474341938b65d75820f214fb203", + "size": 3045, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f13e6c0b31a31474341938b65d75820f214fb203" + }, + { + "path": "apps/dashboard/lib/insights-data.ts", + "mode": "100644", + "type": "blob", + "sha": "e54a74a934030ce35a9ffb6e18c8a2addebf8e27", + "size": 5864, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e54a74a934030ce35a9ffb6e18c8a2addebf8e27" + }, + { + "path": "apps/dashboard/lib/kb-executions-stream.test.ts", + "mode": "100644", + "type": "blob", + "sha": "635466f44f6c7b7eca9e7642790d3035cabaf57f", + "size": 4444, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/635466f44f6c7b7eca9e7642790d3035cabaf57f" + }, + { + "path": "apps/dashboard/lib/kb-executions-stream.ts", + "mode": "100644", + "type": "blob", + "sha": "4a4b657ca28b24f6c5b44701ba665f0281aa7ed4", + "size": 7335, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4a4b657ca28b24f6c5b44701ba665f0281aa7ed4" + }, + { + "path": "apps/dashboard/lib/kb-ingest.ts", + "mode": "100644", + "type": "blob", + "sha": "375f21fcaaebfe3d63ddede054262bf78e4ec0aa", + "size": 3008, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/375f21fcaaebfe3d63ddede054262bf78e4ec0aa" + }, + { + "path": "apps/dashboard/lib/kb-ingest_test.ts", + "mode": "100644", + "type": "blob", + "sha": "533b350609d8cb2242e97da001282a7ffccb46fc", + "size": 1960, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/533b350609d8cb2242e97da001282a7ffccb46fc" + }, + { + "path": "apps/dashboard/lib/kb-status.ts", + "mode": "100644", + "type": "blob", + "sha": "6dbd74ca1f1ca47189a8b3edeaba2dab2d4020fc", + "size": 2516, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6dbd74ca1f1ca47189a8b3edeaba2dab2d4020fc" + }, + { + "path": "apps/dashboard/lib/llm-openai.test.ts", + "mode": "100644", + "type": "blob", + "sha": "30c0f3a120e26efa1fd2ff51a786d6059754fc67", + "size": 2933, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/30c0f3a120e26efa1fd2ff51a786d6059754fc67" + }, + { + "path": "apps/dashboard/lib/llm-openrouter.test.ts", + "mode": "100644", + "type": "blob", + "sha": "d76e0449979886b5a88e09420bff99b77c4ed66c", + "size": 5738, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d76e0449979886b5a88e09420bff99b77c4ed66c" + }, + { + "path": "apps/dashboard/lib/llm.ts", + "mode": "100644", + "type": "blob", + "sha": "6b11211c3715af4563a75ca6f008ded351b435d2", + "size": 12201, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6b11211c3715af4563a75ca6f008ded351b435d2" + }, + { + "path": "apps/dashboard/lib/mcp-connectors.ts", + "mode": "100644", + "type": "blob", + "sha": "33a6be29e4982090b1722c92d2c7275f7c1e992a", + "size": 1690, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/33a6be29e4982090b1722c92d2c7275f7c1e992a" + }, + { + "path": "apps/dashboard/lib/mcp-status.ts", + "mode": "100644", + "type": "blob", + "sha": "35a616d1876c13e412215dc7ac5a50388bccb4b1", + "size": 6010, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/35a616d1876c13e412215dc7ac5a50388bccb4b1" + }, + { + "path": "apps/dashboard/lib/mcp.ts", + "mode": "100644", + "type": "blob", + "sha": "9c90d684fced56c92c0a46eb2537702afe4cb823", + "size": 9425, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c90d684fced56c92c0a46eb2537702afe4cb823" + }, + { + "path": "apps/dashboard/lib/model-discovery.ts", + "mode": "100644", + "type": "blob", + "sha": "f3d2de2b13535ee1ed240904b5b6e01abe62807e", + "size": 7963, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f3d2de2b13535ee1ed240904b5b6e01abe62807e" + }, + { + "path": "apps/dashboard/lib/models.defaults.test.ts", + "mode": "100644", + "type": "blob", + "sha": "568a66e099d2ea1e6d6c7a152d3a525894436159", + "size": 2643, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/568a66e099d2ea1e6d6c7a152d3a525894436159" + }, + { + "path": "apps/dashboard/lib/models.test.ts", + "mode": "100644", + "type": "blob", + "sha": "af5e406dac143c0bce648c6586fcff196ff97fc4", + "size": 3526, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/af5e406dac143c0bce648c6586fcff196ff97fc4" + }, + { + "path": "apps/dashboard/lib/models.ts", + "mode": "100644", + "type": "blob", + "sha": "f9e1fd8c17f44c35f0591eb7011d3ea1db7b6b25", + "size": 10651, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f9e1fd8c17f44c35f0591eb7011d3ea1db7b6b25" + }, + { + "path": "apps/dashboard/lib/ollama-integration.test.ts", + "mode": "100644", + "type": "blob", + "sha": "1fad2f615238f1d5a5d01259943c2cbe04122e52", + "size": 5254, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1fad2f615238f1d5a5d01259943c2cbe04122e52" + }, + { + "path": "apps/dashboard/lib/otel.ts", + "mode": "100644", + "type": "blob", + "sha": "2ba1db7adec0866d1773b209762a454858dd7dea", + "size": 4339, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2ba1db7adec0866d1773b209762a454858dd7dea" + }, + { + "path": "apps/dashboard/lib/paced-reveal.ts", + "mode": "100644", + "type": "blob", + "sha": "cbda07ac52c0852022b9450015de482273c2a217", + "size": 4006, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cbda07ac52c0852022b9450015de482273c2a217" + }, + { + "path": "apps/dashboard/lib/provider-settings.ts", + "mode": "100644", + "type": "blob", + "sha": "9143bc82843af6e0e035b0c6deefab36fea806db", + "size": 7956, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9143bc82843af6e0e035b0c6deefab36fea806db" + }, + { + "path": "apps/dashboard/lib/public-types.ts", + "mode": "100644", + "type": "blob", + "sha": "de1545d25d1ceaf8be3ed9d3aa2f9760b8a0d89e", + "size": 391, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de1545d25d1ceaf8be3ed9d3aa2f9760b8a0d89e" + }, + { + "path": "apps/dashboard/lib/registry-stream.ts", + "mode": "100644", + "type": "blob", + "sha": "61ee1e62f194b1d897086072bbcd131abd4f4cfc", + "size": 1733, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/61ee1e62f194b1d897086072bbcd131abd4f4cfc" + }, + { + "path": "apps/dashboard/lib/route-guards.ts", + "mode": "100644", + "type": "blob", + "sha": "5530d6d3c353cd4aabbf1aff927bfb7b114c5ca8", + "size": 2455, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5530d6d3c353cd4aabbf1aff927bfb7b114c5ca8" + }, + { + "path": "apps/dashboard/lib/session-data.ts", + "mode": "100644", + "type": "blob", + "sha": "3b287ad8b2593d2ae9dc8c592a0686f717ee2bdc", + "size": 10891, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3b287ad8b2593d2ae9dc8c592a0686f717ee2bdc" + }, + { + "path": "apps/dashboard/lib/share-conflict.ts", + "mode": "100644", + "type": "blob", + "sha": "e511915fe0cb8fbd8a26fe6954c5df98adfec259", + "size": 800, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e511915fe0cb8fbd8a26fe6954c5df98adfec259" + }, + { + "path": "apps/dashboard/lib/skill-activations.ts", + "mode": "100644", + "type": "blob", + "sha": "98501b9ba1783ec1b9da030a82ca67eeedd58c52", + "size": 3273, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98501b9ba1783ec1b9da030a82ca67eeedd58c52" + }, + { + "path": "apps/dashboard/lib/skills.ts", + "mode": "100644", + "type": "blob", + "sha": "d4a5d9cab1fa1c8d075ccf29d7fb0b6e0ecd1851", + "size": 12227, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d4a5d9cab1fa1c8d075ccf29d7fb0b6e0ecd1851" + }, + { + "path": "apps/dashboard/lib/stream-loaders.ts", + "mode": "100644", + "type": "blob", + "sha": "faeee83d690c3da33dd0c6c57ebc04d42f90b60e", + "size": 5117, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/faeee83d690c3da33dd0c6c57ebc04d42f90b60e" + }, + { + "path": "apps/dashboard/lib/ui-spec.ts", + "mode": "100644", + "type": "blob", + "sha": "ef2e60826f559d09b4c8c76e1ad2106a8c1328a0", + "size": 7715, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef2e60826f559d09b4c8c76e1ad2106a8c1328a0" + }, + { + "path": "apps/dashboard/lib/ui-spec_test.ts", + "mode": "100644", + "type": "blob", + "sha": "7403abb2ce91e10dcd59901936cfaf902063bb7d", + "size": 10626, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7403abb2ce91e10dcd59901936cfaf902063bb7d" + }, + { + "path": "apps/dashboard/lib/ui", + "mode": "040000", + "type": "tree", + "sha": "91878488133988fe97849bf41bdec4e9d3533af9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/91878488133988fe97849bf41bdec4e9d3533af9" + }, + { + "path": "apps/dashboard/lib/ui/client-toast.ts", + "mode": "100644", + "type": "blob", + "sha": "961e5853f9be053f7a7eb87e8614e3458baee8e9", + "size": 1641, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/961e5853f9be053f7a7eb87e8614e3458baee8e9" + }, + { + "path": "apps/dashboard/lib/ui/preferences.ts", + "mode": "100644", + "type": "blob", + "sha": "0f4eb875bbd2a908039e7f67a4e56af68eecb5b6", + "size": 2772, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0f4eb875bbd2a908039e7f67a4e56af68eecb5b6" + }, + { + "path": "apps/dashboard/lib/ui/toast.ts", + "mode": "100644", + "type": "blob", + "sha": "b71aaa815d333dadbf22c50e476350ff04cb966a", + "size": 2174, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b71aaa815d333dadbf22c50e476350ff04cb966a" + }, + { + "path": "apps/dashboard/lib/usage-data.ts", + "mode": "100644", + "type": "blob", + "sha": "8d291008ba2c4dda1ec52b47e83aafce7037facd", + "size": 8624, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8d291008ba2c4dda1ec52b47e83aafce7037facd" + }, + { + "path": "apps/dashboard/lib/windows-singleton.test.ts", + "mode": "100644", + "type": "blob", + "sha": "95e5d4f37ba47e1e77bcb61a31ed1f17de75f601", + "size": 3100, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/95e5d4f37ba47e1e77bcb61a31ed1f17de75f601" + }, + { + "path": "apps/dashboard/lib/windows-singleton.ts", + "mode": "100644", + "type": "blob", + "sha": "28757bb978ccf6b458d50573f830bb68a6073fcd", + "size": 13622, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/28757bb978ccf6b458d50573f830bb68a6073fcd" + }, + { + "path": "apps/dashboard/lib/workspace-nav.ts", + "mode": "100644", + "type": "blob", + "sha": "044d23b359f0d3b2d0caa3c8b971605a820667e9", + "size": 3159, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/044d23b359f0d3b2d0caa3c8b971605a820667e9" + }, + { + "path": "apps/dashboard/main.ts", + "mode": "100644", + "type": "blob", + "sha": "851b08a6cef45fb1cdc6cc84fe5839f586e537ef", + "size": 1418, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/851b08a6cef45fb1cdc6cc84fe5839f586e537ef" + }, + { + "path": "apps/dashboard/package.json", + "mode": "100644", + "type": "blob", + "sha": "cd09ace6a8213e34e953af05bce0248d66340560", + "size": 1226, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cd09ace6a8213e34e953af05bce0248d66340560" + }, + { + "path": "apps/dashboard/router.ts", + "mode": "100644", + "type": "blob", + "sha": "7345b2c776f3a4702b7ee498f46d6e8dd3cf8826", + "size": 2763, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7345b2c776f3a4702b7ee498f46d6e8dd3cf8826" + }, + { + "path": "apps/dashboard/routes", + "mode": "040000", + "type": "tree", + "sha": "48ebb8b1e0534bc8f43db970e10de4cd4399d2c4", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/48ebb8b1e0534bc8f43db970e10de4cd4399d2c4" + }, + { + "path": "apps/dashboard/routes/(_components)", + "mode": "040000", + "type": "tree", + "sha": "d26c94660ee60e46d0f5486e5c6947b803988787", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d26c94660ee60e46d0f5486e5c6947b803988787" + }, + { + "path": "apps/dashboard/routes/(_components)/home-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "fc6eefc157dba65d600b8ec30739f545a521ba01", + "size": 4006, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fc6eefc157dba65d600b8ec30739f545a521ba01" + }, + { + "path": "apps/dashboard/routes/(design)", + "mode": "040000", + "type": "tree", + "sha": "cc4f2fab6381e4a7190c2837496b40b84494529c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/cc4f2fab6381e4a7190c2837496b40b84494529c" + }, + { + "path": "apps/dashboard/routes/(design)/design", + "mode": "040000", + "type": "tree", + "sha": "a466a4c3b8e6d59d84ce60568b265827d3ee3d74", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a466a4c3b8e6d59d84ce60568b265827d3ee3d74" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_components)", + "mode": "040000", + "type": "tree", + "sha": "83c29f2f43625c43386535f573568a515d9f3db7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/83c29f2f43625c43386535f573568a515d9f3db7" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_components)/components-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "b220eb9f85f0744db55ac600e8876eb847e7cb19", + "size": 23165, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b220eb9f85f0744db55ac600e8876eb847e7cb19" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_components)/composition-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "304c23a33707b59000f6f495621edcb9d52bbb5a", + "size": 14317, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/304c23a33707b59000f6f495621edcb9d52bbb5a" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_components)/tokens-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "efb8ae77bb303660bfae117d2da59ff6c32d877d", + "size": 11612, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/efb8ae77bb303660bfae117d2da59ff6c32d877d" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_islands)", + "mode": "040000", + "type": "tree", + "sha": "a64e0f7c5d794dfcffbc6868191afee62dfd0e8a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a64e0f7c5d794dfcffbc6868191afee62dfd0e8a" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_islands)/FloatingSurfaceDemo.tsx", + "mode": "100644", + "type": "blob", + "sha": "a64493216cf172688091a829e68ea10d6997e53f", + "size": 4564, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a64493216cf172688091a829e68ea10d6997e53f" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_islands)/GenerativeUiDemo.tsx", + "mode": "100644", + "type": "blob", + "sha": "9228e465910b375c7eac40d9507406fc5c6b20bd", + "size": 7380, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9228e465910b375c7eac40d9507406fc5c6b20bd" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_islands)/TokenClipboard.tsx", + "mode": "100644", + "type": "blob", + "sha": "7a81ef34fa69a7bd376c4035b502d4d273cce394", + "size": 985, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a81ef34fa69a7bd376c4035b502d4d273cce394" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_shared)", + "mode": "040000", + "type": "tree", + "sha": "9f3f4923ea5d202ef6ddea7c56f57f4f609715e4", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9f3f4923ea5d202ef6ddea7c56f57f4f609715e4" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_shared)/registry.ts", + "mode": "100644", + "type": "blob", + "sha": "88ca1a557ac9bd9a7b272a0012c10bb30b63b42c", + "size": 7996, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/88ca1a557ac9bd9a7b272a0012c10bb30b63b42c" + }, + { + "path": "apps/dashboard/routes/(design)/design/(_shared)/tokens.ts", + "mode": "100644", + "type": "blob", + "sha": "f31ee57fe6dd44f58ee0a39d28512a3fcc23ff2b", + "size": 3789, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f31ee57fe6dd44f58ee0a39d28512a3fcc23ff2b" + }, + { + "path": "apps/dashboard/routes/(design)/design/_layout.tsx", + "mode": "100644", + "type": "blob", + "sha": "4c9f08a2b16586e9387b3aec2d3e7c1281b439c3", + "size": 2099, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c9f08a2b16586e9387b3aec2d3e7c1281b439c3" + }, + { + "path": "apps/dashboard/routes/(design)/design/components.tsx", + "mode": "100644", + "type": "blob", + "sha": "af96ce4587d98b5b1735e77b156133a1cde498dd", + "size": 641, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/af96ce4587d98b5b1735e77b156133a1cde498dd" + }, + { + "path": "apps/dashboard/routes/(design)/design/composition.tsx", + "mode": "100644", + "type": "blob", + "sha": "4c4db740223b4953150f38cbbd3028976695724e", + "size": 658, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c4db740223b4953150f38cbbd3028976695724e" + }, + { + "path": "apps/dashboard/routes/(design)/design/generative.tsx", + "mode": "100644", + "type": "blob", + "sha": "239040b32caf8a6f0e8536f2bfd99b6354d69aa5", + "size": 2051, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/239040b32caf8a6f0e8536f2bfd99b6354d69aa5" + }, + { + "path": "apps/dashboard/routes/(design)/design/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "696e81613695179e0effa809ea9f966c4146286a", + "size": 204, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/696e81613695179e0effa809ea9f966c4146286a" + }, + { + "path": "apps/dashboard/routes/(design)/design/tokens.tsx", + "mode": "100644", + "type": "blob", + "sha": "aeaf21671ec5e6ea71c03da3e61490a9fcb6cf82", + "size": 599, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aeaf21671ec5e6ea71c03da3e61490a9fcb6cf82" + }, + { + "path": "apps/dashboard/routes/_app.tsx", + "mode": "100644", + "type": "blob", + "sha": "2b31c8049b6e6fb24b3ca4111011cd5a56e56af7", + "size": 1425, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2b31c8049b6e6fb24b3ca4111011cd5a56e56af7" + }, + { + "path": "apps/dashboard/routes/_layout.tsx", + "mode": "100644", + "type": "blob", + "sha": "94a7dbde524a474a2dfab687fc9f2a1a740a9be7", + "size": 8513, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94a7dbde524a474a2dfab687fc9f2a1a740a9be7" + }, + { + "path": "apps/dashboard/routes/api", + "mode": "040000", + "type": "tree", + "sha": "d17b61ba80fc789988fb9f4e68c109744504693a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d17b61ba80fc789988fb9f4e68c109744504693a" + }, + { + "path": "apps/dashboard/routes/api/chat-stream.ts", + "mode": "100644", + "type": "blob", + "sha": "0d88e8a8bc1f73b13509794ddfacfcbcbb443cd7", + "size": 5136, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0d88e8a8bc1f73b13509794ddfacfcbcbb443cd7" + }, + { + "path": "apps/dashboard/routes/api/chat.ts", + "mode": "100644", + "type": "blob", + "sha": "c0557faf4d91e4175571e1c4adf76510618d2616", + "size": 21826, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c0557faf4d91e4175571e1c4adf76510618d2616" + }, + { + "path": "apps/dashboard/routes/api/feedback.ts", + "mode": "100644", + "type": "blob", + "sha": "4d43aa021a00ca5a8dbfc73eaf741b3cb4f7ea2e", + "size": 1485, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4d43aa021a00ca5a8dbfc73eaf741b3cb4f7ea2e" + }, + { + "path": "apps/dashboard/routes/api/knowledge-image.ts", + "mode": "100644", + "type": "blob", + "sha": "d4b8f00ccdd26c437b91eb8a1e96618d8d09c1c2", + "size": 2212, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d4b8f00ccdd26c437b91eb8a1e96618d8d09c1c2" + }, + { + "path": "apps/dashboard/routes/api/knowledge.ts", + "mode": "100644", + "type": "blob", + "sha": "2a0e321dbb85857ae17f554a37eaa0e721fb7f10", + "size": 1478, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a0e321dbb85857ae17f554a37eaa0e721fb7f10" + }, + { + "path": "apps/dashboard/routes/api/local-models.ts", + "mode": "100644", + "type": "blob", + "sha": "adf208f06f78cea6a25024836af52f5fa518958b", + "size": 431, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/adf208f06f78cea6a25024836af52f5fa518958b" + }, + { + "path": "apps/dashboard/routes/api/mcp-apps", + "mode": "040000", + "type": "tree", + "sha": "c7a46964374b0aa01aacb4f1c78bf21bdcfdfe8a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c7a46964374b0aa01aacb4f1c78bf21bdcfdfe8a" + }, + { + "path": "apps/dashboard/routes/api/mcp-apps/call.ts", + "mode": "100644", + "type": "blob", + "sha": "7bb9a2a0067d7afc48b9a5703bfee21d6930f9df", + "size": 6283, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7bb9a2a0067d7afc48b9a5703bfee21d6930f9df" + }, + { + "path": "apps/dashboard/routes/api/models.ts", + "mode": "100644", + "type": "blob", + "sha": "759766bee2340640dc53182fb52a0a0b485a0a4c", + "size": 3254, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/759766bee2340640dc53182fb52a0a0b485a0a4c" + }, + { + "path": "apps/dashboard/routes/api/provider-settings.ts", + "mode": "100644", + "type": "blob", + "sha": "cc3fba56bd93383beb3b7abe4f6ef3c7f4a99b3f", + "size": 7213, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cc3fba56bd93383beb3b7abe4f6ef3c7f4a99b3f" + }, + { + "path": "apps/dashboard/routes/api/share.ts", + "mode": "100644", + "type": "blob", + "sha": "2e63eb5c101817ba9997a2abb1ce92cbeeeb6374", + "size": 2671, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2e63eb5c101817ba9997a2abb1ce92cbeeeb6374" + }, + { + "path": "apps/dashboard/routes/api/streams", + "mode": "040000", + "type": "tree", + "sha": "41d96dbbee1bd373ac27cb8b0e74355cfd97abee", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/41d96dbbee1bd373ac27cb8b0e74355cfd97abee" + }, + { + "path": "apps/dashboard/routes/api/streams/[...path].ts", + "mode": "100644", + "type": "blob", + "sha": "59c96d5fa7f6e13ae23e1edd9635a3d84cccaf90", + "size": 5604, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59c96d5fa7f6e13ae23e1edd9635a3d84cccaf90" + }, + { + "path": "apps/dashboard/routes/channels", + "mode": "040000", + "type": "tree", + "sha": "4c65f6ba29330f7cf3602699324b1a64f2533f34", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4c65f6ba29330f7cf3602699324b1a64f2533f34" + }, + { + "path": "apps/dashboard/routes/channels/new", + "mode": "040000", + "type": "tree", + "sha": "4660470465de925dabbfaa55e5cf02c920d7c84a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4660470465de925dabbfaa55e5cf02c920d7c84a" + }, + { + "path": "apps/dashboard/routes/channels/new/(_components)", + "mode": "040000", + "type": "tree", + "sha": "8301390c06c6e488dd25b28f17ac1f89ae609b3b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8301390c06c6e488dd25b28f17ac1f89ae609b3b" + }, + { + "path": "apps/dashboard/routes/channels/new/(_components)/create-channel-form.tsx", + "mode": "100644", + "type": "blob", + "sha": "0444a9f558fb65f503f0b72fd13d6d1d916519ab", + "size": 2741, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0444a9f558fb65f503f0b72fd13d6d1d916519ab" + }, + { + "path": "apps/dashboard/routes/channels/new/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "dcab237843330fc173e7d00ab8ddc840c0e50dbd", + "size": 2989, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dcab237843330fc173e7d00ab8ddc840c0e50dbd" + }, + { + "path": "apps/dashboard/routes/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "bd123e3b4c0aaf64581253197a0987868b73a49b", + "size": 1273, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bd123e3b4c0aaf64581253197a0987868b73a49b" + }, + { + "path": "apps/dashboard/routes/mcp-sandbox.html.ts", + "mode": "100644", + "type": "blob", + "sha": "06b6c9207918dc65762a3b64db09043ea981bd86", + "size": 13586, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/06b6c9207918dc65762a3b64db09043ea981bd86" + }, + { + "path": "apps/dashboard/routes/mcp", + "mode": "040000", + "type": "tree", + "sha": "f6c566ae825b5cab5b07c5a656eb573638452a4e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f6c566ae825b5cab5b07c5a656eb573638452a4e" + }, + { + "path": "apps/dashboard/routes/mcp/(_components)", + "mode": "040000", + "type": "tree", + "sha": "ca385583109ea6d21356c702ac4a860099b1e65d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ca385583109ea6d21356c702ac4a860099b1e65d" + }, + { + "path": "apps/dashboard/routes/mcp/(_components)/mcp-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "493c161288c8a5b1cd1c6a16c0c4456034de223d", + "size": 2407, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/493c161288c8a5b1cd1c6a16c0c4456034de223d" + }, + { + "path": "apps/dashboard/routes/mcp/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "e18c3a4aeb545cc38612129e28ecbc38eb5ea64b", + "size": 1850, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e18c3a4aeb545cc38612129e28ecbc38eb5ea64b" + }, + { + "path": "apps/dashboard/routes/project", + "mode": "040000", + "type": "tree", + "sha": "f7f6b5c3092587a2675bd5fed890e0660cab2aa1", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f7f6b5c3092587a2675bd5fed890e0660cab2aa1" + }, + { + "path": "apps/dashboard/routes/project/[project]", + "mode": "040000", + "type": "tree", + "sha": "584732b54f67bdb2d8b99be312ed54560a4d5298", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/584732b54f67bdb2d8b99be312ed54560a4d5298" + }, + { + "path": "apps/dashboard/routes/project/[project]/(_components)", + "mode": "040000", + "type": "tree", + "sha": "defd58d58b536c1713e4c6abe701157738f180fb", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/defd58d58b536c1713e4c6abe701157738f180fb" + }, + { + "path": "apps/dashboard/routes/project/[project]/(_components)/project-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "db4e21c53483950a53051ef71be2483efc993661", + "size": 3256, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/db4e21c53483950a53051ef71be2483efc993661" + }, + { + "path": "apps/dashboard/routes/project/[project]/_middleware.ts", + "mode": "100644", + "type": "blob", + "sha": "12f67181813478bf909df7ecd13cddde402ba517", + "size": 252, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/12f67181813478bf909df7ecd13cddde402ba517" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel", + "mode": "040000", + "type": "tree", + "sha": "4bcec01b22f30ad68065db4fb781e951a05c8765", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4bcec01b22f30ad68065db4fb781e951a05c8765" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]", + "mode": "040000", + "type": "tree", + "sha": "f720fccaad9e4babe783db4d2fc82542237054fa", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f720fccaad9e4babe783db4d2fc82542237054fa" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/(_components)", + "mode": "040000", + "type": "tree", + "sha": "9cf6abda6e73235684467991bc4d2de713adc641", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9cf6abda6e73235684467991bc4d2de713adc641" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/(_components)/channel-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "e86142173d1d4a7cc34e7152447c6954c64abee2", + "size": 10853, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e86142173d1d4a7cc34e7152447c6954c64abee2" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/(_components)/create-session-form.tsx", + "mode": "100644", + "type": "blob", + "sha": "53dcbc14a44552c07b213179d8690a230dfc0e08", + "size": 2718, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/53dcbc14a44552c07b213179d8690a230dfc0e08" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/(_islands)", + "mode": "040000", + "type": "tree", + "sha": "efa656a60b0a5fe2a413c99436ea12ac5ef27462", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/efa656a60b0a5fe2a413c99436ea12ac5ef27462" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/(_islands)/SessionsGrid.tsx", + "mode": "100644", + "type": "blob", + "sha": "6414f48f54dd38d8167ce682b067877e348ab720", + "size": 4181, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6414f48f54dd38d8167ce682b067877e348ab720" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/_middleware.ts", + "mode": "100644", + "type": "blob", + "sha": "6a9625ed2eebb4d2728b04e2d3c549652275db66", + "size": 863, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6a9625ed2eebb4d2728b04e2d3c549652275db66" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "10f79eba76c511b646b21ca399192aadbbe93fa5", + "size": 10956, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/10f79eba76c511b646b21ca399192aadbbe93fa5" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge", + "mode": "040000", + "type": "tree", + "sha": "bd3840a69b4c9c6181136503d6a2095a2693fa97", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/bd3840a69b4c9c6181136503d6a2095a2693fa97" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)", + "mode": "040000", + "type": "tree", + "sha": "21bcbf6e0dcca478d55edb76546fdd73fdcdfe32", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/21bcbf6e0dcca478d55edb76546fdd73fdcdfe32" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/kb-types.ts", + "mode": "100644", + "type": "blob", + "sha": "f970db04b376d1854deb1f4836ad2baf3a88c243", + "size": 866, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f970db04b376d1854deb1f4836ad2baf3a88c243" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/knowledge-doc-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "efb926c211f72f2c1959b75074d8606bb9fda50d", + "size": 5545, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/efb926c211f72f2c1959b75074d8606bb9fda50d" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/knowledge-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "49509e573868f0bed7972ecacd1212a2ae237c72", + "size": 2574, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/49509e573868f0bed7972ecacd1212a2ae237c72" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/[doc].tsx", + "mode": "100644", + "type": "blob", + "sha": "a3fe1ea6c06836b9ebe1d03b37f52d92d83688be", + "size": 3183, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3fe1ea6c06836b9ebe1d03b37f52d92d83688be" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/_middleware.ts", + "mode": "100644", + "type": "blob", + "sha": "c79d7f6c533659e59b30b89baacbd47d29e7e697", + "size": 457, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c79d7f6c533659e59b30b89baacbd47d29e7e697" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "5a26a31fda811e59501eee9e8e49340c6516eb0a", + "size": 2126, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5a26a31fda811e59501eee9e8e49340c6516eb0a" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session", + "mode": "040000", + "type": "tree", + "sha": "423718706b54efcd996d3a256c7838718aab02e1", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/423718706b54efcd996d3a256c7838718aab02e1" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]", + "mode": "040000", + "type": "tree", + "sha": "3bacf735d87885a8bd435d8868444ebb79798aa7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3bacf735d87885a8bd435d8868444ebb79798aa7" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)", + "mode": "040000", + "type": "tree", + "sha": "24e2a61afe5a6770d544b816e124c85f4605db3b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/24e2a61afe5a6770d544b816e124c85f4605db3b" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-context.tsx", + "mode": "100644", + "type": "blob", + "sha": "200347703e0a7bc70f223efb7d4d0ec51a8bc2b4", + "size": 1623, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/200347703e0a7bc70f223efb7d4d0ec51a8bc2b4" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-header.tsx", + "mode": "100644", + "type": "blob", + "sha": "2a5a9bd69f55634b696f2f19d7ddf62b3b09f50f", + "size": 2430, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a5a9bd69f55634b696f2f19d7ddf62b3b09f50f" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "91c7cf73d54489c50fb8da0b985487f96ea3babc", + "size": 2734, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/91c7cf73d54489c50fb8da0b985487f96ea3babc" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/_middleware.ts", + "mode": "100644", + "type": "blob", + "sha": "e80be9196dc985d178948e18e060e326b1fbd4ba", + "size": 317, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e80be9196dc985d178948e18e060e326b1fbd4ba" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "81db669b2446343708355b8d19af2d7661b3529c", + "size": 11085, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/81db669b2446343708355b8d19af2d7661b3529c" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/settings", + "mode": "040000", + "type": "tree", + "sha": "13d939b2a5b0eef8e8532f411e55d91070b3c2c3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/13d939b2a5b0eef8e8532f411e55d91070b3c2c3" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/settings/(_components)", + "mode": "040000", + "type": "tree", + "sha": "7f9658aa0d934b8129bd34bb534aca93273b8669", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7f9658aa0d934b8129bd34bb534aca93273b8669" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/settings/(_components)/settings-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "9ba4ea0bab8af7a208cf90f9aa2204282a23afb0", + "size": 5230, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9ba4ea0bab8af7a208cf90f9aa2204282a23afb0" + }, + { + "path": "apps/dashboard/routes/project/[project]/channel/[channel]/settings/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "31ca4c9756d253b1d3f58e7fec474a06af76428c", + "size": 1867, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31ca4c9756d253b1d3f58e7fec474a06af76428c" + }, + { + "path": "apps/dashboard/routes/project/[project]/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "8c9fe42e20adcd73fece952510df822962ecc7db", + "size": 2083, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8c9fe42e20adcd73fece952510df822962ecc7db" + }, + { + "path": "apps/dashboard/routes/settings", + "mode": "040000", + "type": "tree", + "sha": "77f46d04d951e5ab21c24c9657733a3c3e195538", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/77f46d04d951e5ab21c24c9657733a3c3e195538" + }, + { + "path": "apps/dashboard/routes/settings/(_components)", + "mode": "040000", + "type": "tree", + "sha": "77eb750ecfee46908d2ab8f784f6fcf08cdd786a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/77eb750ecfee46908d2ab8f784f6fcf08cdd786a" + }, + { + "path": "apps/dashboard/routes/settings/(_components)/settings-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "bb5edb6eb2000e1829e2e6063ee16d322a9a1a11", + "size": 3564, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bb5edb6eb2000e1829e2e6063ee16d322a9a1a11" + }, + { + "path": "apps/dashboard/routes/settings/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "508caa48a8a13f13be407b439fbc06f17984d1a0", + "size": 1997, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/508caa48a8a13f13be407b439fbc06f17984d1a0" + }, + { + "path": "apps/dashboard/routes/skills", + "mode": "040000", + "type": "tree", + "sha": "19aa7b2299106394c9272db0a110583e981918f6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/19aa7b2299106394c9272db0a110583e981918f6" + }, + { + "path": "apps/dashboard/routes/skills/(_components)", + "mode": "040000", + "type": "tree", + "sha": "82d11745a0999d4c0698ecb42496cdec3850cfd3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/82d11745a0999d4c0698ecb42496cdec3850cfd3" + }, + { + "path": "apps/dashboard/routes/skills/(_components)/skills-types.ts", + "mode": "100644", + "type": "blob", + "sha": "b4f911d1570cfd0b9dafbed374dd3b65dc871560", + "size": 376, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b4f911d1570cfd0b9dafbed374dd3b65dc871560" + }, + { + "path": "apps/dashboard/routes/skills/(_components)/skills-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "5d991d0f0ec718042e611e62f422edf07c23e0ab", + "size": 1963, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5d991d0f0ec718042e611e62f422edf07c23e0ab" + }, + { + "path": "apps/dashboard/routes/skills/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "d420df8d2e580f831a39f9888567ece013ce96a8", + "size": 2582, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d420df8d2e580f831a39f9888567ece013ce96a8" + }, + { + "path": "apps/dashboard/routes/team", + "mode": "040000", + "type": "tree", + "sha": "01170b4f4e41ed903f601b03ab454ae8a82be2aa", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/01170b4f4e41ed903f601b03ab454ae8a82be2aa" + }, + { + "path": "apps/dashboard/routes/team/(_components)", + "mode": "040000", + "type": "tree", + "sha": "13fe7a5b839c8808c31ccbf37a73f35480888287", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/13fe7a5b839c8808c31ccbf37a73f35480888287" + }, + { + "path": "apps/dashboard/routes/team/(_components)/team-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "6eca5729581f7ba811e744d8c765b62f67f2828a", + "size": 4020, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6eca5729581f7ba811e744d8c765b62f67f2828a" + }, + { + "path": "apps/dashboard/routes/team/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "1658afccda547eced093cd0c0c2ce72d1175c97f", + "size": 1723, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1658afccda547eced093cd0c0c2ce72d1175c97f" + }, + { + "path": "apps/dashboard/routes/usage", + "mode": "040000", + "type": "tree", + "sha": "af3ccd7ec35138573273b5c54eccf6c43bc6efef", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/af3ccd7ec35138573273b5c54eccf6c43bc6efef" + }, + { + "path": "apps/dashboard/routes/usage/(_components)", + "mode": "040000", + "type": "tree", + "sha": "ba694fb33c6425d5f45cd83fdee3d79771a36a6c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ba694fb33c6425d5f45cd83fdee3d79771a36a6c" + }, + { + "path": "apps/dashboard/routes/usage/(_components)/usage-view.tsx", + "mode": "100644", + "type": "blob", + "sha": "a1c05a17736438065e920351ef75e611f09eef92", + "size": 6958, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a1c05a17736438065e920351ef75e611f09eef92" + }, + { + "path": "apps/dashboard/routes/usage/index.tsx", + "mode": "100644", + "type": "blob", + "sha": "72341f7870435af9720145dada33c308d63bdd8a", + "size": 1915, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/72341f7870435af9720145dada33c308d63bdd8a" + }, + { + "path": "apps/dashboard/static", + "mode": "040000", + "type": "tree", + "sha": "2a313184f4c25bc22a5e2ae9743fbc477d5401ce", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2a313184f4c25bc22a5e2ae9743fbc477d5401ce" + }, + { + "path": "apps/dashboard/static/favicon.ico", + "mode": "100644", + "type": "blob", + "sha": "1cfaaa2193b0f210107a559f7421569f57a25388", + "size": 22382, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1cfaaa2193b0f210107a559f7421569f57a25388" + }, + { + "path": "apps/dashboard/utils.ts", + "mode": "100644", + "type": "blob", + "sha": "a4d7c752a141ea130c481540821dcab0ca663bd7", + "size": 274, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a4d7c752a141ea130c481540821dcab0ca663bd7" + }, + { + "path": "apps/dashboard/vite.config.ts", + "mode": "100644", + "type": "blob", + "sha": "56041b4019cd5765627bdf3b9db4c782ef45f6af", + "size": 6591, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/56041b4019cd5765627bdf3b9db4c782ef45f6af" + }, + { + "path": "appsettings.json", + "mode": "100644", + "type": "blob", + "sha": "294d9a188c37b449cd1d9f3b6c2c506dc6b9a208", + "size": 4423, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/294d9a188c37b449cd1d9f3b6c2c506dc6b9a208" + }, + { + "path": "aspire", + "mode": "040000", + "type": "tree", + "sha": "5a0043f36ad6351862b3a4167132a838103e78b7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/5a0043f36ad6351862b3a4167132a838103e78b7" + }, + { + "path": "aspire/.helpers", + "mode": "040000", + "type": "tree", + "sha": "9e94d61389dbc67a7c1b7d13a37b1a408ac5632c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9e94d61389dbc67a7c1b7d13a37b1a408ac5632c" + }, + { + "path": "aspire/.helpers/_aspire-compat.mts", + "mode": "100644", + "type": "blob", + "sha": "cab7e0b6dd3be3510e6d1549b8ba3a2338c9a000", + "size": 15766, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cab7e0b6dd3be3510e6d1549b8ba3a2338c9a000" + }, + { + "path": "aspire/.helpers/config-schema.mts", + "mode": "100644", + "type": "blob", + "sha": "ca9d8d68ff8e17b6533482eb62fd987432e66dc5", + "size": 1448, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ca9d8d68ff8e17b6533482eb62fd987432e66dc5" + }, + { + "path": "aspire/.helpers/configure-dashboard.mts", + "mode": "100644", + "type": "blob", + "sha": "0a8616d60f292b6627102ff94ffacbb3d364ad94", + "size": 823, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0a8616d60f292b6627102ff94ffacbb3d364ad94" + }, + { + "path": "aspire/.helpers/db-cli-mode.mts", + "mode": "100644", + "type": "blob", + "sha": "1073640469ba0af761da3c71212f1e0acf22a576", + "size": 4821, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1073640469ba0af761da3c71212f1e0acf22a576" + }, + { + "path": "aspire/.helpers/index.mts", + "mode": "100644", + "type": "blob", + "sha": "d09e3d5fecde73df959dbf475218d7ed8aac67db", + "size": 3272, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d09e3d5fecde73df959dbf475218d7ed8aac67db" + }, + { + "path": "aspire/.helpers/register-apps.mts", + "mode": "100644", + "type": "blob", + "sha": "831ed578d71d70eb492d20ec5acef34e734bf7e5", + "size": 7215, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/831ed578d71d70eb492d20ec5acef34e734bf7e5" + }, + { + "path": "aspire/.helpers/register-background.mts", + "mode": "100644", + "type": "blob", + "sha": "d6f79c9d1bfebd2729925a2f6227e495d49e7548", + "size": 6194, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d6f79c9d1bfebd2729925a2f6227e495d49e7548" + }, + { + "path": "aspire/.helpers/register-infrastructure.mts", + "mode": "100644", + "type": "blob", + "sha": "4384e7f97224bc637c2323eed0ff67ed56250645", + "size": 4656, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4384e7f97224bc637c2323eed0ff67ed56250645" + }, + { + "path": "aspire/.helpers/register-plugins.mts", + "mode": "100644", + "type": "blob", + "sha": "38353f16b5d7fee973eb4a49af6fdc326819f231", + "size": 6923, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/38353f16b5d7fee973eb4a49af6fdc326819f231" + }, + { + "path": "aspire/.helpers/register-services.mts", + "mode": "100644", + "type": "blob", + "sha": "d7ec832af95f9b3f2ae24c986e775b7e0f6fbdb2", + "size": 11538, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d7ec832af95f9b3f2ae24c986e775b7e0f6fbdb2" + }, + { + "path": "aspire/.helpers/register-tools.mts", + "mode": "100644", + "type": "blob", + "sha": "aed1f9b379b1a337b78ec555dfa95b1466ddf563", + "size": 4659, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aed1f9b379b1a337b78ec555dfa95b1466ddf563" + }, + { + "path": "aspire/PROPOSED-desktop-resource.md", + "mode": "100644", + "type": "blob", + "sha": "f25265aaa8c3595e6432a4f0989d942ba216cbf0", + "size": 6209, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f25265aaa8c3595e6432a4f0989d942ba216cbf0" + }, + { + "path": "aspire/apphost.mts", + "mode": "100644", + "type": "blob", + "sha": "a3c33f6e2b50aebc2c156dce5c6cc0bac33e62a7", + "size": 454, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3c33f6e2b50aebc2c156dce5c6cc0bac33e62a7" + }, + { + "path": "aspire/aspire.config.json", + "mode": "100644", + "type": "blob", + "sha": "fec83d86abc149888855d9bdf6b408a8ea63a231", + "size": 546, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fec83d86abc149888855d9bdf6b408a8ea63a231" + }, + { + "path": "aspire/deno.lock", + "mode": "100644", + "type": "blob", + "sha": "f5ab7afa549da7bbeb25279b0a13bcb6d86f7ff4", + "size": 8449, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f5ab7afa549da7bbeb25279b0a13bcb6d86f7ff4" + }, + { + "path": "aspire/package-lock.json", + "mode": "100644", + "type": "blob", + "sha": "f0a79a99a9ba1ae29bdb42d6ed69b3d5ac5ec297", + "size": 18064, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f0a79a99a9ba1ae29bdb42d6ed69b3d5ac5ec297" + }, + { + "path": "aspire/package.json", + "mode": "100644", + "type": "blob", + "sha": "d67df4ea198dc25ce0a0d70327691a077a4f1c74", + "size": 255, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d67df4ea198dc25ce0a0d70327691a077a4f1c74" + }, + { + "path": "aspire/tsconfig.apphost.json", + "mode": "100644", + "type": "blob", + "sha": "37ddaee7cb169d2f4bb93e0168f862f1cbde859b", + "size": 469, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/37ddaee7cb169d2f4bb93e0168f862f1cbde859b" + }, + { + "path": "contracts", + "mode": "040000", + "type": "tree", + "sha": "9d4ccf84d8c79587217966d03f6fe8e5a8127408", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9d4ccf84d8c79587217966d03f6fe8e5a8127408" + }, + { + "path": "contracts/deno.json", + "mode": "100644", + "type": "blob", + "sha": "7b6818bef1b5b7d1cd44a48edd37ab405436fb96", + "size": 233, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7b6818bef1b5b7d1cd44a48edd37ab405436fb96" + }, + { + "path": "contracts/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "2c4c519e3ba1e089ff6b1842c5251c734c4b61a0", + "size": 160, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2c4c519e3ba1e089ff6b1842c5251c734c4b61a0" + }, + { + "path": "contracts/package.json", + "mode": "100644", + "type": "blob", + "sha": "493a56f27528e03bbfe0749b3c5b83ab1e2d2257", + "size": 205, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/493a56f27528e03bbfe0749b3c5b83ab1e2d2257" + }, + { + "path": "contracts/versions", + "mode": "040000", + "type": "tree", + "sha": "12253f8eee81f76104b213d8a6be76d01c7ebda8", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/12253f8eee81f76104b213d8a6be76d01c7ebda8" + }, + { + "path": "contracts/versions/v1", + "mode": "040000", + "type": "tree", + "sha": "d356d5f346b351d160505289216dbb17d1679191", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d356d5f346b351d160505289216dbb17d1679191" + }, + { + "path": "contracts/versions/v1/channel.contract.ts", + "mode": "100644", + "type": "blob", + "sha": "22fa7c627441f9aae1a0d637fb1825d1ec437f83", + "size": 18193, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/22fa7c627441f9aae1a0d637fb1825d1ec437f83" + }, + { + "path": "contracts/versions/v1/eischat.contract.ts", + "mode": "100644", + "type": "blob", + "sha": "15bcfbfd8297927bb58b6b6db22aa8bde37f0d61", + "size": 3371, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/15bcfbfd8297927bb58b6b6db22aa8bde37f0d61" + }, + { + "path": "contracts/versions/v1/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "70b4e39c9326c739f3ebea5cd2810c8f48320e8f", + "size": 1162, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/70b4e39c9326c739f3ebea5cd2810c8f48320e8f" + }, + { + "path": "contracts/versions/v1/skills.contract.ts", + "mode": "100644", + "type": "blob", + "sha": "86a73e71e7709e0acf07fa3a1aa5946141f3886e", + "size": 6570, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/86a73e71e7709e0acf07fa3a1aa5946141f3886e" + }, + { + "path": "database", + "mode": "040000", + "type": "tree", + "sha": "18f332f1ae704763e5a31c63b880d795b3792a9e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/18f332f1ae704763e5a31c63b880d795b3792a9e" + }, + { + "path": "database/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "5516b131def177dad6b9af5fffac874bbd45f7d7", + "size": 158, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5516b131def177dad6b9af5fffac874bbd45f7d7" + }, + { + "path": "database/sqlite", + "mode": "040000", + "type": "tree", + "sha": "f226e8be09c8695aed4456b7531558b6e1d32131", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f226e8be09c8695aed4456b7531558b6e1d32131" + }, + { + "path": "database/sqlite/deno.json", + "mode": "100644", + "type": "blob", + "sha": "2a04b2f3d98509b330422026e7b09db177598138", + "size": 3338, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a04b2f3d98509b330422026e7b09db177598138" + }, + { + "path": "database/sqlite/migrations", + "mode": "040000", + "type": "tree", + "sha": "cb52b508246162a0a19c13e400e7b4ac5fa01276", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/cb52b508246162a0a19c13e400e7b4ac5fa01276" + }, + { + "path": "database/sqlite/migrations/20260629124714_init", + "mode": "040000", + "type": "tree", + "sha": "9174bab13cce41bd3f5e01f72df1ac5937ca5fac", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9174bab13cce41bd3f5e01f72df1ac5937ca5fac" + }, + { + "path": "database/sqlite/migrations/20260629124714_init/migration.sql", + "mode": "100644", + "type": "blob", + "sha": "34deeeb053a25491cae666632e0434d5c7898951", + "size": 475, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/34deeeb053a25491cae666632e0434d5c7898951" + }, + { + "path": "database/sqlite/migrations/migration_lock.toml", + "mode": "100644", + "type": "blob", + "sha": "2a5a44419d4f3670b4e8716bf276377e3c696134", + "size": 124, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a5a44419d4f3670b4e8716bf276377e3c696134" + }, + { + "path": "database/sqlite/mod.test.ts", + "mode": "100644", + "type": "blob", + "sha": "415379758867bcf784f1d4f8429125b371da0285", + "size": 1302, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/415379758867bcf784f1d4f8429125b371da0285" + }, + { + "path": "database/sqlite/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "73ea06425d33835345393c0663c3ebb8823a2e40", + "size": 7225, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/73ea06425d33835345393c0663c3ebb8823a2e40" + }, + { + "path": "database/sqlite/prisma.config.ts", + "mode": "100644", + "type": "blob", + "sha": "280fdd9c3846ff1de9a8dadc95676ea68a1e6037", + "size": 4760, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/280fdd9c3846ff1de9a8dadc95676ea68a1e6037" + }, + { + "path": "database/sqlite/schema", + "mode": "040000", + "type": "tree", + "sha": "66b6cc9314f0bc3dd095b62194dc36342b17914b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/66b6cc9314f0bc3dd095b62194dc36342b17914b" + }, + { + "path": "database/sqlite/schema/.generated", + "mode": "040000", + "type": "tree", + "sha": "af456db7296cc51fef5ac34e24db04d8a479dbbe", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/af456db7296cc51fef5ac34e24db04d8a479dbbe" + }, + { + "path": "database/sqlite/schema/.generated/browser.ts", + "mode": "100644", + "type": "blob", + "sha": "bf4b6e53b425c67663df9309deeb9c22eb33497c", + "size": 1069, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf4b6e53b425c67663df9309deeb9c22eb33497c" + }, + { + "path": "database/sqlite/schema/.generated/client.server.ts", + "mode": "100644", + "type": "blob", + "sha": "dfc7f4370c19e1583b73708ec5a0d48ef64bc944", + "size": 2050, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dfc7f4370c19e1583b73708ec5a0d48ef64bc944" + }, + { + "path": "database/sqlite/schema/.generated/client.ts", + "mode": "100644", + "type": "blob", + "sha": "71f799bff934281da21fa770a0072ef22158f2a9", + "size": 137, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/71f799bff934281da21fa770a0072ef22158f2a9" + }, + { + "path": "database/sqlite/schema/.generated/commonInputTypes.ts", + "mode": "100644", + "type": "blob", + "sha": "a1934cd58bf312af09c5b99cb7e749199833f39f", + "size": 6187, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a1934cd58bf312af09c5b99cb7e749199833f39f" + }, + { + "path": "database/sqlite/schema/.generated/enums.ts", + "mode": "100644", + "type": "blob", + "sha": "043572d9f3fca014f0ba017748553bc84b75f5c4", + "size": 336, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/043572d9f3fca014f0ba017748553bc84b75f5c4" + }, + { + "path": "database/sqlite/schema/.generated/internal", + "mode": "040000", + "type": "tree", + "sha": "98a269a7ff1aaa0fa7baa0343073e629f072c7ae", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/98a269a7ff1aaa0fa7baa0343073e629f072c7ae" + }, + { + "path": "database/sqlite/schema/.generated/internal/class.ts", + "mode": "100644", + "type": "blob", + "sha": "3507b9ae9d3d4c94ca08400ed5d06dbb3a7e0f1d", + "size": 12545, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3507b9ae9d3d4c94ca08400ed5d06dbb3a7e0f1d" + }, + { + "path": "database/sqlite/schema/.generated/internal/prismaNamespace.ts", + "mode": "100644", + "type": "blob", + "sha": "ee84afb2d6e2a4007434520604924a9be0a0e691", + "size": 23426, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ee84afb2d6e2a4007434520604924a9be0a0e691" + }, + { + "path": "database/sqlite/schema/.generated/internal/prismaNamespaceBrowser.ts", + "mode": "100644", + "type": "blob", + "sha": "1252425cf96ded685ea7610bf41ff5c681ef7987", + "size": 3026, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1252425cf96ded685ea7610bf41ff5c681ef7987" + }, + { + "path": "database/sqlite/schema/.generated/models.ts", + "mode": "100644", + "type": "blob", + "sha": "fe54f306add9f0d4ed716e5d32e96c654eb4b487", + "size": 404, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe54f306add9f0d4ed716e5d32e96c654eb4b487" + }, + { + "path": "database/sqlite/schema/.generated/models", + "mode": "040000", + "type": "tree", + "sha": "8fb34921771a7d510c7100a47144bad24dbfb0b0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8fb34921771a7d510c7100a47144bad24dbfb0b0" + }, + { + "path": "database/sqlite/schema/.generated/models/Channel.ts", + "mode": "100644", + "type": "blob", + "sha": "b961343df34db98809da2198d69b1bb33120c646", + "size": 38105, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b961343df34db98809da2198d69b1bb33120c646" + }, + { + "path": "database/sqlite/schema/.generated/models/ExampleRecord.ts", + "mode": "100644", + "type": "blob", + "sha": "25072fca3cb6f0aa10e193e5e43577870c8a4ff6", + "size": 40973, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/25072fca3cb6f0aa10e193e5e43577870c8a4ff6" + }, + { + "path": "database/sqlite/schema/.generated/zod", + "mode": "040000", + "type": "tree", + "sha": "81f10c8f2b7601763b3d9bc7ba8ed3ab91d04bd7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/81f10c8f2b7601763b3d9bc7ba8ed3ab91d04bd7" + }, + { + "path": "database/sqlite/schema/.generated/zod/.prisma-zod-generator-manifest.json", + "mode": "100644", + "type": "blob", + "sha": "58c889d38f3c20a81c0ea911d896b4f6700433d9", + "size": 2854, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/58c889d38f3c20a81c0ea911d896b4f6700433d9" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas", + "mode": "040000", + "type": "tree", + "sha": "d79585525e78eac340ada1c0439db3a1bc3f9e0c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d79585525e78eac340ada1c0439db3a1bc3f9e0c" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/enums", + "mode": "040000", + "type": "tree", + "sha": "a1db3d4614dbfd1befd451ce6e6b8d9d7035bbc2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a1db3d4614dbfd1befd451ce6e6b8d9d7035bbc2" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/enums/ChannelScalarFieldEnum.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "adb28eaf3230e1ef372569dd6b50b62edd184d23", + "size": 201, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/adb28eaf3230e1ef372569dd6b50b62edd184d23" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/enums/ExampleRecordScalarFieldEnum.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "8879c885350f0990723a881a1e357bed4a679c65", + "size": 224, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8879c885350f0990723a881a1e357bed4a679c65" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/enums/SortOrder.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "9eb2a6fb5009121db158d870a65ed3d804dca407", + "size": 142, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9eb2a6fb5009121db158d870a65ed3d804dca407" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/enums/TransactionIsolationLevel.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "53265a8faea7a8e1dd214741a11a5ddaf464030e", + "size": 191, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/53265a8faea7a8e1dd214741a11a5ddaf464030e" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/index.ts", + "mode": "100644", + "type": "blob", + "sha": "ad200df7cb082bf8a11c0eae3c6a0bca3f9a6d16", + "size": 2209, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad200df7cb082bf8a11c0eae3c6a0bca3f9a6d16" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/models", + "mode": "040000", + "type": "tree", + "sha": "58cce9287addcb2472aed1cd29cb24b199bc9f99", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/58cce9287addcb2472aed1cd29cb24b199bc9f99" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/models/Channel.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "ad26fc7e2c6cd15152afa85ea2dfe37557c27be0", + "size": 213, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad26fc7e2c6cd15152afa85ea2dfe37557c27be0" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/models/ExampleRecord.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "b8657f4011cf8aa7997df9845e4a15bd47220857", + "size": 234, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b8657f4011cf8aa7997df9845e4a15bd47220857" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/models/index.ts", + "mode": "100644", + "type": "blob", + "sha": "fc97ba0788d47433abe678d35ee19101ac9959df", + "size": 190, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fc97ba0788d47433abe678d35ee19101ac9959df" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects", + "mode": "040000", + "type": "tree", + "sha": "e319cdf266eed87ccd485343a09a3e13f6216948", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e319cdf266eed87ccd485343a09a3e13f6216948" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelCreateManyInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "890040ba44d8eae6a81164c5864e723a22ee294e", + "size": 467, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/890040ba44d8eae6a81164c5864e723a22ee294e" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelOrderByWithRelationInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4ab2461470f1aeed3e41c4e165f497c396e546eb", + "size": 602, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4ab2461470f1aeed3e41c4e165f497c396e546eb" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedCreateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "512a7315484f97cb3756716b22ec97ab45e77d0d", + "size": 487, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/512a7315484f97cb3756716b22ec97ab45e77d0d" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedUpdateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "3ac2532b4ad320318536b4ba856c385cf3ae05ba", + "size": 1057, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3ac2532b4ad320318536b4ba856c385cf3ae05ba" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedUpdateManyInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "6b29ca24bbe0bd5ce91c9b7c2a395c6a326be02a", + "size": 1073, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6b29ca24bbe0bd5ce91c9b7c2a395c6a326be02a" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelUpdateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "721c14699335c10c98144af85d07d9faf663554b", + "size": 1021, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/721c14699335c10c98144af85d07d9faf663554b" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelWhereInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "7342788fa4b992358ee16707ef8730237d54fcaa", + "size": 1227, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7342788fa4b992358ee16707ef8730237d54fcaa" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ChannelWhereUniqueInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "98a13497d03aed6fd998f20134b85cb9fc3d7669", + "size": 421, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98a13497d03aed6fd998f20134b85cb9fc3d7669" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "e75bd41a0e14614e89d68ed4128a3544a862a0c0", + "size": 440, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e75bd41a0e14614e89d68ed4128a3544a862a0c0" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/DateTimeFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "3805a35e7211503f105322fcc00dafc0d1aef54b", + "size": 805, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3805a35e7211503f105322fcc00dafc0d1aef54b" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/DateTimeWithAggregatesFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "2904adf337cf95de0e923c7c58bc88c315c1e70b", + "size": 1345, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2904adf337cf95de0e923c7c58bc88c315c1e70b" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordCreateManyInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "e1f766b5924b1066717736dfebaee8263410fffc", + "size": 512, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e1f766b5924b1066717736dfebaee8263410fffc" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordOrderByWithRelationInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "a70ebedeff2c27bf4c8fd36bc9647032636d6b3c", + "size": 631, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a70ebedeff2c27bf4c8fd36bc9647032636d6b3c" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedCreateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4e7a2e718644dd612e1ae8fc934187742c32af44", + "size": 491, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4e7a2e718644dd612e1ae8fc934187742c32af44" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedUpdateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4fe1da55b3a114376ce7b69596ee827c2161ade9", + "size": 1093, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4fe1da55b3a114376ce7b69596ee827c2161ade9" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedUpdateManyInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "2fd46c8da0a380cc3ad6e633270ab95a0e4dba0b", + "size": 1109, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2fd46c8da0a380cc3ad6e633270ab95a0e4dba0b" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUpdateInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "9639b1d7312e31d67b7967879082223801aa894d", + "size": 1057, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9639b1d7312e31d67b7967879082223801aa894d" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordWhereInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "7dad96f85d132036abf55beb93d3da1e28479ed6", + "size": 1293, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7dad96f85d132036abf55beb93d3da1e28479ed6" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordWhereUniqueInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "43e76cc472ba8c387d4b971717c4d67bfd01b8ff", + "size": 414, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/43e76cc472ba8c387d4b971717c4d67bfd01b8ff" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/NestedDateTimeFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "b532365ee308e631c082f5168159f34ca51ace46", + "size": 738, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b532365ee308e631c082f5168159f34ca51ace46" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "f767bc9d9f88d012176a963f650272dfcc867d29", + "size": 1234, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f767bc9d9f88d012176a963f650272dfcc867d29" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/NestedIntFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "13b1b9521d07d9efdd71626abbbffe89739fe2d9", + "size": 703, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/13b1b9521d07d9efdd71626abbbffe89739fe2d9" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/NestedStringFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4c4cadfa81240a1c3fe54d1a94434869d024b273", + "size": 777, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c4cadfa81240a1c3fe54d1a94434869d024b273" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/NestedStringWithAggregatesFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4286499eb2a8af041440049766f95637471f0cb5", + "size": 1263, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4286499eb2a8af041440049766f95637471f0cb5" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/StringFieldUpdateOperationsInput.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "2732ace1ca1b4dd838e4fc76fcd1058777d7a85e", + "size": 427, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2732ace1ca1b4dd838e4fc76fcd1058777d7a85e" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/StringFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "819f005c9fca0ee87d5a5125036dd4c905e2010c", + "size": 838, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/819f005c9fca0ee87d5a5125036dd4c905e2010c" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/objects/StringWithAggregatesFilter.schema.ts", + "mode": "100644", + "type": "blob", + "sha": "4f5e08de4fec4aa288c87c393f6bb1b93dd53bc5", + "size": 1368, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4f5e08de4fec4aa288c87c393f6bb1b93dd53bc5" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants", + "mode": "040000", + "type": "tree", + "sha": "92b8eebacd1d9324f0108d24aa5b097483879629", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/92b8eebacd1d9324f0108d24aa5b097483879629" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/index.ts", + "mode": "100644", + "type": "blob", + "sha": "0f8247372686f58de92a29018c6766459026c058", + "size": 177, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0f8247372686f58de92a29018c6766459026c058" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/input", + "mode": "040000", + "type": "tree", + "sha": "b9b363f6da36d874e94548b6c21a0cff525d8eb2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b9b363f6da36d874e94548b6c21a0cff525d8eb2" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/input/Channel.input.ts", + "mode": "100644", + "type": "blob", + "sha": "efe0bd71ffffbf93b2014cbb5771d6e045d38392", + "size": 217, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/efe0bd71ffffbf93b2014cbb5771d6e045d38392" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/input/ExampleRecord.input.ts", + "mode": "100644", + "type": "blob", + "sha": "a12d71dad8ce3526828edc648437c7044d02c948", + "size": 213, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a12d71dad8ce3526828edc648437c7044d02c948" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/input/index.ts", + "mode": "100644", + "type": "blob", + "sha": "28176db5f10c9507d4f22672dd47b9e1be62ea53", + "size": 201, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/28176db5f10c9507d4f22672dd47b9e1be62ea53" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/pure", + "mode": "040000", + "type": "tree", + "sha": "18a597302828d38e1f8f204bb5e5e1fa1a1953da", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/18a597302828d38e1f8f204bb5e5e1fa1a1953da" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/pure/Channel.pure.ts", + "mode": "100644", + "type": "blob", + "sha": "96cc70bf6e59f9a25e2a24d505bfbcbf9240fe89", + "size": 261, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/96cc70bf6e59f9a25e2a24d505bfbcbf9240fe89" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/pure/ExampleRecord.pure.ts", + "mode": "100644", + "type": "blob", + "sha": "ca6b2f32191fa979c291992b8adf29ac2fd68e1c", + "size": 282, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ca6b2f32191fa979c291992b8adf29ac2fd68e1c" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/pure/index.ts", + "mode": "100644", + "type": "blob", + "sha": "a39a0394391e10dfa87b5eb5df1e37e9e5bc9dc2", + "size": 198, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a39a0394391e10dfa87b5eb5df1e37e9e5bc9dc2" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/result", + "mode": "040000", + "type": "tree", + "sha": "980427f944d41ae82fb2e4f993621d01588f1e69", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/980427f944d41ae82fb2e4f993621d01588f1e69" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/result/Channel.result.ts", + "mode": "100644", + "type": "blob", + "sha": "c43e63fe16690e8372572d3c0438e56eb2da03aa", + "size": 265, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c43e63fe16690e8372572d3c0438e56eb2da03aa" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/result/ExampleRecord.result.ts", + "mode": "100644", + "type": "blob", + "sha": "02b518b31aef31cddf33f35274e47c1aa1b38c50", + "size": 286, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/02b518b31aef31cddf33f35274e47c1aa1b38c50" + }, + { + "path": "database/sqlite/schema/.generated/zod/schemas/variants/result/index.ts", + "mode": "100644", + "type": "blob", + "sha": "fce125ec0767616ed41833cd5252765e193fb52e", + "size": 206, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fce125ec0767616ed41833cd5252765e193fb52e" + }, + { + "path": "database/sqlite/schema/schema.prisma", + "mode": "100644", + "type": "blob", + "sha": "9ca7b46eee8dd8ec63fd042fa5ac9498161123d4", + "size": 796, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9ca7b46eee8dd8ec63fd042fa5ac9498161123d4" + }, + { + "path": "database/sqlite/schema/zod-generator.config.json", + "mode": "100644", + "type": "blob", + "sha": "fe782208d36dabc6209f912203514bc97b60b4da", + "size": 230, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe782208d36dabc6209f912203514bc97b60b4da" + }, + { + "path": "database/sqlite/scripts", + "mode": "040000", + "type": "tree", + "sha": "7a977b4df833f419f3257efaf9639a249bcfe30f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7a977b4df833f419f3257efaf9639a249bcfe30f" + }, + { + "path": "database/sqlite/scripts/clear-seeded-client.ts", + "mode": "100644", + "type": "blob", + "sha": "e73cc2fb0a3373fad561e73c224678c0de5fc1db", + "size": 286, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e73cc2fb0a3373fad561e73c224678c0de5fc1db" + }, + { + "path": "database/sqlite/scripts/fix-zod-imports.ts", + "mode": "100644", + "type": "blob", + "sha": "3fc35595d4885b4e611b86ab2567584e1c6a924b", + "size": 574, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3fc35595d4885b4e611b86ab2567584e1c6a924b" + }, + { + "path": "database/sqlite/scripts/generate-zod.ts", + "mode": "100644", + "type": "blob", + "sha": "fdf9826bd8d5971025fd8107bb1380f9cdcd1ef4", + "size": 362, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fdf9826bd8d5971025fd8107bb1380f9cdcd1ef4" + }, + { + "path": "database/sqlite/scripts/migrate.ts", + "mode": "100644", + "type": "blob", + "sha": "b626418a13b793c1d94962087418ef75ea1130db", + "size": 232, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b626418a13b793c1d94962087418ef75ea1130db" + }, + { + "path": "database/sqlite/scripts/patch-prisma-client.ts", + "mode": "100644", + "type": "blob", + "sha": "1a9e441a980f9e8ee8e1e02f50079678fe164d27", + "size": 344, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1a9e441a980f9e8ee8e1e02f50079678fe164d27" + }, + { + "path": "database/sqlite/scripts/seed.ts", + "mode": "100644", + "type": "blob", + "sha": "c0ada291e38dd06021d645b6766985e962bd068b", + "size": 544, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c0ada291e38dd06021d645b6766985e962bd068b" + }, + { + "path": "database/sqlite/zod-generator.config.json", + "mode": "100644", + "type": "blob", + "sha": "fe782208d36dabc6209f912203514bc97b60b4da", + "size": 230, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe782208d36dabc6209f912203514bc97b60b4da" + }, + { + "path": "deno.json", + "mode": "100644", + "type": "blob", + "sha": "d06fb62b96a2df493d34d3a84423b88b8b7fcb21", + "size": 6323, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d06fb62b96a2df493d34d3a84423b88b8b7fcb21" + }, + { + "path": "deno.lock", + "mode": "100644", + "type": "blob", + "sha": "0337daec9b93ae3988322421b7f3399ac438f80e", + "size": 213984, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0337daec9b93ae3988322421b7f3399ac438f80e" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "sha": "c238a81f0dda10263cb5c1771313e89d3e5290d2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c238a81f0dda10263cb5c1771313e89d3e5290d2" + }, + { + "path": "docs/ARCHITECTURE.md", + "mode": "100644", + "type": "blob", + "sha": "a8d6281f7e382690f278870b46cd5e1c275a1765", + "size": 12146, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a8d6281f7e382690f278870b46cd5e1c275a1765" + }, + { + "path": "docs/BUILD-PLAN.md", + "mode": "100644", + "type": "blob", + "sha": "ba81d567b00331b5bc55a21d28f9b794a0c406ee", + "size": 5450, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ba81d567b00331b5bc55a21d28f9b794a0c406ee" + }, + { + "path": "docs/DESKTOP-SHELL.md", + "mode": "100644", + "type": "blob", + "sha": "719daea7845b2991b06c4b4bf247bdd6c203daad", + "size": 26882, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/719daea7845b2991b06c4b4bf247bdd6c203daad" + }, + { + "path": "docs/HANDOVER.md", + "mode": "100644", + "type": "blob", + "sha": "be828006fa759b460aa6a307aa5bdf4bebc93df1", + "size": 7941, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/be828006fa759b460aa6a307aa5bdf4bebc93df1" + }, + { + "path": "docs/INDEX.md", + "mode": "100644", + "type": "blob", + "sha": "e3289352d22409b5dea7ee07dc072319180629f6", + "size": 4223, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e3289352d22409b5dea7ee07dc072319180629f6" + }, + { + "path": "docs/NETSCRIPT-BETA9-NON-AI-MIGRATION.md", + "mode": "100644", + "type": "blob", + "sha": "205af111975f05d9eb960eb4f6ce39e895361dd7", + "size": 13373, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/205af111975f05d9eb960eb4f6ce39e895361dd7" + }, + { + "path": "docs/PHASE-1-FOUNDATION.md", + "mode": "100644", + "type": "blob", + "sha": "3dd4380656f96e00c2971aa6546ccd3bbd2197f2", + "size": 5095, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3dd4380656f96e00c2971aa6546ccd3bbd2197f2" + }, + { + "path": "docs/PHASE-2-CHAT.md", + "mode": "100644", + "type": "blob", + "sha": "e830d0d31d8d9ff9951026512ef16c5a273a1eb0", + "size": 4491, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e830d0d31d8d9ff9951026512ef16c5a273a1eb0" + }, + { + "path": "docs/PHASE-3-MCP.md", + "mode": "100644", + "type": "blob", + "sha": "131d7c284b8f189259f2c5f06b747d3d8631c879", + "size": 4151, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/131d7c284b8f189259f2c5f06b747d3d8631c879" + }, + { + "path": "docs/PHASE-4-RAG.md", + "mode": "100644", + "type": "blob", + "sha": "a0c0845993536b8e8d9a2995cddb9fb2cd7c32e8", + "size": 6517, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a0c0845993536b8e8d9a2995cddb9fb2cd7c32e8" + }, + { + "path": "docs/PHASE-5-CONTEXT.md", + "mode": "100644", + "type": "blob", + "sha": "698f1d654133feb989c77537b1204e91a8e228e6", + "size": 3767, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/698f1d654133feb989c77537b1204e91a8e228e6" + }, + { + "path": "docs/PHASE-5-NOTES.md", + "mode": "100644", + "type": "blob", + "sha": "197770915982331c0dc54ba1d882fa6ca92b8786", + "size": 7984, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/197770915982331c0dc54ba1d882fa6ca92b8786" + }, + { + "path": "docs/PHASE-6-SHARING.md", + "mode": "100644", + "type": "blob", + "sha": "e19e337f6420cc3823fbde6115f8fd40af230d94", + "size": 5668, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e19e337f6420cc3823fbde6115f8fd40af230d94" + }, + { + "path": "docs/PHASE-7-MCP-UI.md", + "mode": "100644", + "type": "blob", + "sha": "f20dab1af6fd145d56e834a573e510d0994bb71d", + "size": 3915, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f20dab1af6fd145d56e834a573e510d0994bb71d" + }, + { + "path": "docs/PRODUCT.md", + "mode": "100644", + "type": "blob", + "sha": "a1c465fc952505ac7ce23a73b115cede8a9ea8a3", + "size": 5889, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a1c465fc952505ac7ce23a73b115cede8a9ea8a3" + }, + { + "path": "docs/ROADMAP-DONE-AND-MIGRATION.md", + "mode": "100644", + "type": "blob", + "sha": "da1a1e77fa08c3b9ebb79dbbc4252229c0a163c6", + "size": 14073, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/da1a1e77fa08c3b9ebb79dbbc4252229c0a163c6" + }, + { + "path": "docs/SKILL.md", + "mode": "100644", + "type": "blob", + "sha": "d742446ada936dbef76b40d4784854ab13a4bfbe", + "size": 5210, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d742446ada936dbef76b40d4784854ab13a4bfbe" + }, + { + "path": "docs/adapter-audit-120.md", + "mode": "100644", + "type": "blob", + "sha": "bb9171a0d4f4a04a1535fcfe76ec3121898e269d", + "size": 9261, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bb9171a0d4f4a04a1535fcfe76ec3121898e269d" + }, + { + "path": "docs/assets", + "mode": "040000", + "type": "tree", + "sha": "177560af9348b144be2ce0c84b4605bc5681a228", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/177560af9348b144be2ce0c84b4605bc5681a228" + }, + { + "path": "docs/assets/01-home.png", + "mode": "100644", + "type": "blob", + "sha": "76aaf572fbb5f44096466b4c1521010e1f4eeab3", + "size": 91999, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/76aaf572fbb5f44096466b4c1521010e1f4eeab3" + }, + { + "path": "docs/assets/02-channels.png", + "mode": "100644", + "type": "blob", + "sha": "3327e1edb0313419e9c4640d9ab2680cdcb36f77", + "size": 50712, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3327e1edb0313419e9c4640d9ab2680cdcb36f77" + }, + { + "path": "docs/assets/03-channel-context.png", + "mode": "100644", + "type": "blob", + "sha": "917e2b5e4acd157fde0d005a498a56d666e80f12", + "size": 40276, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/917e2b5e4acd157fde0d005a498a56d666e80f12" + }, + { + "path": "docs/assets/04-session-chat.png", + "mode": "100644", + "type": "blob", + "sha": "2f3a3ab8d7b6d5686461f7a37933d0a1b07aaa93", + "size": 68484, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2f3a3ab8d7b6d5686461f7a37933d0a1b07aaa93" + }, + { + "path": "docs/assets/05-mcp-grounding.png", + "mode": "100644", + "type": "blob", + "sha": "b96ab652226d7f82db6c633774e123578f9c90eb", + "size": 76518, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b96ab652226d7f82db6c633774e123578f9c90eb" + }, + { + "path": "docs/assets/06-channel-rag.png", + "mode": "100644", + "type": "blob", + "sha": "13eaec7a525aac856a54a61fb70545f63b01973f", + "size": 62049, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/13eaec7a525aac856a54a61fb70545f63b01973f" + }, + { + "path": "docs/assets/07-screenshot-to-context.png", + "mode": "100644", + "type": "blob", + "sha": "21b0f60617ce47fbf2f4d06d9ced552b70744769", + "size": 62993, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/21b0f60617ce47fbf2f4d06d9ced552b70744769" + }, + { + "path": "docs/assets/08-mcp-ui-chart.png", + "mode": "100644", + "type": "blob", + "sha": "b6062b84d001b88ef187904a187e5c0702a5d9c3", + "size": 76512, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b6062b84d001b88ef187904a187e5c0702a5d9c3" + }, + { + "path": "docs/assets/09-channel-sharing.png", + "mode": "100644", + "type": "blob", + "sha": "697499f4b8814f9d1b0195858472d4ec30c07b36", + "size": 65000, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/697499f4b8814f9d1b0195858472d4ec30c07b36" + }, + { + "path": "docs/assets/README.md", + "mode": "100644", + "type": "blob", + "sha": "b3aaa7ec661141e779a8368e8528623ab172a6cc", + "size": 1784, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b3aaa7ec661141e779a8368e8528623ab172a6cc" + }, + { + "path": "docs/assets/example-error-input.png", + "mode": "100644", + "type": "blob", + "sha": "4ac0e48b6a913088b895f2309df7789d172fab2b", + "size": 11143, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4ac0e48b6a913088b895f2309df7789d172fab2b" + }, + { + "path": "docs/design", + "mode": "040000", + "type": "tree", + "sha": "762d3083d5f7eaeec9f4508bf0d08693ebdbc06f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/762d3083d5f7eaeec9f4508bf0d08693ebdbc06f" + }, + { + "path": "docs/design/BUILD-CONTRACT.md", + "mode": "100644", + "type": "blob", + "sha": "f2576b07d10559692fc5bf5367c8fc8933410cb2", + "size": 6225, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f2576b07d10559692fc5bf5367c8fc8933410cb2" + }, + { + "path": "docs/design/CLAUDE-DESIGN-BRIEF.md", + "mode": "100644", + "type": "blob", + "sha": "484daab3ccac64a86509cc4b7d9ee90a9bd12601", + "size": 6390, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/484daab3ccac64a86509cc4b7d9ee90a9bd12601" + }, + { + "path": "docs/design/CLAUDE-DESIGN-PROMPT.md", + "mode": "100644", + "type": "blob", + "sha": "46fcf3400bbcb3e689dd35e4eafe97fd2617cb0a", + "size": 3592, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/46fcf3400bbcb3e689dd35e4eafe97fd2617cb0a" + }, + { + "path": "docs/design/DECISIONS.md", + "mode": "100644", + "type": "blob", + "sha": "63c4d3f2fbb9459e50de8bc2977cbba6a375ac94", + "size": 6524, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/63c4d3f2fbb9459e50de8bc2977cbba6a375ac94" + }, + { + "path": "docs/design/PROPOSED-COMPONENTS.md", + "mode": "100644", + "type": "blob", + "sha": "8a8e5fdaa85647a369c0ec126a5c69e7784d9394", + "size": 4651, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8a8e5fdaa85647a369c0ec126a5c69e7784d9394" + }, + { + "path": "docs/design/inspiration", + "mode": "040000", + "type": "tree", + "sha": "6b204fa6f28ecc4c622652667597a36273da8ca0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6b204fa6f28ecc4c622652667597a36273da8ca0" + }, + { + "path": "docs/design/inspiration/00-videoframe.png", + "mode": "100644", + "type": "blob", + "sha": "135f0b95aa6414117b33516ff9c5c7ada02e8b33", + "size": 604185, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/135f0b95aa6414117b33516ff9c5c7ada02e8b33" + }, + { + "path": "docs/design/inspiration/01-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "9e3fb83fce91da79ab6ec1a2892d4eba9d19a995", + "size": 265851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9e3fb83fce91da79ab6ec1a2892d4eba9d19a995" + }, + { + "path": "docs/design/inspiration/02-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "fbb1b4acf723860c2ea88cb9dcd8ac24d876fcb3", + "size": 210581, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fbb1b4acf723860c2ea88cb9dcd8ac24d876fcb3" + }, + { + "path": "docs/design/inspiration/03-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "00c5a968f12aac0bf5e249905a36c81a1581ffd0", + "size": 369448, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/00c5a968f12aac0bf5e249905a36c81a1581ffd0" + }, + { + "path": "docs/design/inspiration/04-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "b2e95e7a87e1137631358b66db2854f45ab70284", + "size": 432746, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b2e95e7a87e1137631358b66db2854f45ab70284" + }, + { + "path": "docs/design/inspiration/05-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "3a3ae9419d4fe994d19f18c0a38227594e835f5e", + "size": 209951, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3a3ae9419d4fe994d19f18c0a38227594e835f5e" + }, + { + "path": "docs/design/inspiration/06-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "607920cfcec75b0bbe4a383c9fe6ce4f95b92259", + "size": 180612, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/607920cfcec75b0bbe4a383c9fe6ce4f95b92259" + }, + { + "path": "docs/design/inspiration/07-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "e4fcd6e3ee73d5f39863f2c9cf5e498cc0f2f1d5", + "size": 273261, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4fcd6e3ee73d5f39863f2c9cf5e498cc0f2f1d5" + }, + { + "path": "docs/design/inspiration/08-dribbble.png", + "mode": "100644", + "type": "blob", + "sha": "7f76564173415dd6244d217dbf72a242f64f8bb6", + "size": 198081, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7f76564173415dd6244d217dbf72a242f64f8bb6" + }, + { + "path": "netscript.config.ts", + "mode": "100644", + "type": "blob", + "sha": "9469b4215c5d394a77804e88d1ef91bb00bf205e", + "size": 491, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9469b4215c5d394a77804e88d1ef91bb00bf205e" + }, + { + "path": "package.json", + "mode": "100644", + "type": "blob", + "sha": "23e6f189591d1bb9de29a6a0c1f92cf82bf7bab2", + "size": 3293, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/23e6f189591d1bb9de29a6a0c1f92cf82bf7bab2" + }, + { + "path": "packages", + "mode": "040000", + "type": "tree", + "sha": "7922dc92f92c0865d587e1fe797c4e6781807893", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7922dc92f92c0865d587e1fe797c4e6781807893" + }, + { + "path": "packages/channel", + "mode": "040000", + "type": "tree", + "sha": "ffe53aa7a94f22706da1e2c669f9e27bd28a3fe8", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ffe53aa7a94f22706da1e2c669f9e27bd28a3fe8" + }, + { + "path": "packages/channel/channel_test.ts", + "mode": "100644", + "type": "blob", + "sha": "536ee7d320a017cc850ce04659f1827a50346b81", + "size": 12440, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/536ee7d320a017cc850ce04659f1827a50346b81" + }, + { + "path": "packages/channel/deno.json", + "mode": "100644", + "type": "blob", + "sha": "9d4bde2fda8cccce3b5335a0fee44911b39d4d6a", + "size": 143, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9d4bde2fda8cccce3b5335a0fee44911b39d4d6a" + }, + { + "path": "packages/channel/kb-image.test.ts", + "mode": "100644", + "type": "blob", + "sha": "5caf52f49306abac6b22ff23359d19164d068e80", + "size": 2813, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5caf52f49306abac6b22ff23359d19164d068e80" + }, + { + "path": "packages/channel/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "6df2ae84a15f1dcc90ae747e9a98646d0ca98f31", + "size": 38538, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6df2ae84a15f1dcc90ae747e9a98646d0ca98f31" + }, + { + "path": "packages/skills", + "mode": "040000", + "type": "tree", + "sha": "f577b232a71d403b9a7cbeccafe55bf99ca9f0fb", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f577b232a71d403b9a7cbeccafe55bf99ca9f0fb" + }, + { + "path": "packages/skills/deno.json", + "mode": "100644", + "type": "blob", + "sha": "a4c20f4ece2cef3b88e88acc5fef48bb33600be3", + "size": 188, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a4c20f4ece2cef3b88e88acc5fef48bb33600be3" + }, + { + "path": "packages/skills/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "851dc900887781fce9632f2f01c05a3b4b7efe5c", + "size": 15135, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/851dc900887781fce9632f2f01c05a3b4b7efe5c" + }, + { + "path": "packages/skills/skills_test.ts", + "mode": "100644", + "type": "blob", + "sha": "bef8800d1a8301c2b0abea09d98fcb43239b1982", + "size": 9730, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bef8800d1a8301c2b0abea09d98fcb43239b1982" + }, + { + "path": "plugins", + "mode": "040000", + "type": "tree", + "sha": "1d59237283f629d418ad697e4f01d106f0e094f5", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/1d59237283f629d418ad697e4f01d106f0e094f5" + }, + { + "path": "plugins/channel-sync", + "mode": "040000", + "type": "tree", + "sha": "421e8a37ebefa6f9c0924b537c1c44d2da8043ac", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/421e8a37ebefa6f9c0924b537c1c44d2da8043ac" + }, + { + "path": "plugins/channel-sync/_fs.ts", + "mode": "100644", + "type": "blob", + "sha": "aec1af6f867416283fbb9944a6a90c9872affb99", + "size": 5626, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aec1af6f867416283fbb9944a6a90c9872affb99" + }, + { + "path": "plugins/channel-sync/_lock.ts", + "mode": "100644", + "type": "blob", + "sha": "e08f919fb2eae7e36960b369fb4874b63fad63c7", + "size": 7195, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e08f919fb2eae7e36960b369fb4874b63fad63c7" + }, + { + "path": "plugins/channel-sync/deno.json", + "mode": "100644", + "type": "blob", + "sha": "0651c7f290f3c4a40a9fbe5bef4386dfb1122915", + "size": 86, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0651c7f290f3c4a40a9fbe5bef4386dfb1122915" + }, + { + "path": "plugins/channel-sync/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "66584f2a8924cc353d7166044b20989c8fb96a7b", + "size": 2891, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/66584f2a8924cc353d7166044b20989c8fb96a7b" + }, + { + "path": "plugins/channel-sync/smb.ts", + "mode": "100644", + "type": "blob", + "sha": "026cb0cf63f8ff5fc16e1067b65888c4a3342e5d", + "size": 14362, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/026cb0cf63f8ff5fc16e1067b65888c4a3342e5d" + }, + { + "path": "plugins/channel-sync/smb_test.ts", + "mode": "100644", + "type": "blob", + "sha": "c36d836a4481b11c96ba48a7f99ca77ba4f20aa2", + "size": 15080, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c36d836a4481b11c96ba48a7f99ca77ba4f20aa2" + }, + { + "path": "plugins/deno.json", + "mode": "100644", + "type": "blob", + "sha": "be8ffe5c068903487778c12d799531dd7e0da134", + "size": 81, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/be8ffe5c068903487778c12d799531dd7e0da134" + }, + { + "path": "plugins/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "f3f368f2792a2cba3996df54c3699a0004641056", + "size": 224, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f3f368f2792a2cba3996df54c3699a0004641056" + }, + { + "path": "resources", + "mode": "040000", + "type": "tree", + "sha": "bd1cb6e0f5efae98c20509c7009f9b5e070109ff", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/bd1cb6e0f5efae98c20509c7009f9b5e070109ff" + }, + { + "path": "resources/README.md", + "mode": "100644", + "type": "blob", + "sha": "922360b4cca875800d674137963b4548e61b1009", + "size": 2281, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/922360b4cca875800d674137963b4548e61b1009" + }, + { + "path": "resources/deno-desktop", + "mode": "040000", + "type": "tree", + "sha": "27734ea995f444354c1f572d3b012cd1c6350504", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/27734ea995f444354c1f572d3b012cd1c6350504" + }, + { + "path": "resources/deno-desktop/auto_update.md", + "mode": "100644", + "type": "blob", + "sha": "4d0c7280e3dbb64f2dabcc2e1436a96984a809dc", + "size": 10668, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4d0c7280e3dbb64f2dabcc2e1436a96984a809dc" + }, + { + "path": "resources/deno-desktop/backends.md", + "mode": "100644", + "type": "blob", + "sha": "65e5eae43751ad62c9118db5bf5772c17e86b036", + "size": 4033, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/65e5eae43751ad62c9118db5bf5772c17e86b036" + }, + { + "path": "resources/deno-desktop/bindings.md", + "mode": "100644", + "type": "blob", + "sha": "0c2dbb985f7bdb2683c20c190ca86d3ebbefc393", + "size": 6639, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0c2dbb985f7bdb2683c20c190ca86d3ebbefc393" + }, + { + "path": "resources/deno-desktop/comparison.md", + "mode": "100644", + "type": "blob", + "sha": "6fa694a9488acd79b16ebee2fe3af3240d1248b8", + "size": 8025, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6fa694a9488acd79b16ebee2fe3af3240d1248b8" + }, + { + "path": "resources/deno-desktop/configuration.md", + "mode": "100644", + "type": "blob", + "sha": "4bd9ccfd51d285877e395196e7500d8d8f506caf", + "size": 6850, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4bd9ccfd51d285877e395196e7500d8d8f506caf" + }, + { + "path": "resources/deno-desktop/desktop.md", + "mode": "100644", + "type": "blob", + "sha": "baac69d38b9a17f8b01d47d55a386fece9f5fcc2", + "size": 3751, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/baac69d38b9a17f8b01d47d55a386fece9f5fcc2" + }, + { + "path": "resources/deno-desktop/devtools.md", + "mode": "100644", + "type": "blob", + "sha": "8aa8e7b3e39963df32ec3aef9ec43fcccc00d73f", + "size": 6158, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8aa8e7b3e39963df32ec3aef9ec43fcccc00d73f" + }, + { + "path": "resources/deno-desktop/dialogs.md", + "mode": "100644", + "type": "blob", + "sha": "579649902e073efcfc0a19dc075e8785d9a678e4", + "size": 3695, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/579649902e073efcfc0a19dc075e8785d9a678e4" + }, + { + "path": "resources/deno-desktop/distribution.md", + "mode": "100644", + "type": "blob", + "sha": "c80aa1d15cb44eeace9e295811909a27bb6fb460", + "size": 9303, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c80aa1d15cb44eeace9e295811909a27bb6fb460" + }, + { + "path": "resources/deno-desktop/error_reporting.md", + "mode": "100644", + "type": "blob", + "sha": "1f6344a23f08c471e14cd3c7262919122f1d865c", + "size": 6721, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1f6344a23f08c471e14cd3c7262919122f1d865c" + }, + { + "path": "resources/deno-desktop/frameworks.md", + "mode": "100644", + "type": "blob", + "sha": "3f69520bbbb8b262b031f2486148c1645a1c5fab", + "size": 5945, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3f69520bbbb8b262b031f2486148c1645a1c5fab" + }, + { + "path": "resources/deno-desktop/hmr.md", + "mode": "100644", + "type": "blob", + "sha": "720a9d26dad1b8a33aae572012f04b285e04b054", + "size": 5124, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/720a9d26dad1b8a33aae572012f04b285e04b054" + }, + { + "path": "resources/deno-desktop/index.md", + "mode": "100644", + "type": "blob", + "sha": "668876bc62be524c60cc883db311b19319db0022", + "size": 4838, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/668876bc62be524c60cc883db311b19319db0022" + }, + { + "path": "resources/deno-desktop/menus.md", + "mode": "100644", + "type": "blob", + "sha": "9e3b8e69811b286a0cf3e7d2b345251219dcba87", + "size": 6688, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9e3b8e69811b286a0cf3e7d2b345251219dcba87" + }, + { + "path": "resources/deno-desktop/notifications.md", + "mode": "100644", + "type": "blob", + "sha": "b9cea06096cfeba91ebe23459b81649c1c49b430", + "size": 6018, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b9cea06096cfeba91ebe23459b81649c1c49b430" + }, + { + "path": "resources/deno-desktop/serving.md", + "mode": "100644", + "type": "blob", + "sha": "db1125893ae26ccfe102d2553f837828cdc93a0e", + "size": 4429, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/db1125893ae26ccfe102d2553f837828cdc93a0e" + }, + { + "path": "resources/deno-desktop/tray_and_dock.md", + "mode": "100644", + "type": "blob", + "sha": "7289877138dd493b1da96a3c812a76420d8f1351", + "size": 8699, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7289877138dd493b1da96a3c812a76420d8f1351" + }, + { + "path": "resources/deno-desktop/windows.md", + "mode": "100644", + "type": "blob", + "sha": "bbca1bce03aafdb55d3a4219d7f5bad3864f1407", + "size": 10109, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bbca1bce03aafdb55d3a4219d7f5bad3864f1407" + }, + { + "path": "resources/design", + "mode": "040000", + "type": "tree", + "sha": "47530ea24dc0666e7503ed1c8ba2eb71101445e9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/47530ea24dc0666e7503ed1c8ba2eb71101445e9" + }, + { + "path": "resources/design/CLAUDE-DESIGN-BRIEF.md", + "mode": "100644", + "type": "blob", + "sha": "0b9483bbb45cd14ad576cb384aeb9ccb16bd088b", + "size": 6392, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0b9483bbb45cd14ad576cb384aeb9ccb16bd088b" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095055.png", + "mode": "100644", + "type": "blob", + "sha": "9e3fb83fce91da79ab6ec1a2892d4eba9d19a995", + "size": 265851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9e3fb83fce91da79ab6ec1a2892d4eba9d19a995" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095132.png", + "mode": "100644", + "type": "blob", + "sha": "fbb1b4acf723860c2ea88cb9dcd8ac24d876fcb3", + "size": 210581, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fbb1b4acf723860c2ea88cb9dcd8ac24d876fcb3" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095237.png", + "mode": "100644", + "type": "blob", + "sha": "00c5a968f12aac0bf5e249905a36c81a1581ffd0", + "size": 369448, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/00c5a968f12aac0bf5e249905a36c81a1581ffd0" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095252.png", + "mode": "100644", + "type": "blob", + "sha": "b2e95e7a87e1137631358b66db2854f45ab70284", + "size": 432746, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b2e95e7a87e1137631358b66db2854f45ab70284" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095351.png", + "mode": "100644", + "type": "blob", + "sha": "3a3ae9419d4fe994d19f18c0a38227594e835f5e", + "size": 209951, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3a3ae9419d4fe994d19f18c0a38227594e835f5e" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095526.png", + "mode": "100644", + "type": "blob", + "sha": "607920cfcec75b0bbe4a383c9fe6ce4f95b92259", + "size": 180612, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/607920cfcec75b0bbe4a383c9fe6ce4f95b92259" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095617.png", + "mode": "100644", + "type": "blob", + "sha": "e4fcd6e3ee73d5f39863f2c9cf5e498cc0f2f1d5", + "size": 273261, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4fcd6e3ee73d5f39863f2c9cf5e498cc0f2f1d5" + }, + { + "path": "resources/design/Capture d'écran 2026-06-30 095632.png", + "mode": "100644", + "type": "blob", + "sha": "7f76564173415dd6244d217dbf72a242f64f8bb6", + "size": 198081, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7f76564173415dd6244d217dbf72a242f64f8bb6" + }, + { + "path": "resources/design/NS-ONE-ADDITIONS.md", + "mode": "100644", + "type": "blob", + "sha": "f62f3671a3285f70fdd19df0051d78abbc79d892", + "size": 23056, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f62f3671a3285f70fdd19df0051d78abbc79d892" + }, + { + "path": "resources/design/PROPOSED-COMPONENTS.md", + "mode": "100644", + "type": "blob", + "sha": "8a8e5fdaa85647a369c0ec126a5c69e7784d9394", + "size": 4651, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8a8e5fdaa85647a369c0ec126a5c69e7784d9394" + }, + { + "path": "resources/design/evidence", + "mode": "040000", + "type": "tree", + "sha": "6a8a404b7439a65f050ee8d31e7df6834dc57c62", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6a8a404b7439a65f050ee8d31e7df6834dc57c62" + }, + { + "path": "resources/design/evidence/69-7", + "mode": "040000", + "type": "tree", + "sha": "f86b9a7c014e3a189d62e37a0ea1ba3ae40d124b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f86b9a7c014e3a189d62e37a0ea1ba3ae40d124b" + }, + { + "path": "resources/design/evidence/69-7/7a-after-skill-enabled.png", + "mode": "100644", + "type": "blob", + "sha": "89e36f20e8a4472b1e097738d421ca860a5586c2", + "size": 276844, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/89e36f20e8a4472b1e097738d421ca860a5586c2" + }, + { + "path": "resources/design/evidence/69-7/7a-before-no-skill.png", + "mode": "100644", + "type": "blob", + "sha": "a2d64aaced2446dade5d9ce9f0986d510be8310d", + "size": 285313, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a2d64aaced2446dade5d9ce9f0986d510be8310d" + }, + { + "path": "resources/design/evidence/69-7/7b-after-skill-enabled.png", + "mode": "100644", + "type": "blob", + "sha": "1de694557b48d7bf9905bf5030d5dd5be8a62151", + "size": 270242, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1de694557b48d7bf9905bf5030d5dd5be8a62151" + }, + { + "path": "resources/design/evidence/69-7/7b-before-no-skill.png", + "mode": "100644", + "type": "blob", + "sha": "955898f746574d2b54e9f0015bde43e86f443d0c", + "size": 293571, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/955898f746574d2b54e9f0015bde43e86f443d0c" + }, + { + "path": "resources/design/evidence/69-7/skills-surface-builtins.png", + "mode": "100644", + "type": "blob", + "sha": "792e68415cc8b3b24f3936e23ad6508d4230682c", + "size": 77268, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/792e68415cc8b3b24f3936e23ad6508d4230682c" + }, + { + "path": "resources/design/prototype-shots", + "mode": "040000", + "type": "tree", + "sha": "a693b54eed064f0ea0d8b44ac5cf37597530cd58", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a693b54eed064f0ea0d8b44ac5cf37597530cd58" + }, + { + "path": "resources/design/prototype-shots/_myapp-3.png", + "mode": "100644", + "type": "blob", + "sha": "48192f0eed41690e48f1493668a243f0e241d9be", + "size": 60051, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/48192f0eed41690e48f1493668a243f0e241d9be" + }, + { + "path": "resources/design/prototype-shots/_myapp-4.png", + "mode": "100644", + "type": "blob", + "sha": "87b4017cf4cb7f4fe31fbc982282165958e285a2", + "size": 60769, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/87b4017cf4cb7f4fe31fbc982282165958e285a2" + }, + { + "path": "resources/design/prototype-shots/_myapp-5.png", + "mode": "100644", + "type": "blob", + "sha": "de3494a2a8c2eb2b77c6afd426e8f3eeaf258e75", + "size": 60865, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de3494a2a8c2eb2b77c6afd426e8f3eeaf258e75" + }, + { + "path": "resources/design/prototype-shots/_myapp-cmdk.png", + "mode": "100644", + "type": "blob", + "sha": "5da0722a7c4ed9df906e05a84ece986da6aa5ba5", + "size": 103769, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5da0722a7c4ed9df906e05a84ece986da6aa5ba5" + }, + { + "path": "resources/design/prototype-shots/_myapp-cmdk2.png", + "mode": "100644", + "type": "blob", + "sha": "0b3ad418c80c8d51aebde791277a1201c149ebb3", + "size": 131305, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0b3ad418c80c8d51aebde791277a1201c149ebb3" + }, + { + "path": "resources/design/prototype-shots/_myapp-session-light.png", + "mode": "100644", + "type": "blob", + "sha": "fd86206798107f927a1c4786981893c2f5eb0bcd", + "size": 60144, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fd86206798107f927a1c4786981893c2f5eb0bcd" + }, + { + "path": "resources/design/prototype-shots/_myapp-session-light2.png", + "mode": "100644", + "type": "blob", + "sha": "6abf2be341504dcebb51ad83c372c01f1f99250b", + "size": 60120, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6abf2be341504dcebb51ad83c372c01f1f99250b" + }, + { + "path": "resources/design/prototype-shots/_navfull.png", + "mode": "100644", + "type": "blob", + "sha": "b58dabd3470a765b5e81870c3e639c406dbdfc59", + "size": 65062, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b58dabd3470a765b5e81870c3e639c406dbdfc59" + }, + { + "path": "resources/design/prototype-shots/_userchip.png", + "mode": "100644", + "type": "blob", + "sha": "e74ff4765330c1ae91eea74ac7e402277699491c", + "size": 3417, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e74ff4765330c1ae91eea74ac7e402277699491c" + }, + { + "path": "resources/design/prototype-shots/_userchip2.png", + "mode": "100644", + "type": "blob", + "sha": "d7daf6ed96fec6d965c11de6f1f81b82500cd9a3", + "size": 3417, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d7daf6ed96fec6d965c11de6f1f81b82500cd9a3" + }, + { + "path": "resources/design/prototype-shots/_userchip3.png", + "mode": "100644", + "type": "blob", + "sha": "8e4d613cfb5d9a0f7578b40b3210a5b4a19fc931", + "size": 3366, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8e4d613cfb5d9a0f7578b40b3210a5b4a19fc931" + }, + { + "path": "resources/design/prototype-shots/activity-dark.png", + "mode": "100644", + "type": "blob", + "sha": "1e260f7838eef65927edff06eba8b5984233ec0e", + "size": 160323, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1e260f7838eef65927edff06eba8b5984233ec0e" + }, + { + "path": "resources/design/prototype-shots/activity-light.png", + "mode": "100644", + "type": "blob", + "sha": "506f7c6008f538a6bc5e5472af2f7bd17e768bc8", + "size": 158286, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/506f7c6008f538a6bc5e5472af2f7bd17e768bc8" + }, + { + "path": "resources/design/prototype-shots/channel-dark.png", + "mode": "100644", + "type": "blob", + "sha": "8a5fc26a594b10d2d0f019494f481016c629c289", + "size": 187073, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8a5fc26a594b10d2d0f019494f481016c629c289" + }, + { + "path": "resources/design/prototype-shots/channel-light.png", + "mode": "100644", + "type": "blob", + "sha": "7c4d0f9fff6b3b322b77c54d99c9b5fe27f40ef8", + "size": 184150, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7c4d0f9fff6b3b322b77c54d99c9b5fe27f40ef8" + }, + { + "path": "resources/design/prototype-shots/knowledge-dark.png", + "mode": "100644", + "type": "blob", + "sha": "e01edba184112bc0e69ad0706e8b3b3fe7921815", + "size": 144956, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e01edba184112bc0e69ad0706e8b3b3fe7921815" + }, + { + "path": "resources/design/prototype-shots/knowledge-light.png", + "mode": "100644", + "type": "blob", + "sha": "281c4589cda699bb037b5c3dc936197993a6b84c", + "size": 142345, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/281c4589cda699bb037b5c3dc936197993a6b84c" + }, + { + "path": "resources/design/prototype-shots/proto-cmdk.png", + "mode": "100644", + "type": "blob", + "sha": "80a5811b9661d50b67a11475abb354bcb48b0999", + "size": 267260, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/80a5811b9661d50b67a11475abb354bcb48b0999" + }, + { + "path": "resources/design/prototype-shots/session-dark.png", + "mode": "100644", + "type": "blob", + "sha": "62828cf9ed02d7b021da085b6e35a14eaa79eba9", + "size": 170490, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/62828cf9ed02d7b021da085b6e35a14eaa79eba9" + }, + { + "path": "resources/design/prototype-shots/session-light.png", + "mode": "100644", + "type": "blob", + "sha": "ef1859047abe82dff0e57f0a9f24874b04c10025", + "size": 173675, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef1859047abe82dff0e57f0a9f24874b04c10025" + }, + { + "path": "resources/design/prototype-shots/usage-dark.png", + "mode": "100644", + "type": "blob", + "sha": "98a3fdd0c29266b5c26a353e28c2d33037908b3d", + "size": 149714, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98a3fdd0c29266b5c26a353e28c2d33037908b3d" + }, + { + "path": "resources/design/prototype-shots/usage-light.png", + "mode": "100644", + "type": "blob", + "sha": "9e4b3a616f9a9fad01a1877e64c24c79cabce755", + "size": 146398, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9e4b3a616f9a9fad01a1877e64c24c79cabce755" + }, + { + "path": "resources/design/videoframe_8640.png", + "mode": "100644", + "type": "blob", + "sha": "135f0b95aa6414117b33516ff9c5c7ada02e8b33", + "size": 604185, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/135f0b95aa6414117b33516ff9c5c7ada02e8b33" + }, + { + "path": "resources/desktop-evidence", + "mode": "040000", + "type": "tree", + "sha": "22d02c97b8b529cd87d27ab80949e67cddae0d36", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/22d02c97b8b529cd87d27ab80949e67cddae0d36" + }, + { + "path": "resources/desktop-evidence/phase-a-render.png", + "mode": "100644", + "type": "blob", + "sha": "cde1d01f57d909bd9d0ae2bd286710b53ae6708e", + "size": 32498, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cde1d01f57d909bd9d0ae2bd286710b53ae6708e" + }, + { + "path": "resources/desktop-evidence/phase-b-render.png", + "mode": "100644", + "type": "blob", + "sha": "05e5459571cad996b81d30c07dcf2173b6b9624c", + "size": 32960, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/05e5459571cad996b81d30c07dcf2173b6b9624c" + }, + { + "path": "resources/mcp-ui", + "mode": "040000", + "type": "tree", + "sha": "44b6bb498a70aa46282d6ffc52b7f72368963ec9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/44b6bb498a70aa46282d6ffc52b7f72368963ec9" + }, + { + "path": "resources/mcp-ui/RENDER-POLICY.md", + "mode": "100644", + "type": "blob", + "sha": "b5ba28ae327ca0ebf8476875e161fc94b7ddd191", + "size": 12787, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b5ba28ae327ca0ebf8476875e161fc94b7ddd191" + }, + { + "path": "resources/mcp-ui/THEMING.md", + "mode": "100644", + "type": "blob", + "sha": "e936934f5c4ec841d28e0b442834d15ff303a849", + "size": 16537, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e936934f5c4ec841d28e0b442834d15ff303a849" + }, + { + "path": "resources/mcp-ui/mcp-ui.md", + "mode": "100644", + "type": "blob", + "sha": "cf1fefe25f29b2f38c4a9b89e6924e0c90d0a7d2", + "size": 6330, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cf1fefe25f29b2f38c4a9b89e6924e0c90d0a7d2" + }, + { + "path": "resources/netscript", + "mode": "040000", + "type": "tree", + "sha": "ef1b8e5b4695e9cbf3d2168de390d45c875a3366", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ef1b8e5b4695e9cbf3d2168de390d45c875a3366" + }, + { + "path": "resources/netscript/README.md", + "mode": "100644", + "type": "blob", + "sha": "882e1c62c743e0358b642637620dbebed95334c9", + "size": 851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/882e1c62c743e0358b642637620dbebed95334c9" + }, + { + "path": "resources/netscript/architecture", + "mode": "040000", + "type": "tree", + "sha": "ca207fdff4598d51d79368e822f687568664ec75", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ca207fdff4598d51d79368e822f687568664ec75" + }, + { + "path": "resources/netscript/architecture/DOCS-STRUCTURE.md", + "mode": "100644", + "type": "blob", + "sha": "4c647a439e9e3777e1c955f4ee59f5b3dafb5a1b", + "size": 10106, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c647a439e9e3777e1c955f4ee59f5b3dafb5a1b" + }, + { + "path": "resources/netscript/architecture/PUBLIC-SURFACE-PATTERNS.md", + "mode": "100644", + "type": "blob", + "sha": "4052f173ba101e2e854508a64a844f8d12499178", + "size": 17625, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4052f173ba101e2e854508a64a844f8d12499178" + }, + { + "path": "resources/netscript/architecture/STANDARDS.md", + "mode": "100644", + "type": "blob", + "sha": "c7651a9e1f27292d5abb54019b53357472d3a4e0", + "size": 18569, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c7651a9e1f27292d5abb54019b53357472d3a4e0" + }, + { + "path": "resources/netscript/architecture/doctrine", + "mode": "040000", + "type": "tree", + "sha": "14eda121471801053346728c819748ac2a43e408", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/14eda121471801053346728c819748ac2a43e408" + }, + { + "path": "resources/netscript/architecture/doctrine/01-thesis-and-axioms.md", + "mode": "100644", + "type": "blob", + "sha": "73d8520af7afeaf5e36f2e0c05edc9ac75684854", + "size": 6589, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/73d8520af7afeaf5e36f2e0c05edc9ac75684854" + }, + { + "path": "resources/netscript/architecture/doctrine/02-public-surface.md", + "mode": "100644", + "type": "blob", + "sha": "fbac0b904ef096fe4d4e62e07403163968102b30", + "size": 8703, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fbac0b904ef096fe4d4e62e07403163968102b30" + }, + { + "path": "resources/netscript/architecture/doctrine/03-base-and-derived-classes.md", + "mode": "100644", + "type": "blob", + "sha": "8480a9d703c500a7b17c8fdd2721c802db671c42", + "size": 15281, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8480a9d703c500a7b17c8fdd2721c802db671c42" + }, + { + "path": "resources/netscript/architecture/doctrine/04-modules-and-helpers.md", + "mode": "100644", + "type": "blob", + "sha": "9f8c64ad4cc304ab51ca813f28916bf601ca1d22", + "size": 11116, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9f8c64ad4cc304ab51ca813f28916bf601ca1d22" + }, + { + "path": "resources/netscript/architecture/doctrine/05-folder-structure.md", + "mode": "100644", + "type": "blob", + "sha": "8aa0ddb5955b619050c0e300210001698a225f47", + "size": 14759, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8aa0ddb5955b619050c0e300210001698a225f47" + }, + { + "path": "resources/netscript/architecture/doctrine/06-archetypes.md", + "mode": "100644", + "type": "blob", + "sha": "54f02162f1399a997192f8a8b52253b0b0d85309", + "size": 9875, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/54f02162f1399a997192f8a8b52253b0b0d85309" + }, + { + "path": "resources/netscript/architecture/doctrine/07-composition-and-extension.md", + "mode": "100644", + "type": "blob", + "sha": "47ecef35e8275b0ddd82a44785af4c3cbee8a1f2", + "size": 14607, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/47ecef35e8275b0ddd82a44785af4c3cbee8a1f2" + }, + { + "path": "resources/netscript/architecture/doctrine/08-runtime-state-failure.md", + "mode": "100644", + "type": "blob", + "sha": "3e2e7792f4a44557dc48718a0f391d2a7ec894fb", + "size": 10529, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3e2e7792f4a44557dc48718a0f391d2a7ec894fb" + }, + { + "path": "resources/netscript/architecture/doctrine/09-anti-patterns-and-fitness-functions.md", + "mode": "100644", + "type": "blob", + "sha": "3c8d0fbeca94682a7480edb7da5d833bdc4ee637", + "size": 17405, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3c8d0fbeca94682a7480edb7da5d833bdc4ee637" + }, + { + "path": "resources/netscript/architecture/doctrine/10-codebase-verdict-and-handoff.md", + "mode": "100644", + "type": "blob", + "sha": "e4908fb0f19b4abcae95dba84145e316008d64ff", + "size": 10729, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4908fb0f19b4abcae95dba84145e316008d64ff" + }, + { + "path": "resources/netscript/site", + "mode": "040000", + "type": "tree", + "sha": "68dab4bdbb0b740233ed3db755b0c4ecb204bd58", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/68dab4bdbb0b740233ed3db755b0c4ecb204bd58" + }, + { + "path": "resources/netscript/site/_diagrams", + "mode": "040000", + "type": "tree", + "sha": "58cd53671882926d7baefe74ce985690a950e392", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/58cd53671882926d7baefe74ce985690a950e392" + }, + { + "path": "resources/netscript/site/_diagrams/README.md", + "mode": "100644", + "type": "blob", + "sha": "2d5fb6a6c08332cd95b93ef47929290d06cc56cf", + "size": 1602, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2d5fb6a6c08332cd95b93ef47929290d06cc56cf" + }, + { + "path": "resources/netscript/site/_includes", + "mode": "040000", + "type": "tree", + "sha": "7a1d8693e5eb2aff67d60a6584132b16acfaba3c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7a1d8693e5eb2aff67d60a6584132b16acfaba3c" + }, + { + "path": "resources/netscript/site/_includes/readme-template.md", + "mode": "100644", + "type": "blob", + "sha": "bfb13816dc23fb171cd6812380fc3a1c37180f3b", + "size": 1298, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bfb13816dc23fb171cd6812380fc3a1c37180f3b" + }, + { + "path": "resources/netscript/site/ai", + "mode": "040000", + "type": "tree", + "sha": "fc35c331a1c22039642e109dacd2bfb9da17c918", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/fc35c331a1c22039642e109dacd2bfb9da17c918" + }, + { + "path": "resources/netscript/site/ai/chat-ui.md", + "mode": "100644", + "type": "blob", + "sha": "08760fdac6283ae5ce606fc9c0569d850e687440", + "size": 6981, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/08760fdac6283ae5ce606fc9c0569d850e687440" + }, + { + "path": "resources/netscript/site/ai/durable-chat.md", + "mode": "100644", + "type": "blob", + "sha": "f9b04a7f7c3c76dd2e1f0d8f1808d799f382a060", + "size": 12474, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f9b04a7f7c3c76dd2e1f0d8f1808d799f382a060" + }, + { + "path": "resources/netscript/site/ai/engine.md", + "mode": "100644", + "type": "blob", + "sha": "9703376db349b507963b7b9d2aed0a6a259efcba", + "size": 14528, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9703376db349b507963b7b9d2aed0a6a259efcba" + }, + { + "path": "resources/netscript/site/ai/index.md", + "mode": "100644", + "type": "blob", + "sha": "85a4eb84e7d56d82383a0219b7e23220ea46885c", + "size": 9892, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/85a4eb84e7d56d82383a0219b7e23220ea46885c" + }, + { + "path": "resources/netscript/site/ai/mcp.md", + "mode": "100644", + "type": "blob", + "sha": "bf59cb7745fef18cde786eefded86b8019ef2fe6", + "size": 8888, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf59cb7745fef18cde786eefded86b8019ef2fe6" + }, + { + "path": "resources/netscript/site/background-processing", + "mode": "040000", + "type": "tree", + "sha": "ab63ada8524b3c296c7e01c8dc6e99eabb549a6e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ab63ada8524b3c296c7e01c8dc6e99eabb549a6e" + }, + { + "path": "resources/netscript/site/background-processing/index.md", + "mode": "100644", + "type": "blob", + "sha": "9cfeadc2d3d205ddfaa6ba0671e7052d6d470d8f", + "size": 2528, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9cfeadc2d3d205ddfaa6ba0671e7052d6d470d8f" + }, + { + "path": "resources/netscript/site/background-processing/polyglot-tasks.md", + "mode": "100644", + "type": "blob", + "sha": "6863cfa0196173fc6fc4eb8ab4ab916bc37b820c", + "size": 16084, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6863cfa0196173fc6fc4eb8ab4ab916bc37b820c" + }, + { + "path": "resources/netscript/site/background-processing/workers.md", + "mode": "100644", + "type": "blob", + "sha": "69b76b1ccc08c53dd119747ea8a244f6f00a0c5a", + "size": 31931, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/69b76b1ccc08c53dd119747ea8a244f6f00a0c5a" + }, + { + "path": "resources/netscript/site/capabilities", + "mode": "040000", + "type": "tree", + "sha": "09205ac2f5d05cdf050521f85de6c63844ee22ed", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/09205ac2f5d05cdf050521f85de6c63844ee22ed" + }, + { + "path": "resources/netscript/site/capabilities/ai.md", + "mode": "100644", + "type": "blob", + "sha": "fcdd9c97f625bab33dcfeff2ecc607095a9919ba", + "size": 54, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fcdd9c97f625bab33dcfeff2ecc607095a9919ba" + }, + { + "path": "resources/netscript/site/capabilities/auth.md", + "mode": "100644", + "type": "blob", + "sha": "62bccee8e63d00c5a38e120b93c8d9962ce3ecae", + "size": 72, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/62bccee8e63d00c5a38e120b93c8d9962ce3ecae" + }, + { + "path": "resources/netscript/site/capabilities/background-jobs.md", + "mode": "100644", + "type": "blob", + "sha": "29e21c285640808b6ed2eed87718ce3f6f8e0b33", + "size": 81, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/29e21c285640808b6ed2eed87718ce3f6f8e0b33" + }, + { + "path": "resources/netscript/site/capabilities/database.md", + "mode": "100644", + "type": "blob", + "sha": "44ad28e099189c703f6304b5c9f45fef7da5b7a6", + "size": 77, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/44ad28e099189c703f6304b5c9f45fef7da5b7a6" + }, + { + "path": "resources/netscript/site/capabilities/durable-sagas.md", + "mode": "100644", + "type": "blob", + "sha": "06a57668f9d32c92aa5d677a71e0188b9b11d37b", + "size": 75, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/06a57668f9d32c92aa5d677a71e0188b9b11d37b" + }, + { + "path": "resources/netscript/site/capabilities/fresh-framework.md", + "mode": "100644", + "type": "blob", + "sha": "ea3e24d74698f2bde01fc2f4a676f8ecee67a8f0", + "size": 61, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ea3e24d74698f2bde01fc2f4a676f8ecee67a8f0" + }, + { + "path": "resources/netscript/site/capabilities/fresh-ui.md", + "mode": "100644", + "type": "blob", + "sha": "589414d8b3b3ed6525761aa78465a99e34e1a54a", + "size": 70, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/589414d8b3b3ed6525761aa78465a99e34e1a54a" + }, + { + "path": "resources/netscript/site/capabilities/index.md", + "mode": "100644", + "type": "blob", + "sha": "cfee589f750bea7530ec43752f21fc43131c4149", + "size": 51, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cfee589f750bea7530ec43752f21fc43131c4149" + }, + { + "path": "resources/netscript/site/capabilities/kv-queues-cron.md", + "mode": "100644", + "type": "blob", + "sha": "ef514c449d8d2036bae933b37f772c3e5672194a", + "size": 83, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef514c449d8d2036bae933b37f772c3e5672194a" + }, + { + "path": "resources/netscript/site/capabilities/polyglot-tasks.md", + "mode": "100644", + "type": "blob", + "sha": "5d4d2a681ed32ed0e8699785ba9bb6afabf56e94", + "size": 88, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5d4d2a681ed32ed0e8699785ba9bb6afabf56e94" + }, + { + "path": "resources/netscript/site/capabilities/runtime-config.md", + "mode": "100644", + "type": "blob", + "sha": "59bd64598b69b1cf226c05e71dceaa7d336ef379", + "size": 88, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59bd64598b69b1cf226c05e71dceaa7d336ef379" + }, + { + "path": "resources/netscript/site/capabilities/sdk.md", + "mode": "100644", + "type": "blob", + "sha": "7f5cf56b5e20632405cdc5a212bdf26ad88e854e", + "size": 68, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7f5cf56b5e20632405cdc5a212bdf26ad88e854e" + }, + { + "path": "resources/netscript/site/capabilities/services.md", + "mode": "100644", + "type": "blob", + "sha": "d6e5bf83265a192b01d429bfd5a5910e5e646b68", + "size": 73, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d6e5bf83265a192b01d429bfd5a5910e5e646b68" + }, + { + "path": "resources/netscript/site/capabilities/streams.md", + "mode": "100644", + "type": "blob", + "sha": "3c2551cbbb3fd88c3c7a6aa3d5ea1124a1de036d", + "size": 77, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3c2551cbbb3fd88c3c7a6aa3d5ea1124a1de036d" + }, + { + "path": "resources/netscript/site/capabilities/telemetry.md", + "mode": "100644", + "type": "blob", + "sha": "390ee94608b6411935d6a96cf028a3a5d75b3804", + "size": 75, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/390ee94608b6411935d6a96cf028a3a5d75b3804" + }, + { + "path": "resources/netscript/site/capabilities/triggers.md", + "mode": "100644", + "type": "blob", + "sha": "16e87b58ad58b3f7b6033799f7f2a9b51c2a6532", + "size": 78, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/16e87b58ad58b3f7b6033799f7f2a9b51c2a6532" + }, + { + "path": "resources/netscript/site/cli-reference.md", + "mode": "100644", + "type": "blob", + "sha": "b74975cfb96d7d5bfc1b58a0c6cb0bc272f29691", + "size": 28454, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b74975cfb96d7d5bfc1b58a0c6cb0bc272f29691" + }, + { + "path": "resources/netscript/site/data-persistence", + "mode": "040000", + "type": "tree", + "sha": "dc7525d25734e70be7b86e250019cd50c15224bd", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/dc7525d25734e70be7b86e250019cd50c15224bd" + }, + { + "path": "resources/netscript/site/data-persistence/database.md", + "mode": "100644", + "type": "blob", + "sha": "f30cdf53fd1e44fdb04d5221436d01badb01f1a6", + "size": 29316, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f30cdf53fd1e44fdb04d5221436d01badb01f1a6" + }, + { + "path": "resources/netscript/site/data-persistence/index.md", + "mode": "100644", + "type": "blob", + "sha": "cc7f99066d01a0927a7f02eef61d94d5dc528026", + "size": 2391, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cc7f99066d01a0927a7f02eef61d94d5dc528026" + }, + { + "path": "resources/netscript/site/data-persistence/kv-queues-cron.md", + "mode": "100644", + "type": "blob", + "sha": "cfc41f327376f40b493c9a4015b4e4c3a6101c2e", + "size": 27316, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cfc41f327376f40b493c9a4015b4e4c3a6101c2e" + }, + { + "path": "resources/netscript/site/durable-workflows", + "mode": "040000", + "type": "tree", + "sha": "99ab16b55a22d98410de570f1a26a93538b41a7e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/99ab16b55a22d98410de570f1a26a93538b41a7e" + }, + { + "path": "resources/netscript/site/durable-workflows/index.md", + "mode": "100644", + "type": "blob", + "sha": "c6b7dad0ecaf5c04ca72f9d5b2ecf7ea6e1d842b", + "size": 3484, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c6b7dad0ecaf5c04ca72f9d5b2ecf7ea6e1d842b" + }, + { + "path": "resources/netscript/site/durable-workflows/sagas.md", + "mode": "100644", + "type": "blob", + "sha": "f1f4ab7d7ae713b1df18e71de29c7833e44b7026", + "size": 39529, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f1f4ab7d7ae713b1df18e71de29c7833e44b7026" + }, + { + "path": "resources/netscript/site/durable-workflows/streams.md", + "mode": "100644", + "type": "blob", + "sha": "354de3fc782337f13263dca8ceffeede76963525", + "size": 28078, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/354de3fc782337f13263dca8ceffeede76963525" + }, + { + "path": "resources/netscript/site/durable-workflows/triggers.md", + "mode": "100644", + "type": "blob", + "sha": "882fe9287116cbf059456622fc8349f62e221965", + "size": 31247, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/882fe9287116cbf059456622fc8349f62e221965" + }, + { + "path": "resources/netscript/site/explanation", + "mode": "040000", + "type": "tree", + "sha": "9d072c98e854793e5f4172f69573943cb06ac59e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9d072c98e854793e5f4172f69573943cb06ac59e" + }, + { + "path": "resources/netscript/site/explanation/architecture.md", + "mode": "100644", + "type": "blob", + "sha": "8f89361e8609a8f18a54e7dd904d6442e538c5d5", + "size": 23449, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f89361e8609a8f18a54e7dd904d6442e538c5d5" + }, + { + "path": "resources/netscript/site/explanation/aspire.md", + "mode": "100644", + "type": "blob", + "sha": "35920566bb26b57628ca06513b8f96839b035fdd", + "size": 36290, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/35920566bb26b57628ca06513b8f96839b035fdd" + }, + { + "path": "resources/netscript/site/explanation/auth-model.md", + "mode": "100644", + "type": "blob", + "sha": "e506c24e315b3eda95298cdd4e4c534877779bca", + "size": 18934, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e506c24e315b3eda95298cdd4e4c534877779bca" + }, + { + "path": "resources/netscript/site/explanation/contracts.md", + "mode": "100644", + "type": "blob", + "sha": "b2d0a03b172ece8e3ed2ba57c3ea14a4fb53d5b1", + "size": 19398, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b2d0a03b172ece8e3ed2ba57c3ea14a4fb53d5b1" + }, + { + "path": "resources/netscript/site/explanation/durability-model.md", + "mode": "100644", + "type": "blob", + "sha": "c21fd1589976a889d8813749e4d63c7cb15286d9", + "size": 26489, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c21fd1589976a889d8813749e4d63c7cb15286d9" + }, + { + "path": "resources/netscript/site/explanation/index.md", + "mode": "100644", + "type": "blob", + "sha": "4d6d17cf50057dd003129264bf33abda03fbb507", + "size": 7073, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4d6d17cf50057dd003129264bf33abda03fbb507" + }, + { + "path": "resources/netscript/site/explanation/observability.md", + "mode": "100644", + "type": "blob", + "sha": "a6a05a353fe9ff6733ef97878f930d9f32e99f8f", + "size": 19551, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a6a05a353fe9ff6733ef97878f930d9f32e99f8f" + }, + { + "path": "resources/netscript/site/explanation/plugin-system.md", + "mode": "100644", + "type": "blob", + "sha": "2a279d01756966e3df1fdc3ff68e153d2c9a2004", + "size": 19503, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a279d01756966e3df1fdc3ff68e153d2c9a2004" + }, + { + "path": "resources/netscript/site/glossary.md", + "mode": "100644", + "type": "blob", + "sha": "527abac06bde350d690a56e63b3ac13f8a41246c", + "size": 26117, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/527abac06bde350d690a56e63b3ac13f8a41246c" + }, + { + "path": "resources/netscript/site/how-to", + "mode": "040000", + "type": "tree", + "sha": "1cab1bb5e06f661f6d5c337bce338e8c86d76da8", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/1cab1bb5e06f661f6d5c337bce338e8c86d76da8" + }, + { + "path": "resources/netscript/site/how-to/add-a-plugin.md", + "mode": "100644", + "type": "blob", + "sha": "579236345919f01e9021c2ea57e43d0c51332e8b", + "size": 13844, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/579236345919f01e9021c2ea57e43d0c51332e8b" + }, + { + "path": "resources/netscript/site/how-to/add-a-service.md", + "mode": "100644", + "type": "blob", + "sha": "fab56484e97f22cf96c438b09e86db5aae3aa0e4", + "size": 15428, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fab56484e97f22cf96c438b09e86db5aae3aa0e4" + }, + { + "path": "resources/netscript/site/how-to/add-a-task-runtime-adapter.md", + "mode": "100644", + "type": "blob", + "sha": "16e969d0103fce087d6f6c7f0bb3cbb7e691f2df", + "size": 6125, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/16e969d0103fce087d6f6c7f0bb3cbb7e691f2df" + }, + { + "path": "resources/netscript/site/how-to/add-authentication.md", + "mode": "100644", + "type": "blob", + "sha": "c0cbe89c3a342e2df65da01d6be60d3fc1ab345a", + "size": 21504, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c0cbe89c3a342e2df65da01d6be60d3fc1ab345a" + }, + { + "path": "resources/netscript/site/how-to/add-opentelemetry.md", + "mode": "100644", + "type": "blob", + "sha": "57c3f492779b51aeafa606418420d90ce5fa856c", + "size": 19926, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/57c3f492779b51aeafa606418420d90ce5fa856c" + }, + { + "path": "resources/netscript/site/how-to/author-a-plugin.md", + "mode": "100644", + "type": "blob", + "sha": "1c74280403948d97d263db51c784e533d8402aa1", + "size": 27463, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1c74280403948d97d263db51c784e533d8402aa1" + }, + { + "path": "resources/netscript/site/how-to/build-a-durable-chat.md", + "mode": "100644", + "type": "blob", + "sha": "0105b010ecebc04f186f225fab8de7ba701303bd", + "size": 12218, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0105b010ecebc04f186f225fab8de7ba701303bd" + }, + { + "path": "resources/netscript/site/how-to/build-a-server-validated-form.md", + "mode": "100644", + "type": "blob", + "sha": "1ca63294d0f2363ed335f0a12b5c8be4aec08756", + "size": 3579, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1ca63294d0f2363ed335f0a12b5c8be4aec08756" + }, + { + "path": "resources/netscript/site/how-to/build-a-validated-ingestion-queue.md", + "mode": "100644", + "type": "blob", + "sha": "ca92960deb56d838d8c89f5a7bbfcc204dd28189", + "size": 3177, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ca92960deb56d838d8c89f5a7bbfcc204dd28189" + }, + { + "path": "resources/netscript/site/how-to/choose-a-queue-provider.md", + "mode": "100644", + "type": "blob", + "sha": "abafebc0cd773f063f5d265fb18d98402b351b67", + "size": 13427, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/abafebc0cd773f063f5d265fb18d98402b351b67" + }, + { + "path": "resources/netscript/site/how-to/customize-fresh-ui.md", + "mode": "100644", + "type": "blob", + "sha": "08a325adccca868bc2fabbaa5edc46882412bd91", + "size": 24367, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/08a325adccca868bc2fabbaa5edc46882412bd91" + }, + { + "path": "resources/netscript/site/how-to/database-migration.md", + "mode": "100644", + "type": "blob", + "sha": "bcc1b7633c44c0225ee2f20fbcad53f295850dac", + "size": 16356, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bcc1b7633c44c0225ee2f20fbcad53f295850dac" + }, + { + "path": "resources/netscript/site/how-to/deno-lsp-code-intelligence.md", + "mode": "100644", + "type": "blob", + "sha": "9c2a4d1894a5ac214cd238faf59fe3b7c2ed0903", + "size": 6434, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c2a4d1894a5ac214cd238faf59fe3b7c2ed0903" + }, + { + "path": "resources/netscript/site/how-to/deploy-deno-deploy.md", + "mode": "100644", + "type": "blob", + "sha": "2cd7dc8483a7b210ecec479513164be210fdc136", + "size": 13954, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2cd7dc8483a7b210ecec479513164be210fdc136" + }, + { + "path": "resources/netscript/site/how-to/deploy-local-aspire.md", + "mode": "100644", + "type": "blob", + "sha": "e0bda95051674e99a17c3f927094e3b96e59d484", + "size": 12799, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e0bda95051674e99a17c3f927094e3b96e59d484" + }, + { + "path": "resources/netscript/site/how-to/deploy.md", + "mode": "100644", + "type": "blob", + "sha": "0ae0cc4c4bfc7e0de4e17d55c757068b4173c1e9", + "size": 28713, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0ae0cc4c4bfc7e0de4e17d55c757068b4173c1e9" + }, + { + "path": "resources/netscript/site/how-to/discover-services.md", + "mode": "100644", + "type": "blob", + "sha": "7eebe458177cc7efa0c06cd08797be069b02ad2d", + "size": 15473, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7eebe458177cc7efa0c06cd08797be069b02ad2d" + }, + { + "path": "resources/netscript/site/how-to/expose-openapi-scalar.md", + "mode": "100644", + "type": "blob", + "sha": "a4c2b2db0786d5a1693573fc3fb9a10b8fc26981", + "size": 10242, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a4c2b2db0786d5a1693573fc3fb9a10b8fc26981" + }, + { + "path": "resources/netscript/site/how-to/graceful-shutdown.md", + "mode": "100644", + "type": "blob", + "sha": "7fe144851928eba4990b2fe9cf8a3f8951182bd7", + "size": 13284, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7fe144851928eba4990b2fe9cf8a3f8951182bd7" + }, + { + "path": "resources/netscript/site/how-to/index.md", + "mode": "100644", + "type": "blob", + "sha": "38911a8a51170ec8ac1a126409e90fdf8e07d4b1", + "size": 7598, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/38911a8a51170ec8ac1a126409e90fdf8e07d4b1" + }, + { + "path": "resources/netscript/site/how-to/publish-a-durable-stream.md", + "mode": "100644", + "type": "blob", + "sha": "26b9fe35c8232cfac02141cd024d7b8147bdea7c", + "size": 3413, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/26b9fe35c8232cfac02141cd024d7b8147bdea7c" + }, + { + "path": "resources/netscript/site/how-to/queue-kv-cron.md", + "mode": "100644", + "type": "blob", + "sha": "68d2fa57e7d15914a6befbda196fc8683d5e616c", + "size": 15570, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/68d2fa57e7d15914a6befbda196fc8683d5e616c" + }, + { + "path": "resources/netscript/site/how-to/restrict-worker-task-permissions.md", + "mode": "100644", + "type": "blob", + "sha": "09e7ffda20d339a31ebafb5fc63c6477d6d7d9c4", + "size": 3412, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/09e7ffda20d339a31ebafb5fc63c6477d6d7d9c4" + }, + { + "path": "resources/netscript/site/how-to/roll-out-runtime-overrides.md", + "mode": "100644", + "type": "blob", + "sha": "f1c6fe960d6024bbcb30b6486d45fd1d4a880b9f", + "size": 3837, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f1c6fe960d6024bbcb30b6486d45fd1d4a880b9f" + }, + { + "path": "resources/netscript/site/how-to/run-a-polyglot-task.md", + "mode": "100644", + "type": "blob", + "sha": "49059bca3420fce2aac1ca1369e26aa025ce2d10", + "size": 10091, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/49059bca3420fce2aac1ca1369e26aa025ce2d10" + }, + { + "path": "resources/netscript/site/how-to/tune-worker-runtime.md", + "mode": "100644", + "type": "blob", + "sha": "800c5ad95db311f41b8f19c60464ee447a82d52b", + "size": 15481, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/800c5ad95db311f41b8f19c60464ee447a82d52b" + }, + { + "path": "resources/netscript/site/how-to/use-a-second-database.md", + "mode": "100644", + "type": "blob", + "sha": "de510b489cd63e62a6ab5e93e29ca3205759fd27", + "size": 18919, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de510b489cd63e62a6ab5e93e29ca3205759fd27" + }, + { + "path": "resources/netscript/site/identity-access", + "mode": "040000", + "type": "tree", + "sha": "230f786fab3ae6b2554f75eb2eebb7dbb585ca0e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/230f786fab3ae6b2554f75eb2eebb7dbb585ca0e" + }, + { + "path": "resources/netscript/site/identity-access/auth.md", + "mode": "100644", + "type": "blob", + "sha": "558dd44ee209c6559f466842db876a827ced8a19", + "size": 27874, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/558dd44ee209c6559f466842db876a827ced8a19" + }, + { + "path": "resources/netscript/site/identity-access/better-auth-plugins.md", + "mode": "100644", + "type": "blob", + "sha": "ddcd86495321f6bdb8d79672b8a7b897fa828908", + "size": 7043, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ddcd86495321f6bdb8d79672b8a7b897fa828908" + }, + { + "path": "resources/netscript/site/identity-access/index.md", + "mode": "100644", + "type": "blob", + "sha": "064de5f6e3489f035cb8b586d7b3a0660fb3f2c3", + "size": 2475, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/064de5f6e3489f035cb8b586d7b3a0660fb3f2c3" + }, + { + "path": "resources/netscript/site/observability", + "mode": "040000", + "type": "tree", + "sha": "4306891dfa558357b6a8cada954de01ad1aa8500", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4306891dfa558357b6a8cada954de01ad1aa8500" + }, + { + "path": "resources/netscript/site/observability/index.md", + "mode": "100644", + "type": "blob", + "sha": "0cfa7a4f85399f24e41d4b66eddf6f1634ae3947", + "size": 3214, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0cfa7a4f85399f24e41d4b66eddf6f1634ae3947" + }, + { + "path": "resources/netscript/site/observability/telemetry.md", + "mode": "100644", + "type": "blob", + "sha": "b97e954220703aaf05a8b9c99da32018b31fa5c7", + "size": 39891, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b97e954220703aaf05a8b9c99da32018b31fa5c7" + }, + { + "path": "resources/netscript/site/orchestration-runtime", + "mode": "040000", + "type": "tree", + "sha": "21b97883f5683d86fcaff958b650372c2911a9b9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/21b97883f5683d86fcaff958b650372c2911a9b9" + }, + { + "path": "resources/netscript/site/orchestration-runtime/cli-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "6c74d5454e71654d50a4e8960c880a31ee9ab016", + "size": 9322, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6c74d5454e71654d50a4e8960c880a31ee9ab016" + }, + { + "path": "resources/netscript/site/orchestration-runtime/index.md", + "mode": "100644", + "type": "blob", + "sha": "50bd8af0256407ba641a931289dc2cb62fc9535a", + "size": 4000, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/50bd8af0256407ba641a931289dc2cb62fc9535a" + }, + { + "path": "resources/netscript/site/orchestration-runtime/runtime-config.md", + "mode": "100644", + "type": "blob", + "sha": "b53e3bb1c5a7145a73db172241435c9956e8c8c0", + "size": 17219, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b53e3bb1c5a7145a73db172241435c9956e8c8c0" + }, + { + "path": "resources/netscript/site/reference", + "mode": "040000", + "type": "tree", + "sha": "e871b2e73d3d80e4ba22b4c9dc1b1768ff47dc2e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e871b2e73d3d80e4ba22b4c9dc1b1768ff47dc2e" + }, + { + "path": "resources/netscript/site/reference/ai", + "mode": "040000", + "type": "tree", + "sha": "e384a89b169dedb8d45a028cbd53fb1b8a007549", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e384a89b169dedb8d45a028cbd53fb1b8a007549" + }, + { + "path": "resources/netscript/site/reference/ai/index.md", + "mode": "100644", + "type": "blob", + "sha": "e62fcaaf4ef15061e093502a541e7818230e5ca4", + "size": 25923, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e62fcaaf4ef15061e093502a541e7818230e5ca4" + }, + { + "path": "resources/netscript/site/reference/aspire", + "mode": "040000", + "type": "tree", + "sha": "96ecbd3d45fb8a7292436f5fab22b8534b3e4a19", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/96ecbd3d45fb8a7292436f5fab22b8534b3e4a19" + }, + { + "path": "resources/netscript/site/reference/aspire/index.md", + "mode": "100644", + "type": "blob", + "sha": "a3f012d627bc0b6cd30d8f9b3d6a69677ef3b9b3", + "size": 17040, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3f012d627bc0b6cd30d8f9b3d6a69677ef3b9b3" + }, + { + "path": "resources/netscript/site/reference/auth-better-auth", + "mode": "040000", + "type": "tree", + "sha": "fd6f40cdfcae3c52823e2cb152cecb38a8e5f239", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/fd6f40cdfcae3c52823e2cb152cecb38a8e5f239" + }, + { + "path": "resources/netscript/site/reference/auth-better-auth/index.md", + "mode": "100644", + "type": "blob", + "sha": "e8057727ba89345753d9446a10fe7aa11231779a", + "size": 2306, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e8057727ba89345753d9446a10fe7aa11231779a" + }, + { + "path": "resources/netscript/site/reference/auth-kv-oauth", + "mode": "040000", + "type": "tree", + "sha": "49782c97c7d7d568b3c4fbe05023d6a8202fd8dc", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/49782c97c7d7d568b3c4fbe05023d6a8202fd8dc" + }, + { + "path": "resources/netscript/site/reference/auth-kv-oauth/index.md", + "mode": "100644", + "type": "blob", + "sha": "8d18357fafcaccb5895c92e9c63f965726ef8f01", + "size": 3209, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8d18357fafcaccb5895c92e9c63f965726ef8f01" + }, + { + "path": "resources/netscript/site/reference/auth-workos", + "mode": "040000", + "type": "tree", + "sha": "a25a2bcc8cd97cddedf78f197a26984ddea4985d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a25a2bcc8cd97cddedf78f197a26984ddea4985d" + }, + { + "path": "resources/netscript/site/reference/auth-workos/index.md", + "mode": "100644", + "type": "blob", + "sha": "17ddc5a9bb1aec43d16525230b5c82672310d34a", + "size": 2087, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/17ddc5a9bb1aec43d16525230b5c82672310d34a" + }, + { + "path": "resources/netscript/site/reference/auth", + "mode": "040000", + "type": "tree", + "sha": "61971893d1ea33fce038c3e11c418a8eb474fe63", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/61971893d1ea33fce038c3e11c418a8eb474fe63" + }, + { + "path": "resources/netscript/site/reference/auth/index.md", + "mode": "100644", + "type": "blob", + "sha": "24f882d36850fb1105190b2946bd6e446f8bd982", + "size": 1886, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/24f882d36850fb1105190b2946bd6e446f8bd982" + }, + { + "path": "resources/netscript/site/reference/cli", + "mode": "040000", + "type": "tree", + "sha": "6aa6b8916c5be313c9ed3418241c4f8d5b2ec3d1", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6aa6b8916c5be313c9ed3418241c4f8d5b2ec3d1" + }, + { + "path": "resources/netscript/site/reference/cli/index.md", + "mode": "100644", + "type": "blob", + "sha": "8c596a394da741aa791e4f602e002fd1ae04bd3c", + "size": 10090, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8c596a394da741aa791e4f602e002fd1ae04bd3c" + }, + { + "path": "resources/netscript/site/reference/config", + "mode": "040000", + "type": "tree", + "sha": "91048db8a78ada0f8ad42ab390c263a7502d16f9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/91048db8a78ada0f8ad42ab390c263a7502d16f9" + }, + { + "path": "resources/netscript/site/reference/config/index.md", + "mode": "100644", + "type": "blob", + "sha": "983aaa7f1f8c35108eda7449162f741d2ee998eb", + "size": 12109, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/983aaa7f1f8c35108eda7449162f741d2ee998eb" + }, + { + "path": "resources/netscript/site/reference/contracts", + "mode": "040000", + "type": "tree", + "sha": "66b7a833e1b1eae20aff96fb4bc7bd53a55f58c6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/66b7a833e1b1eae20aff96fb4bc7bd53a55f58c6" + }, + { + "path": "resources/netscript/site/reference/contracts/index.md", + "mode": "100644", + "type": "blob", + "sha": "26cbead521f1712e66a97194b8cba49ae55c17d5", + "size": 19287, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/26cbead521f1712e66a97194b8cba49ae55c17d5" + }, + { + "path": "resources/netscript/site/reference/cron", + "mode": "040000", + "type": "tree", + "sha": "7c01b308801155c0ce62594232669ab136359fbb", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7c01b308801155c0ce62594232669ab136359fbb" + }, + { + "path": "resources/netscript/site/reference/cron/index.md", + "mode": "100644", + "type": "blob", + "sha": "daec4c32470afd243277bfaad50e78d58fd3f018", + "size": 5546, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/daec4c32470afd243277bfaad50e78d58fd3f018" + }, + { + "path": "resources/netscript/site/reference/database", + "mode": "040000", + "type": "tree", + "sha": "9dfb23c779d25b89826e32f58ce26fb8462cffc7", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9dfb23c779d25b89826e32f58ce26fb8462cffc7" + }, + { + "path": "resources/netscript/site/reference/database/index.md", + "mode": "100644", + "type": "blob", + "sha": "6a8899b2ce21ccdf15be288ff04baf4f5f0f6ede", + "size": 15104, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6a8899b2ce21ccdf15be288ff04baf4f5f0f6ede" + }, + { + "path": "resources/netscript/site/reference/fresh-ui", + "mode": "040000", + "type": "tree", + "sha": "c22d6501143b6303a61ca0494ac54b5cd81daa25", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c22d6501143b6303a61ca0494ac54b5cd81daa25" + }, + { + "path": "resources/netscript/site/reference/fresh-ui/index.md", + "mode": "100644", + "type": "blob", + "sha": "304f40be3f5a16486fbc6283738cfc60059f5f54", + "size": 14289, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/304f40be3f5a16486fbc6283738cfc60059f5f54" + }, + { + "path": "resources/netscript/site/reference/fresh", + "mode": "040000", + "type": "tree", + "sha": "737ba2aac6462efb2d058bb654172b6146862c0b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/737ba2aac6462efb2d058bb654172b6146862c0b" + }, + { + "path": "resources/netscript/site/reference/fresh/index.md", + "mode": "100644", + "type": "blob", + "sha": "f9d2d45ad5034e9b81dad9c85f445ef49c2617a6", + "size": 70129, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f9d2d45ad5034e9b81dad9c85f445ef49c2617a6" + }, + { + "path": "resources/netscript/site/reference/index.md", + "mode": "100644", + "type": "blob", + "sha": "ab64b745e69afcab9d7a2c48b4eb8c219a6fb84a", + "size": 495, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ab64b745e69afcab9d7a2c48b4eb8c219a6fb84a" + }, + { + "path": "resources/netscript/site/reference/kv", + "mode": "040000", + "type": "tree", + "sha": "c8eb529b4398384e413ac6ad1d0f3c0f7d0338dc", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c8eb529b4398384e413ac6ad1d0f3c0f7d0338dc" + }, + { + "path": "resources/netscript/site/reference/kv/index.md", + "mode": "100644", + "type": "blob", + "sha": "9c7251443c359d540b0a7c68c22671d8ef231448", + "size": 9103, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c7251443c359d540b0a7c68c22671d8ef231448" + }, + { + "path": "resources/netscript/site/reference/logger", + "mode": "040000", + "type": "tree", + "sha": "8c09abb23aaf5ba4be7af3f85e7594498769e791", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8c09abb23aaf5ba4be7af3f85e7594498769e791" + }, + { + "path": "resources/netscript/site/reference/logger/index.md", + "mode": "100644", + "type": "blob", + "sha": "f52f069392f874fc20242e6f200db3652c53fec9", + "size": 4412, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f52f069392f874fc20242e6f200db3652c53fec9" + }, + { + "path": "resources/netscript/site/reference/plugin-ai-core", + "mode": "040000", + "type": "tree", + "sha": "8fb703adda6bc3596d5cfcfcaee2ee6b2c7ffdc6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8fb703adda6bc3596d5cfcfcaee2ee6b2c7ffdc6" + }, + { + "path": "resources/netscript/site/reference/plugin-ai-core/index.md", + "mode": "100644", + "type": "blob", + "sha": "56b5638c4bed319ed6ccbeb746de131e327a8fa9", + "size": 14286, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/56b5638c4bed319ed6ccbeb746de131e327a8fa9" + }, + { + "path": "resources/netscript/site/reference/plugin-ai", + "mode": "040000", + "type": "tree", + "sha": "f1ae515c0ed2a47848620643ed103ed82518ae02", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f1ae515c0ed2a47848620643ed103ed82518ae02" + }, + { + "path": "resources/netscript/site/reference/plugin-ai/index.md", + "mode": "100644", + "type": "blob", + "sha": "b44eaf5ab55583ea8c75fd416c6fbb6a91f53e12", + "size": 17844, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b44eaf5ab55583ea8c75fd416c6fbb6a91f53e12" + }, + { + "path": "resources/netscript/site/reference/plugin-auth-core", + "mode": "040000", + "type": "tree", + "sha": "d1c29ec4cef3f0be9ba95f10c2b2eff416a4f180", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/d1c29ec4cef3f0be9ba95f10c2b2eff416a4f180" + }, + { + "path": "resources/netscript/site/reference/plugin-auth-core/index.md", + "mode": "100644", + "type": "blob", + "sha": "39a4f7f6ea4ffb7299801859348fcefc9bfe31a2", + "size": 4970, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/39a4f7f6ea4ffb7299801859348fcefc9bfe31a2" + }, + { + "path": "resources/netscript/site/reference/plugin-auth", + "mode": "040000", + "type": "tree", + "sha": "4dc6e8d1997b3297bdc6ab70255f6f237208fd05", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4dc6e8d1997b3297bdc6ab70255f6f237208fd05" + }, + { + "path": "resources/netscript/site/reference/plugin-auth/index.md", + "mode": "100644", + "type": "blob", + "sha": "5245c5b89af3cb7851348c1686529e2513b5aabc", + "size": 1571, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5245c5b89af3cb7851348c1686529e2513b5aabc" + }, + { + "path": "resources/netscript/site/reference/plugin", + "mode": "040000", + "type": "tree", + "sha": "2bedd3bac885044d19533e1082e764e6350f481e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2bedd3bac885044d19533e1082e764e6350f481e" + }, + { + "path": "resources/netscript/site/reference/plugin/index.md", + "mode": "100644", + "type": "blob", + "sha": "499c7fb18a7ac457f82a03f4ba1ac4962de4f0f4", + "size": 14468, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/499c7fb18a7ac457f82a03f4ba1ac4962de4f0f4" + }, + { + "path": "resources/netscript/site/reference/prisma-adapter-mysql", + "mode": "040000", + "type": "tree", + "sha": "a84c0ca829a42c4c9383a2d0c4235449dd575ce0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a84c0ca829a42c4c9383a2d0c4235449dd575ce0" + }, + { + "path": "resources/netscript/site/reference/prisma-adapter-mysql/index.md", + "mode": "100644", + "type": "blob", + "sha": "865750ac69194e2c4b8cef11070d3146db2d1973", + "size": 3457, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/865750ac69194e2c4b8cef11070d3146db2d1973" + }, + { + "path": "resources/netscript/site/reference/queue", + "mode": "040000", + "type": "tree", + "sha": "287c6a4f5a9e0b5a62a486698610d95df4667f76", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/287c6a4f5a9e0b5a62a486698610d95df4667f76" + }, + { + "path": "resources/netscript/site/reference/queue/index.md", + "mode": "100644", + "type": "blob", + "sha": "539f89388d98f083704656bd629dea6561028d4d", + "size": 7809, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/539f89388d98f083704656bd629dea6561028d4d" + }, + { + "path": "resources/netscript/site/reference/runtime-config", + "mode": "040000", + "type": "tree", + "sha": "f0252380c5eb5d42f8880c51569282c8119acc21", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f0252380c5eb5d42f8880c51569282c8119acc21" + }, + { + "path": "resources/netscript/site/reference/runtime-config/index.md", + "mode": "100644", + "type": "blob", + "sha": "578a3d26f2d2ae8b874b4475e200f278193dc604", + "size": 4082, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/578a3d26f2d2ae8b874b4475e200f278193dc604" + }, + { + "path": "resources/netscript/site/reference/sagas", + "mode": "040000", + "type": "tree", + "sha": "ff9a96fa4142ce10ee6049707f6fec02ec46aff0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ff9a96fa4142ce10ee6049707f6fec02ec46aff0" + }, + { + "path": "resources/netscript/site/reference/sagas/index.md", + "mode": "100644", + "type": "blob", + "sha": "4b18f2742398699992f27dfd87a6911dd947c726", + "size": 15724, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4b18f2742398699992f27dfd87a6911dd947c726" + }, + { + "path": "resources/netscript/site/reference/sdk", + "mode": "040000", + "type": "tree", + "sha": "c4a020f140b751ef499555388c026bee40b5138f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c4a020f140b751ef499555388c026bee40b5138f" + }, + { + "path": "resources/netscript/site/reference/sdk/index.md", + "mode": "100644", + "type": "blob", + "sha": "34d2feb7458a871d584596ab6201580d4f169fa6", + "size": 19687, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/34d2feb7458a871d584596ab6201580d4f169fa6" + }, + { + "path": "resources/netscript/site/reference/service", + "mode": "040000", + "type": "tree", + "sha": "56cc5041c2d28b5e8c166d548c607fd29c1def99", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/56cc5041c2d28b5e8c166d548c607fd29c1def99" + }, + { + "path": "resources/netscript/site/reference/service/index.md", + "mode": "100644", + "type": "blob", + "sha": "90180b97023289a0fa7271ed74906933b1fb76fc", + "size": 7611, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/90180b97023289a0fa7271ed74906933b1fb76fc" + }, + { + "path": "resources/netscript/site/reference/streams", + "mode": "040000", + "type": "tree", + "sha": "786b4042670823e2265fa18cd196f276060484a3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/786b4042670823e2265fa18cd196f276060484a3" + }, + { + "path": "resources/netscript/site/reference/streams/index.md", + "mode": "100644", + "type": "blob", + "sha": "de9c88c37ed556483cda462f58199ac6ceea9e3c", + "size": 12898, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/de9c88c37ed556483cda462f58199ac6ceea9e3c" + }, + { + "path": "resources/netscript/site/reference/telemetry", + "mode": "040000", + "type": "tree", + "sha": "b80a105ecfd44d01b64853561f98c2bac50e5053", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b80a105ecfd44d01b64853561f98c2bac50e5053" + }, + { + "path": "resources/netscript/site/reference/telemetry/convention.md", + "mode": "100644", + "type": "blob", + "sha": "dd3a7a2ff1a056a4bd96ac130a6422f9bd85f811", + "size": 3809, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dd3a7a2ff1a056a4bd96ac130a6422f9bd85f811" + }, + { + "path": "resources/netscript/site/reference/telemetry/index.md", + "mode": "100644", + "type": "blob", + "sha": "03ee4e7b9d0383bf6a08dfb95a800069498047cd", + "size": 32681, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/03ee4e7b9d0383bf6a08dfb95a800069498047cd" + }, + { + "path": "resources/netscript/site/reference/triggers", + "mode": "040000", + "type": "tree", + "sha": "77a902c316fe9b524b5604954dec57bc154328f3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/77a902c316fe9b524b5604954dec57bc154328f3" + }, + { + "path": "resources/netscript/site/reference/triggers/index.md", + "mode": "100644", + "type": "blob", + "sha": "e94cb8b9cf6b806b39cd075c2bce7faf6691f14f", + "size": 17132, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e94cb8b9cf6b806b39cd075c2bce7faf6691f14f" + }, + { + "path": "resources/netscript/site/reference/watchers", + "mode": "040000", + "type": "tree", + "sha": "60516c81461796d62be60e0ac784ecf7d23812ca", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/60516c81461796d62be60e0ac784ecf7d23812ca" + }, + { + "path": "resources/netscript/site/reference/watchers/index.md", + "mode": "100644", + "type": "blob", + "sha": "bae95777ba60897436bf13518ccfdad8edf04643", + "size": 6778, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bae95777ba60897436bf13518ccfdad8edf04643" + }, + { + "path": "resources/netscript/site/reference/workers", + "mode": "040000", + "type": "tree", + "sha": "a70435c248b0c30de01ff05cb4951ec4fa06be7a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a70435c248b0c30de01ff05cb4951ec4fa06be7a" + }, + { + "path": "resources/netscript/site/reference/workers/index.md", + "mode": "100644", + "type": "blob", + "sha": "7eb0df79cdd8b799b913841dc1af8ba2f07446ac", + "size": 58051, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7eb0df79cdd8b799b913841dc1af8ba2f07446ac" + }, + { + "path": "resources/netscript/site/services-sdk", + "mode": "040000", + "type": "tree", + "sha": "b951e3c8b3eb8d1edec472454a8dba0cfebe2274", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b951e3c8b3eb8d1edec472454a8dba0cfebe2274" + }, + { + "path": "resources/netscript/site/services-sdk/index.md", + "mode": "100644", + "type": "blob", + "sha": "d35c0d1e0f583f3ecf6351ca1855c450569978aa", + "size": 3121, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d35c0d1e0f583f3ecf6351ca1855c450569978aa" + }, + { + "path": "resources/netscript/site/services-sdk/sdk.md", + "mode": "100644", + "type": "blob", + "sha": "780ccf1db6977ca069b6cb6ae25f2c0b75373a6d", + "size": 15851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/780ccf1db6977ca069b6cb6ae25f2c0b75373a6d" + }, + { + "path": "resources/netscript/site/services-sdk/services.md", + "mode": "100644", + "type": "blob", + "sha": "a6d968fbb23d2514af61941c32e4efae5c9f175a", + "size": 31936, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a6d968fbb23d2514af61941c32e4efae5c9f175a" + }, + { + "path": "resources/netscript/site/tutorials", + "mode": "040000", + "type": "tree", + "sha": "2e1589c53aa057a18d775bf4c7ae36442fca718b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2e1589c53aa057a18d775bf4c7ae36442fca718b" + }, + { + "path": "resources/netscript/site/tutorials/chat", + "mode": "040000", + "type": "tree", + "sha": "6ec6054ca661fad5b9334a75e8a7eb1cf9ef0ff9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6ec6054ca661fad5b9334a75e8a7eb1cf9ef0ff9" + }, + { + "path": "resources/netscript/site/tutorials/chat/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "effafca53de8ad4573d87662b7b8a9ba0efd89c1", + "size": 6048, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/effafca53de8ad4573d87662b7b8a9ba0efd89c1" + }, + { + "path": "resources/netscript/site/tutorials/chat/02-durable-chat-route.md", + "mode": "100644", + "type": "blob", + "sha": "eb05ade01f6c0239d90a110fbe02d2b60b5749b7", + "size": 10678, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eb05ade01f6c0239d90a110fbe02d2b60b5749b7" + }, + { + "path": "resources/netscript/site/tutorials/chat/03-chat-ui.md", + "mode": "100644", + "type": "blob", + "sha": "83a0402fbd7fd0fced27e9f118da3ca01410f30a", + "size": 11776, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/83a0402fbd7fd0fced27e9f118da3ca01410f30a" + }, + { + "path": "resources/netscript/site/tutorials/chat/04-tool-call.md", + "mode": "100644", + "type": "blob", + "sha": "86d01d15b6be1c9dbf3ec21c3934df00263c5299", + "size": 8989, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/86d01d15b6be1c9dbf3ec21c3934df00263c5299" + }, + { + "path": "resources/netscript/site/tutorials/chat/05-mcp.md", + "mode": "100644", + "type": "blob", + "sha": "27e5e34a4fd83dda5c787ab39132ea94b166d50b", + "size": 11348, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/27e5e34a4fd83dda5c787ab39132ea94b166d50b" + }, + { + "path": "resources/netscript/site/tutorials/chat/06-live-streaming.md", + "mode": "100644", + "type": "blob", + "sha": "8a53a7351929022c1c1b8c52a2c88a11fc991e9d", + "size": 10383, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8a53a7351929022c1c1b8c52a2c88a11fc991e9d" + }, + { + "path": "resources/netscript/site/tutorials/chat/index.md", + "mode": "100644", + "type": "blob", + "sha": "7ced2b51e6acf893526027215403c6cb370769ed", + "size": 6867, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ced2b51e6acf893526027215403c6cb370769ed" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat", + "mode": "040000", + "type": "tree", + "sha": "be9db04f8ed58d055236014b5a43e16f70c411f8", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/be9db04f8ed58d055236014b5a43e16f70c411f8" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "375824a27e677176b5027c8c6dde3643334bf7cc", + "size": 78, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/375824a27e677176b5027c8c6dde3643334bf7cc" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat/02-message-contract.md", + "mode": "100644", + "type": "blob", + "sha": "db112064592b36fca3a120434e3965e77b137c0e", + "size": 88, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/db112064592b36fca3a120434e3965e77b137c0e" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat/03-deliver-worker.md", + "mode": "100644", + "type": "blob", + "sha": "db112064592b36fca3a120434e3965e77b137c0e", + "size": 88, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/db112064592b36fca3a120434e3965e77b137c0e" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat/04-live-stream.md", + "mode": "100644", + "type": "blob", + "sha": "bbfb6ba19e9d8024fb0c84ab2a8d024f4c093d3a", + "size": 84, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bbfb6ba19e9d8024fb0c84ab2a8d024f4c093d3a" + }, + { + "path": "resources/netscript/site/tutorials/eis-chat/index.md", + "mode": "100644", + "type": "blob", + "sha": "8068d7c6512c0689d6c8bbb58efeeee54270d7c0", + "size": 66, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8068d7c6512c0689d6c8bbb58efeeee54270d7c0" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync", + "mode": "040000", + "type": "tree", + "sha": "722202e978d44ca2a868292b4352677b31340f15", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/722202e978d44ca2a868292b4352677b31340f15" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "5641b2c7e6531ba83cad2363346c305be6124e64", + "size": 9703, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5641b2c7e6531ba83cad2363346c305be6124e64" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/02-import-job.md", + "mode": "100644", + "type": "blob", + "sha": "41807371794e32afdfd40c8200cf93daec37ca9a", + "size": 12647, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/41807371794e32afdfd40c8200cf93daec37ca9a" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/03-polyglot-transform.md", + "mode": "100644", + "type": "blob", + "sha": "9a83b680d6d1295168481e3fd9ee36607dfbb255", + "size": 16906, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9a83b680d6d1295168481e3fd9ee36607dfbb255" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/04-queue-and-cron.md", + "mode": "100644", + "type": "blob", + "sha": "eeb6edc442a5d7d79be44018286a2e6180783dc7", + "size": 12782, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eeb6edc442a5d7d79be44018286a2e6180783dc7" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/05-deploy.md", + "mode": "100644", + "type": "blob", + "sha": "5b59f4f145f6f9bf8674cff2616041e5f0100122", + "size": 12148, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5b59f4f145f6f9bf8674cff2616041e5f0100122" + }, + { + "path": "resources/netscript/site/tutorials/erp-sync/index.md", + "mode": "100644", + "type": "blob", + "sha": "29b79aa8158c0869ee5421f3b06dcfe9d6d4e750", + "size": 7126, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/29b79aa8158c0869ee5421f3b06dcfe9d6d4e750" + }, + { + "path": "resources/netscript/site/tutorials/index.md", + "mode": "100644", + "type": "blob", + "sha": "5119437ba5d5733dfce16f1253094049991bc8a1", + "size": 6873, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5119437ba5d5733dfce16f1253094049991bc8a1" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard", + "mode": "040000", + "type": "tree", + "sha": "83de69ec6b0e0c0ad8780defe47959593be103ce", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/83de69ec6b0e0c0ad8780defe47959593be103ce" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "1ce8c34ce7f11ff0b46bb3c7a8af2a835091e57b", + "size": 10778, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1ce8c34ce7f11ff0b46bb3c7a8af2a835091e57b" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/02-contract-to-service.md", + "mode": "100644", + "type": "blob", + "sha": "b7f95f9d0fb8760c9d915cca8197a4f39fecacb1", + "size": 11173, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b7f95f9d0fb8760c9d915cca8197a4f39fecacb1" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/03-sdk-cache-first-query.md", + "mode": "100644", + "type": "blob", + "sha": "ebb4f7e2f365066db19b018ce17cbec6076add2d", + "size": 8187, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebb4f7e2f365066db19b018ce17cbec6076add2d" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/04-definePage-QueryIsland.md", + "mode": "100644", + "type": "blob", + "sha": "a6a9de65b107138bdfdd1e1dd6b1118e2a597d6f", + "size": 14972, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a6a9de65b107138bdfdd1e1dd6b1118e2a597d6f" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/05-live-stream.md", + "mode": "100644", + "type": "blob", + "sha": "82e550c4ccd11f35a7080b42625f3574c67d962a", + "size": 13956, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/82e550c4ccd11f35a7080b42625f3574c67d962a" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/06-deploy.md", + "mode": "100644", + "type": "blob", + "sha": "6b4854848e164ab687fb23b564d4b5c09597376f", + "size": 10851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6b4854848e164ab687fb23b564d4b5c09597376f" + }, + { + "path": "resources/netscript/site/tutorials/live-dashboard/index.md", + "mode": "100644", + "type": "blob", + "sha": "f819d3cb8900e361ef9cd5274b74afa25ecc41a0", + "size": 6670, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f819d3cb8900e361ef9cd5274b74afa25ecc41a0" + }, + { + "path": "resources/netscript/site/tutorials/storefront", + "mode": "040000", + "type": "tree", + "sha": "0fa469eb9aa202bd58948df5e43aec56cfc49de3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/0fa469eb9aa202bd58948df5e43aec56cfc49de3" + }, + { + "path": "resources/netscript/site/tutorials/storefront/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "2690817792c99d9860ac4aee823a6d0091101e7f", + "size": 12777, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2690817792c99d9860ac4aee823a6d0091101e7f" + }, + { + "path": "resources/netscript/site/tutorials/storefront/02-catalog-service.md", + "mode": "100644", + "type": "blob", + "sha": "56be8b10b3de9df17311833a11312fe4559163ea", + "size": 18213, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/56be8b10b3de9df17311833a11312fe4559163ea" + }, + { + "path": "resources/netscript/site/tutorials/storefront/03-cart-contracts.md", + "mode": "100644", + "type": "blob", + "sha": "973c736b12b515de2a01e4be27d89f206fe7492d", + "size": 12508, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/973c736b12b515de2a01e4be27d89f206fe7492d" + }, + { + "path": "resources/netscript/site/tutorials/storefront/04-checkout-saga.md", + "mode": "100644", + "type": "blob", + "sha": "bf713a53e55643a96619ff949f132cfde51fa8a7", + "size": 19075, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf713a53e55643a96619ff949f132cfde51fa8a7" + }, + { + "path": "resources/netscript/site/tutorials/storefront/05-shipping-webhook.md", + "mode": "100644", + "type": "blob", + "sha": "04ac4430b56fbcaf98dacecc5a6718ad2b53c25c", + "size": 15189, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/04ac4430b56fbcaf98dacecc5a6718ad2b53c25c" + }, + { + "path": "resources/netscript/site/tutorials/storefront/06-storefront-ui.md", + "mode": "100644", + "type": "blob", + "sha": "663eb4151af080496a5d728d20f9af90c60eef5e", + "size": 17272, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/663eb4151af080496a5d728d20f9af90c60eef5e" + }, + { + "path": "resources/netscript/site/tutorials/storefront/07-deploy.md", + "mode": "100644", + "type": "blob", + "sha": "d92b71ccb27080eefc18d275193363839986e256", + "size": 12529, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d92b71ccb27080eefc18d275193363839986e256" + }, + { + "path": "resources/netscript/site/tutorials/storefront/index.md", + "mode": "100644", + "type": "blob", + "sha": "98895c2d9ea0ca7c3b0b04ef1067a98908b0d75d", + "size": 7158, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98895c2d9ea0ca7c3b0b04ef1067a98908b0d75d" + }, + { + "path": "resources/netscript/site/tutorials/workspace", + "mode": "040000", + "type": "tree", + "sha": "3de6f601b849bdd65bff44b0426f8d117c5e7f04", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3de6f601b849bdd65bff44b0426f8d117c5e7f04" + }, + { + "path": "resources/netscript/site/tutorials/workspace/01-scaffold.md", + "mode": "100644", + "type": "blob", + "sha": "adc2ad98e3c7491bb3d03e61f0dceea1ebdd8685", + "size": 10063, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/adc2ad98e3c7491bb3d03e61f0dceea1ebdd8685" + }, + { + "path": "resources/netscript/site/tutorials/workspace/02-auth.md", + "mode": "100644", + "type": "blob", + "sha": "66154f701ca7301dee50bfbf19ef72c115d5d5d7", + "size": 15250, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/66154f701ca7301dee50bfbf19ef72c115d5d5d7" + }, + { + "path": "resources/netscript/site/tutorials/workspace/03-workspace-data.md", + "mode": "100644", + "type": "blob", + "sha": "59d415caa92f868a2cda6d921e25c665ca289b3b", + "size": 12881, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59d415caa92f868a2cda6d921e25c665ca289b3b" + }, + { + "path": "resources/netscript/site/tutorials/workspace/04-provision-job.md", + "mode": "100644", + "type": "blob", + "sha": "4fb27ba18a948d8a0fb1ac45c9c75d99933b00c4", + "size": 12090, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4fb27ba18a948d8a0fb1ac45c9c75d99933b00c4" + }, + { + "path": "resources/netscript/site/tutorials/workspace/05-route-authz.md", + "mode": "100644", + "type": "blob", + "sha": "9513369ce237243e8316d28bd2e7cba22d4d23c7", + "size": 17229, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9513369ce237243e8316d28bd2e7cba22d4d23c7" + }, + { + "path": "resources/netscript/site/tutorials/workspace/06-deploy.md", + "mode": "100644", + "type": "blob", + "sha": "502997dce5362e2e8115b0fdd119d69fc0d4ccfe", + "size": 11160, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/502997dce5362e2e8115b0fdd119d69fc0d4ccfe" + }, + { + "path": "resources/netscript/site/tutorials/workspace/index.md", + "mode": "100644", + "type": "blob", + "sha": "ff750576f331fc01d73212a82e502b48532b7d26", + "size": 7851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ff750576f331fc01d73212a82e502b48532b7d26" + }, + { + "path": "resources/netscript/site/web-layer", + "mode": "040000", + "type": "tree", + "sha": "3910ea05189290b5e38148acca43732ff7f1f4f6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3910ea05189290b5e38148acca43732ff7f1f4f6" + }, + { + "path": "resources/netscript/site/web-layer/builders.md", + "mode": "100644", + "type": "blob", + "sha": "94d8519f84cf98d9645e55d263a6c94875695b32", + "size": 10737, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94d8519f84cf98d9645e55d263a6c94875695b32" + }, + { + "path": "resources/netscript/site/web-layer/defer-streaming-ui.md", + "mode": "100644", + "type": "blob", + "sha": "e1204c9cc968e6494700f1ce16a6f7a60188207b", + "size": 10485, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e1204c9cc968e6494700f1ce16a6f7a60188207b" + }, + { + "path": "resources/netscript/site/web-layer/error.md", + "mode": "100644", + "type": "blob", + "sha": "76ea988c1f3b434f6ce9678a383e044989279465", + "size": 9873, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/76ea988c1f3b434f6ce9678a383e044989279465" + }, + { + "path": "resources/netscript/site/web-layer/examples.md", + "mode": "100644", + "type": "blob", + "sha": "6e3d13b00aee0160787bc047305b9a1811d6a1b0", + "size": 6375, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e3d13b00aee0160787bc047305b9a1811d6a1b0" + }, + { + "path": "resources/netscript/site/web-layer/form.md", + "mode": "100644", + "type": "blob", + "sha": "523fed433c826c94fca8b859052fdec106ce796d", + "size": 13735, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/523fed433c826c94fca8b859052fdec106ce796d" + }, + { + "path": "resources/netscript/site/web-layer/fresh-ui.md", + "mode": "100644", + "type": "blob", + "sha": "73f15cadaed9aa751742d6063df875fcf463e3d5", + "size": 21921, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/73f15cadaed9aa751742d6063df875fcf463e3d5" + }, + { + "path": "resources/netscript/site/web-layer/index.md", + "mode": "100644", + "type": "blob", + "sha": "a7a1b03af0ab721092ab40a24abf307653aa8f94", + "size": 5752, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a7a1b03af0ab721092ab40a24abf307653aa8f94" + }, + { + "path": "resources/netscript/site/web-layer/interactive.md", + "mode": "100644", + "type": "blob", + "sha": "f1c4845887016d040a4e1216724a1df3d1f6b8e8", + "size": 6626, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f1c4845887016d040a4e1216724a1df3d1f6b8e8" + }, + { + "path": "resources/netscript/site/web-layer/query.md", + "mode": "100644", + "type": "blob", + "sha": "dfbbf3436491a348ecf4cb2739a3fc107256cca2", + "size": 20497, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dfbbf3436491a348ecf4cb2739a3fc107256cca2" + }, + { + "path": "resources/netscript/site/web-layer/route.md", + "mode": "100644", + "type": "blob", + "sha": "74ced47d91c2a054ec56f3420377f1dc017ac1fe", + "size": 9250, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/74ced47d91c2a054ec56f3420377f1dc017ac1fe" + }, + { + "path": "resources/netscript/site/web-layer/server.md", + "mode": "100644", + "type": "blob", + "sha": "9e74a359f8b371fc0ed50c33f3fa233338c7c7eb", + "size": 9414, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9e74a359f8b371fc0ed50c33f3fa233338c7c7eb" + }, + { + "path": "resources/netscript/site/web-layer/testing.md", + "mode": "100644", + "type": "blob", + "sha": "6142543fe35017f10e58a0cf775fd2e7c9c4b750", + "size": 9728, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6142543fe35017f10e58a0cf775fd2e7c9c4b750" + }, + { + "path": "resources/netscript/site/web-layer/vite.md", + "mode": "100644", + "type": "blob", + "sha": "2e35bb6ce96fd9d30140e9c37baa74f6e7872d87", + "size": 7864, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2e35bb6ce96fd9d30140e9c37baa74f6e7872d87" + }, + { + "path": "resources/tanstack-ai", + "mode": "040000", + "type": "tree", + "sha": "7e389553f163156544e6a16c43deb3e957f521ed", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7e389553f163156544e6a16c43deb3e957f521ed" + }, + { + "path": "resources/tanstack-ai/adapters", + "mode": "040000", + "type": "tree", + "sha": "db8dc2211e2288e27e93ad1db023b0dd7478add4", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/db8dc2211e2288e27e93ad1db023b0dd7478add4" + }, + { + "path": "resources/tanstack-ai/adapters/anthropic.md", + "mode": "100644", + "type": "blob", + "sha": "a44da5cfd52b7ea4f07e533c61e95f9769e9f41e", + "size": 13684, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a44da5cfd52b7ea4f07e533c61e95f9769e9f41e" + }, + { + "path": "resources/tanstack-ai/adapters/elevenlabs.md", + "mode": "100644", + "type": "blob", + "sha": "b1c066dc68c3860e99832d7eb87baa302c1ee4f6", + "size": 13145, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b1c066dc68c3860e99832d7eb87baa302c1ee4f6" + }, + { + "path": "resources/tanstack-ai/adapters/fal.md", + "mode": "100644", + "type": "blob", + "sha": "46ccc246c2aa28cba18ca5ec6d67b64f49ccf8e3", + "size": 17063, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/46ccc246c2aa28cba18ca5ec6d67b64f49ccf8e3" + }, + { + "path": "resources/tanstack-ai/adapters/gemini.md", + "mode": "100644", + "type": "blob", + "sha": "a5d46a933d6b254dbe1b798a5752003fd019f749", + "size": 26069, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a5d46a933d6b254dbe1b798a5752003fd019f749" + }, + { + "path": "resources/tanstack-ai/adapters/grok.md", + "mode": "100644", + "type": "blob", + "sha": "832ac99866ff2c3118c5b3f908d8bdd43b4dd41f", + "size": 12573, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/832ac99866ff2c3118c5b3f908d8bdd43b4dd41f" + }, + { + "path": "resources/tanstack-ai/adapters/groq.md", + "mode": "100644", + "type": "blob", + "sha": "aef8020405d1b72b840eeb8eff8d52d812dad62d", + "size": 6308, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aef8020405d1b72b840eeb8eff8d52d812dad62d" + }, + { + "path": "resources/tanstack-ai/adapters/ollama.md", + "mode": "100644", + "type": "blob", + "sha": "cc821149bd07a5bade2175d322c417c06fe528fa", + "size": 7499, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cc821149bd07a5bade2175d322c417c06fe528fa" + }, + { + "path": "resources/tanstack-ai/adapters/openai-compatible.md", + "mode": "100644", + "type": "blob", + "sha": "f612bef56108008375c30d48d1135bae86b22662", + "size": 9614, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f612bef56108008375c30d48d1135bae86b22662" + }, + { + "path": "resources/tanstack-ai/adapters/openai.md", + "mode": "100644", + "type": "blob", + "sha": "1eed1a8ef32df2b0c5576e4d42eec64963bd81f9", + "size": 21065, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1eed1a8ef32df2b0c5576e4d42eec64963bd81f9" + }, + { + "path": "resources/tanstack-ai/adapters/openrouter.md", + "mode": "100644", + "type": "blob", + "sha": "6dfca45d17221eb96f05109328bba0e7f950bc6b", + "size": 10901, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6dfca45d17221eb96f05109328bba0e7f950bc6b" + }, + { + "path": "resources/tanstack-ai/advanced", + "mode": "040000", + "type": "tree", + "sha": "2a2e43e6c293c620949194eddec7e69503bf1260", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2a2e43e6c293c620949194eddec7e69503bf1260" + }, + { + "path": "resources/tanstack-ai/advanced/built-in-middleware.md", + "mode": "100644", + "type": "blob", + "sha": "b2c888c49c7c05f4f6f4ce9d8910f434a55eea09", + "size": 11006, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b2c888c49c7c05f4f6f4ce9d8910f434a55eea09" + }, + { + "path": "resources/tanstack-ai/advanced/debug-logging.md", + "mode": "100644", + "type": "blob", + "sha": "12867ecf9593a3aeae5ffa7926b69732f5346917", + "size": 7022, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/12867ecf9593a3aeae5ffa7926b69732f5346917" + }, + { + "path": "resources/tanstack-ai/advanced/extend-adapter.md", + "mode": "100644", + "type": "blob", + "sha": "bad7fc1361e8d2fb6878f4f362b5aa1b8cb18149", + "size": 6564, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bad7fc1361e8d2fb6878f4f362b5aa1b8cb18149" + }, + { + "path": "resources/tanstack-ai/advanced/middleware.md", + "mode": "100644", + "type": "blob", + "sha": "a416e8f702e2269a4003170ba031a94837302935", + "size": 38727, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a416e8f702e2269a4003170ba031a94837302935" + }, + { + "path": "resources/tanstack-ai/advanced/multimodal-content.md", + "mode": "100644", + "type": "blob", + "sha": "c6e5a44ffd5a7a6d8ab592c676bad8e87077bfaf", + "size": 13506, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c6e5a44ffd5a7a6d8ab592c676bad8e87077bfaf" + }, + { + "path": "resources/tanstack-ai/advanced/otel.md", + "mode": "100644", + "type": "blob", + "sha": "9f6b78ee487f19ef16ad472a12878d40262f2fb3", + "size": 11766, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9f6b78ee487f19ef16ad472a12878d40262f2fb3" + }, + { + "path": "resources/tanstack-ai/advanced/per-model-type-safety.md", + "mode": "100644", + "type": "blob", + "sha": "6e9d92c41c888f8b07b828fe30a686ac88364c58", + "size": 3043, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e9d92c41c888f8b07b828fe30a686ac88364c58" + }, + { + "path": "resources/tanstack-ai/advanced/runtime-adapter-switching.md", + "mode": "100644", + "type": "blob", + "sha": "cc63a2e2c6316f9143108d1cadfe302f59da7a08", + "size": 6837, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cc63a2e2c6316f9143108d1cadfe302f59da7a08" + }, + { + "path": "resources/tanstack-ai/advanced/runtime-context.md", + "mode": "100644", + "type": "blob", + "sha": "18c703fb7251d39203ff6b8ca567cbcdc6fad1d5", + "size": 10292, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/18c703fb7251d39203ff6b8ca567cbcdc6fad1d5" + }, + { + "path": "resources/tanstack-ai/advanced/tree-shaking.md", + "mode": "100644", + "type": "blob", + "sha": "950380d713e2194facba16c02d515714103c3163", + "size": 9390, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/950380d713e2194facba16c02d515714103c3163" + }, + { + "path": "resources/tanstack-ai/advanced/typed-options.md", + "mode": "100644", + "type": "blob", + "sha": "ad2ef65f3c2df946e1a68cb6c27dbf1dd2f9a43c", + "size": 7726, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad2ef65f3c2df946e1a68cb6c27dbf1dd2f9a43c" + }, + { + "path": "resources/tanstack-ai/api", + "mode": "040000", + "type": "tree", + "sha": "e0d7c1693368081964c23dab757b0ba2d773c74d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e0d7c1693368081964c23dab757b0ba2d773c74d" + }, + { + "path": "resources/tanstack-ai/api/ai-angular.md", + "mode": "100644", + "type": "blob", + "sha": "438c3bf46581b47723a68fec8b4619f8b0741209", + "size": 18760, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/438c3bf46581b47723a68fec8b4619f8b0741209" + }, + { + "path": "resources/tanstack-ai/api/ai-client.md", + "mode": "100644", + "type": "blob", + "sha": "b926516dde3f28c9568085b60bb88c5d98629692", + "size": 13460, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b926516dde3f28c9568085b60bb88c5d98629692" + }, + { + "path": "resources/tanstack-ai/api/ai-preact.md", + "mode": "100644", + "type": "blob", + "sha": "d22977c34c6b9acc45afcadea4dae9f0775636fd", + "size": 10155, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d22977c34c6b9acc45afcadea4dae9f0775636fd" + }, + { + "path": "resources/tanstack-ai/api/ai-react.md", + "mode": "100644", + "type": "blob", + "sha": "0cc59935760044668c0f8fa1ce8f23768dd87775", + "size": 11516, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0cc59935760044668c0f8fa1ce8f23768dd87775" + }, + { + "path": "resources/tanstack-ai/api/ai-solid.md", + "mode": "100644", + "type": "blob", + "sha": "855ce883ed120e658d8c0df4e608de093ae36f98", + "size": 10928, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/855ce883ed120e658d8c0df4e608de093ae36f98" + }, + { + "path": "resources/tanstack-ai/api/ai-svelte.md", + "mode": "100644", + "type": "blob", + "sha": "6f82780438da2e92dfc09071d03528a0575a8084", + "size": 12442, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6f82780438da2e92dfc09071d03528a0575a8084" + }, + { + "path": "resources/tanstack-ai/api/ai-vue.md", + "mode": "100644", + "type": "blob", + "sha": "5b9cf07075538ce619e8e56b846154a8f7c645be", + "size": 12588, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5b9cf07075538ce619e8e56b846154a8f7c645be" + }, + { + "path": "resources/tanstack-ai/api/ai.md", + "mode": "100644", + "type": "blob", + "sha": "6ba6dc753303333863e9d238abee7473a9641141", + "size": 16406, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6ba6dc753303333863e9d238abee7473a9641141" + }, + { + "path": "resources/tanstack-ai/architecture", + "mode": "040000", + "type": "tree", + "sha": "8c3a94cc41885b3c1234c7b2a2cb67c898c3eea2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8c3a94cc41885b3c1234c7b2a2cb67c898c3eea2" + }, + { + "path": "resources/tanstack-ai/architecture/approval-flow-processing.md", + "mode": "100644", + "type": "blob", + "sha": "04632bbe666203161c3784def1ecd9239904f411", + "size": 15695, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/04632bbe666203161c3784def1ecd9239904f411" + }, + { + "path": "resources/tanstack-ai/chat", + "mode": "040000", + "type": "tree", + "sha": "59b49bbe7d83f1a4668c974476fc126a15ad2647", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/59b49bbe7d83f1a4668c974476fc126a15ad2647" + }, + { + "path": "resources/tanstack-ai/chat/agentic-cycle.md", + "mode": "100644", + "type": "blob", + "sha": "b4808e0cab58c896db180dc41aa96513155c5b75", + "size": 6928, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b4808e0cab58c896db180dc41aa96513155c5b75" + }, + { + "path": "resources/tanstack-ai/chat/connection-adapters.md", + "mode": "100644", + "type": "blob", + "sha": "a67e17e6f4d5b36c20caf3cd855888d60a4d30dc", + "size": 23172, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a67e17e6f4d5b36c20caf3cd855888d60a4d30dc" + }, + { + "path": "resources/tanstack-ai/chat/persistence.md", + "mode": "100644", + "type": "blob", + "sha": "985c8aa2d5ad3ecb9bb279fee94059a5d729cfb8", + "size": 5556, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/985c8aa2d5ad3ecb9bb279fee94059a5d729cfb8" + }, + { + "path": "resources/tanstack-ai/chat/streaming.md", + "mode": "100644", + "type": "blob", + "sha": "94e513c7e9c3a9682ab6ca0f2236237fc324dc92", + "size": 6995, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94e513c7e9c3a9682ab6ca0f2236237fc324dc92" + }, + { + "path": "resources/tanstack-ai/chat/structured-outputs.md", + "mode": "100644", + "type": "blob", + "sha": "425dc56abed0827dc1fbde00da139825b5961b76", + "size": 1528, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/425dc56abed0827dc1fbde00da139825b5961b76" + }, + { + "path": "resources/tanstack-ai/chat/thinking-content.md", + "mode": "100644", + "type": "blob", + "sha": "fdaa6864f186fdc139a37f007e6d3b5f79f36cf6", + "size": 6135, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fdaa6864f186fdc139a37f007e6d3b5f79f36cf6" + }, + { + "path": "resources/tanstack-ai/code-mode", + "mode": "040000", + "type": "tree", + "sha": "af8f70eac9976c0fdeb6558ddadc216a9bac4d55", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/af8f70eac9976c0fdeb6558ddadc216a9bac4d55" + }, + { + "path": "resources/tanstack-ai/code-mode/client-integration.md", + "mode": "100644", + "type": "blob", + "sha": "6e6928c4511a8405591bd49f78d5b2ba2d53f4d4", + "size": 8907, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e6928c4511a8405591bd49f78d5b2ba2d53f4d4" + }, + { + "path": "resources/tanstack-ai/code-mode/code-mode-isolates.md", + "mode": "100644", + "type": "blob", + "sha": "c7dcaec4e982aaa5f1848c35519f7d9b7fceb11b", + "size": 8691, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c7dcaec4e982aaa5f1848c35519f7d9b7fceb11b" + }, + { + "path": "resources/tanstack-ai/code-mode/code-mode-with-skills.md", + "mode": "100644", + "type": "blob", + "sha": "f5dfea65a8556ac583d0cdbd9cd30e77391854c8", + "size": 16176, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f5dfea65a8556ac583d0cdbd9cd30e77391854c8" + }, + { + "path": "resources/tanstack-ai/code-mode/code-mode.md", + "mode": "100644", + "type": "blob", + "sha": "04f4ff5f7f1a7b9688eacd07bad0806cfb1056c6", + "size": 13255, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/04f4ff5f7f1a7b9688eacd07bad0806cfb1056c6" + }, + { + "path": "resources/tanstack-ai/code-mode/lazy-tools.md", + "mode": "100644", + "type": "blob", + "sha": "52957b88d89c31fa45f95899cc02324a6ab06631", + "size": 8515, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/52957b88d89c31fa45f95899cc02324a6ab06631" + }, + { + "path": "resources/tanstack-ai/community-adapters", + "mode": "040000", + "type": "tree", + "sha": "a932248f3455c9e033b939a910155181cc357b24", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/a932248f3455c9e033b939a910155181cc357b24" + }, + { + "path": "resources/tanstack-ai/community-adapters/cencori.md", + "mode": "100644", + "type": "blob", + "sha": "ef4bda30cf0cb497a2b44d4ac7389fff49d7204c", + "size": 5921, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef4bda30cf0cb497a2b44d4ac7389fff49d7204c" + }, + { + "path": "resources/tanstack-ai/community-adapters/cloudflare.md", + "mode": "100644", + "type": "blob", + "sha": "fcb4c0aede99aaf043cfb5e688496b156b070ecc", + "size": 8851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fcb4c0aede99aaf043cfb5e688496b156b070ecc" + }, + { + "path": "resources/tanstack-ai/community-adapters/decart.md", + "mode": "100644", + "type": "blob", + "sha": "d187652941fd5d2a5c8475f5d766001e21624dd9", + "size": 6755, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d187652941fd5d2a5c8475f5d766001e21624dd9" + }, + { + "path": "resources/tanstack-ai/community-adapters/guide.md", + "mode": "100644", + "type": "blob", + "sha": "7690cb09a78fb363d21584af3570e26dfbe57179", + "size": 7144, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7690cb09a78fb363d21584af3570e26dfbe57179" + }, + { + "path": "resources/tanstack-ai/community-adapters/mynth.md", + "mode": "100644", + "type": "blob", + "sha": "5686bc87cbbd6a5904923e0f13bb7d551d8bb744", + "size": 10255, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5686bc87cbbd6a5904923e0f13bb7d551d8bb744" + }, + { + "path": "resources/tanstack-ai/community-adapters/soniox.md", + "mode": "100644", + "type": "blob", + "sha": "5305dea5f6a24bb0eea6dbcaf319912cdc6f8319", + "size": 8149, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5305dea5f6a24bb0eea6dbcaf319912cdc6f8319" + }, + { + "path": "resources/tanstack-ai/comparison", + "mode": "040000", + "type": "tree", + "sha": "f0ec8867e4d9121cc8d3b03c09a1e62053fa193c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f0ec8867e4d9121cc8d3b03c09a1e62053fa193c" + }, + { + "path": "resources/tanstack-ai/comparison/vercel-ai-sdk.md", + "mode": "100644", + "type": "blob", + "sha": "0e18fa3199d6a7406681794423c54bd20a84c6fa", + "size": 39120, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0e18fa3199d6a7406681794423c54bd20a84c6fa" + }, + { + "path": "resources/tanstack-ai/getting-started", + "mode": "040000", + "type": "tree", + "sha": "e84a7c6733a4dce32a0d4e820d945afec8e207af", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e84a7c6733a4dce32a0d4e820d945afec8e207af" + }, + { + "path": "resources/tanstack-ai/getting-started/agent-skills.md", + "mode": "100644", + "type": "blob", + "sha": "a3441133dd0ddfd1de08f37a511c78a0572458a4", + "size": 5649, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3441133dd0ddfd1de08f37a511c78a0572458a4" + }, + { + "path": "resources/tanstack-ai/getting-started/devtools.md", + "mode": "100644", + "type": "blob", + "sha": "259363da6cd3bec5cc0a4e8c80e500d8a68120d2", + "size": 6054, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/259363da6cd3bec5cc0a4e8c80e500d8a68120d2" + }, + { + "path": "resources/tanstack-ai/getting-started/overview.md", + "mode": "100644", + "type": "blob", + "sha": "ecabbac5fe3a83fe186e196a08869313516a4bed", + "size": 4809, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ecabbac5fe3a83fe186e196a08869313516a4bed" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start-angular.md", + "mode": "100644", + "type": "blob", + "sha": "46b8752b42a6692308272a7709a3dc4ad87d1d07", + "size": 6790, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/46b8752b42a6692308272a7709a3dc4ad87d1d07" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start-react-native.md", + "mode": "100644", + "type": "blob", + "sha": "a34f7952bc4d43bb4b3c4519dd69cbe7e606aaf7", + "size": 9746, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a34f7952bc4d43bb4b3c4519dd69cbe7e606aaf7" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start-server.md", + "mode": "100644", + "type": "blob", + "sha": "65291a95cf7a6803d614fa2efa50cb4673c68e8e", + "size": 5185, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/65291a95cf7a6803d614fa2efa50cb4673c68e8e" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start-svelte.md", + "mode": "100644", + "type": "blob", + "sha": "f74a9867b3cb5c6cf08e4283de07c10d92f29a52", + "size": 4960, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f74a9867b3cb5c6cf08e4283de07c10d92f29a52" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start-vue.md", + "mode": "100644", + "type": "blob", + "sha": "14afbb5ab07359ebddb4dbd68d07651c236bb6ef", + "size": 5390, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/14afbb5ab07359ebddb4dbd68d07651c236bb6ef" + }, + { + "path": "resources/tanstack-ai/getting-started/quick-start.md", + "mode": "100644", + "type": "blob", + "sha": "c61269464be28b1661b548614aaa893cf648b29e", + "size": 8058, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c61269464be28b1661b548614aaa893cf648b29e" + }, + { + "path": "resources/tanstack-ai/mcp", + "mode": "040000", + "type": "tree", + "sha": "24217af15e43949c5808ae4507994e1182570af3", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/24217af15e43949c5808ae4507994e1182570af3" + }, + { + "path": "resources/tanstack-ai/mcp/apps.md", + "mode": "100644", + "type": "blob", + "sha": "80ea623b09f7ff23ab7c311816de5f603a480bb8", + "size": 19390, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/80ea623b09f7ff23ab7c311816de5f603a480bb8" + }, + { + "path": "resources/tanstack-ai/media", + "mode": "040000", + "type": "tree", + "sha": "5d5bee0b67e2416f32013bc8c736f4b947fc1821", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/5d5bee0b67e2416f32013bc8c736f4b947fc1821" + }, + { + "path": "resources/tanstack-ai/media/audio-generation.md", + "mode": "100644", + "type": "blob", + "sha": "2fbb9765167e5b54c7271adfef56c5a32b1c6e82", + "size": 7622, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2fbb9765167e5b54c7271adfef56c5a32b1c6e82" + }, + { + "path": "resources/tanstack-ai/media/audio-recording.md", + "mode": "100644", + "type": "blob", + "sha": "ae31475da9dcbe64b1cbd5921523fe9d4b8b8a26", + "size": 10914, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ae31475da9dcbe64b1cbd5921523fe9d4b8b8a26" + }, + { + "path": "resources/tanstack-ai/media/generation-hooks.md", + "mode": "100644", + "type": "blob", + "sha": "273ea72ab29c9542a4974bee5430029d51127251", + "size": 15372, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/273ea72ab29c9542a4974bee5430029d51127251" + }, + { + "path": "resources/tanstack-ai/media/generations.md", + "mode": "100644", + "type": "blob", + "sha": "33719ffa29e6126ccef6ae79a6ac5d785c198d61", + "size": 9647, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/33719ffa29e6126ccef6ae79a6ac5d785c198d61" + }, + { + "path": "resources/tanstack-ai/media/image-generation.md", + "mode": "100644", + "type": "blob", + "sha": "b25a42580e15a5bb8148590220a8d5c75745f043", + "size": 24165, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b25a42580e15a5bb8148590220a8d5c75745f043" + }, + { + "path": "resources/tanstack-ai/media/realtime-chat.md", + "mode": "100644", + "type": "blob", + "sha": "c800d57d630a3286f8a5126687debc0d28dc8421", + "size": 17087, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c800d57d630a3286f8a5126687debc0d28dc8421" + }, + { + "path": "resources/tanstack-ai/media/text-to-speech.md", + "mode": "100644", + "type": "blob", + "sha": "34ed4ff33752c7818f343b2d04586b221285825a", + "size": 16709, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/34ed4ff33752c7818f343b2d04586b221285825a" + }, + { + "path": "resources/tanstack-ai/media/transcription.md", + "mode": "100644", + "type": "blob", + "sha": "61f8b4d4020e4b5a37c21ac9095bbb87d362a5d3", + "size": 17087, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/61f8b4d4020e4b5a37c21ac9095bbb87d362a5d3" + }, + { + "path": "resources/tanstack-ai/media/video-generation.md", + "mode": "100644", + "type": "blob", + "sha": "ebf9b0606ac1f5da5e3c22f0daa8d35545fcf66a", + "size": 28299, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebf9b0606ac1f5da5e3c22f0daa8d35545fcf66a" + }, + { + "path": "resources/tanstack-ai/migration", + "mode": "040000", + "type": "tree", + "sha": "b4cad93ec7d969815f05b5bd56951304d5588e3d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b4cad93ec7d969815f05b5bd56951304d5588e3d" + }, + { + "path": "resources/tanstack-ai/migration/ag-ui-compliance.md", + "mode": "100644", + "type": "blob", + "sha": "7a555f5d35f2687cb1825dd10d898f29324f35ae", + "size": 18429, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a555f5d35f2687cb1825dd10d898f29324f35ae" + }, + { + "path": "resources/tanstack-ai/migration/migration-from-vercel-ai.md", + "mode": "100644", + "type": "blob", + "sha": "680473492a6524850c1552891336f04f449f3c2f", + "size": 53424, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/680473492a6524850c1552891336f04f449f3c2f" + }, + { + "path": "resources/tanstack-ai/migration/migration.md", + "mode": "100644", + "type": "blob", + "sha": "85b52b21768b72738e529a6305932294ce0cbb11", + "size": 14005, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/85b52b21768b72738e529a6305932294ce0cbb11" + }, + { + "path": "resources/tanstack-ai/migration/sampling-options-to-model-options.md", + "mode": "100644", + "type": "blob", + "sha": "113d558f161cd873e7f56acc9d8d9b8709f99a65", + "size": 8732, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/113d558f161cd873e7f56acc9d8d9b8709f99a65" + }, + { + "path": "resources/tanstack-ai/reference", + "mode": "040000", + "type": "tree", + "sha": "313a3237195cfdae6b65a91c60d3c21048302a31", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/313a3237195cfdae6b65a91c60d3c21048302a31" + }, + { + "path": "resources/tanstack-ai/reference/classes", + "mode": "040000", + "type": "tree", + "sha": "c45f60e84195e1e66da5a986f0122a122ed9b23f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c45f60e84195e1e66da5a986f0122a122ed9b23f" + }, + { + "path": "resources/tanstack-ai/reference/classes/BatchStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "e61c4bdae98cd5b2b04763d0a79c88d268f606c3", + "size": 1713, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e61c4bdae98cd5b2b04763d0a79c88d268f606c3" + }, + { + "path": "resources/tanstack-ai/reference/classes/CompositeStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "49e4749ca885c8fef9f54ba7398d5da4dc5708d4", + "size": 1848, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/49e4749ca885c8fef9f54ba7398d5da4dc5708d4" + }, + { + "path": "resources/tanstack-ai/reference/classes/ConsoleLogger.md", + "mode": "100644", + "type": "blob", + "sha": "f3c342811fd18fb4c23f73e2557aaf2589003f42", + "size": 2881, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f3c342811fd18fb4c23f73e2557aaf2589003f42" + }, + { + "path": "resources/tanstack-ai/reference/classes/ImmediateStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "fad0b0d6e4862eb54a3da894157eeb75f21df0a8", + "size": 1069, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fad0b0d6e4862eb54a3da894157eeb75f21df0a8" + }, + { + "path": "resources/tanstack-ai/reference/classes/MCPDuplicateToolNameError.md", + "mode": "100644", + "type": "blob", + "sha": "079717efcb90d05f52ce8131ce3d39393f19af87", + "size": 915, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/079717efcb90d05f52ce8131ce3d39393f19af87" + }, + { + "path": "resources/tanstack-ai/reference/classes/PartialJSONParser.md", + "mode": "100644", + "type": "blob", + "sha": "fddeb36dad7c741a9564ec2738900c8996b0394d", + "size": 1124, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fddeb36dad7c741a9564ec2738900c8996b0394d" + }, + { + "path": "resources/tanstack-ai/reference/classes/PunctuationStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "bc6b1bfb26128297fd3779d09651e981fc956265", + "size": 1144, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bc6b1bfb26128297fd3779d09651e981fc956265" + }, + { + "path": "resources/tanstack-ai/reference/classes/StandardSchemaValidationError.md", + "mode": "100644", + "type": "blob", + "sha": "ebb8f5ec5e1de90ea02ad31c7b5238738486133d", + "size": 1567, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebb8f5ec5e1de90ea02ad31c7b5238738486133d" + }, + { + "path": "resources/tanstack-ai/reference/classes/StreamProcessor.md", + "mode": "100644", + "type": "blob", + "sha": "4460b1469910e7385049b50503c6d127657498a6", + "size": 10462, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4460b1469910e7385049b50503c6d127657498a6" + }, + { + "path": "resources/tanstack-ai/reference/classes/ToolCallManager.md", + "mode": "100644", + "type": "blob", + "sha": "c69eabef2238ec29f63cca499ab4286684e9a83d", + "size": 5493, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c69eabef2238ec29f63cca499ab4286684e9a83d" + }, + { + "path": "resources/tanstack-ai/reference/classes/WordBoundaryStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "9f63a821e2c031c0ca2019876edbb17582f317c8", + "size": 1135, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9f63a821e2c031c0ca2019876edbb17582f317c8" + }, + { + "path": "resources/tanstack-ai/reference/functions", + "mode": "040000", + "type": "tree", + "sha": "2dddb0e372179162c04ac12a25b59975e8d5072d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2dddb0e372179162c04ac12a25b59975e8d5072d" + }, + { + "path": "resources/tanstack-ai/reference/functions/brandProviderTool.md", + "mode": "100644", + "type": "blob", + "sha": "2d8ed3f04440ee35b341f1f65dea0de362f6472e", + "size": 832, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2d8ed3f04440ee35b341f1f65dea0de362f6472e" + }, + { + "path": "resources/tanstack-ai/reference/functions/buildBaseUsage.md", + "mode": "100644", + "type": "blob", + "sha": "9bc1e6f46c71345c64e6249f4aa55b620d141b23", + "size": 943, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9bc1e6f46c71345c64e6249f4aa55b620d141b23" + }, + { + "path": "resources/tanstack-ai/reference/functions/chat.md", + "mode": "100644", + "type": "blob", + "sha": "6cdf47356594bf5ac3ec74c18eb208ca97fcdbe6", + "size": 3067, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6cdf47356594bf5ac3ec74c18eb208ca97fcdbe6" + }, + { + "path": "resources/tanstack-ai/reference/functions/chatParamsFromRequest.md", + "mode": "100644", + "type": "blob", + "sha": "f2b73ff83c95e8dff0b79bf1b17177bda9c2c015", + "size": 2191, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f2b73ff83c95e8dff0b79bf1b17177bda9c2c015" + }, + { + "path": "resources/tanstack-ai/reference/functions/chatParamsFromRequestBody.md", + "mode": "100644", + "type": "blob", + "sha": "0d72db9e733f7cbb12b0adc269bf18d63f1a206a", + "size": 1752, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0d72db9e733f7cbb12b0adc269bf18d63f1a206a" + }, + { + "path": "resources/tanstack-ai/reference/functions/combineStrategies.md", + "mode": "100644", + "type": "blob", + "sha": "9cf8ab0e741577604503bd50c70fc6532d9c5493", + "size": 976, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9cf8ab0e741577604503bd50c70fc6532d9c5493" + }, + { + "path": "resources/tanstack-ai/reference/functions/convertMessagesToModelMessages.md", + "mode": "100644", + "type": "blob", + "sha": "480106c68ce48449890293099b40444f62f17e76", + "size": 991, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/480106c68ce48449890293099b40444f62f17e76" + }, + { + "path": "resources/tanstack-ai/reference/functions/convertSchemaToJsonSchema.md", + "mode": "100644", + "type": "blob", + "sha": "081cc7f1139c57b5fe6e8fbb3f6feba19eeffedf", + "size": 2327, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/081cc7f1139c57b5fe6e8fbb3f6feba19eeffedf" + }, + { + "path": "resources/tanstack-ai/reference/functions/createAudioOptions.md", + "mode": "100644", + "type": "blob", + "sha": "c116e6724175df992f0be49b992bb5f17089dbc3", + "size": 786, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c116e6724175df992f0be49b992bb5f17089dbc3" + }, + { + "path": "resources/tanstack-ai/reference/functions/createCapability.md", + "mode": "100644", + "type": "blob", + "sha": "892139f35259a91f846d0ee4e276ef0f0a5266b3", + "size": 1833, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/892139f35259a91f846d0ee4e276ef0f0a5266b3" + }, + { + "path": "resources/tanstack-ai/reference/functions/createChatMiddleware.md", + "mode": "100644", + "type": "blob", + "sha": "045ed5334f938bcb3c50df5499ad2ca359977fb7", + "size": 462, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/045ed5334f938bcb3c50df5499ad2ca359977fb7" + }, + { + "path": "resources/tanstack-ai/reference/functions/createChatOptions.md", + "mode": "100644", + "type": "blob", + "sha": "6e018806684cd7e70963184c75d9d27668c9604a", + "size": 2020, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6e018806684cd7e70963184c75d9d27668c9604a" + }, + { + "path": "resources/tanstack-ai/reference/functions/createFrozenRegistry.md", + "mode": "100644", + "type": "blob", + "sha": "d2014639a1f37ad51b44663a757964c81ce54bf0", + "size": 809, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d2014639a1f37ad51b44663a757964c81ce54bf0" + }, + { + "path": "resources/tanstack-ai/reference/functions/createImageOptions.md", + "mode": "100644", + "type": "blob", + "sha": "19241295e097d4cb388e2bf70766ced4ed087e86", + "size": 848, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/19241295e097d4cb388e2bf70766ced4ed087e86" + }, + { + "path": "resources/tanstack-ai/reference/functions/createModel.md", + "mode": "100644", + "type": "blob", + "sha": "faadcf00c04b2ab81ee4dab52c3cb069b45650c6", + "size": 3862, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/faadcf00c04b2ab81ee4dab52c3cb069b45650c6" + }, + { + "path": "resources/tanstack-ai/reference/functions/createReplayStream.md", + "mode": "100644", + "type": "blob", + "sha": "57d0bf7465c1e10a00f848c82c990c90811a3c0c", + "size": 542, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/57d0bf7465c1e10a00f848c82c990c90811a3c0c" + }, + { + "path": "resources/tanstack-ai/reference/functions/createSpeechOptions.md", + "mode": "100644", + "type": "blob", + "sha": "fe67625cdc8e4aa1dad1f731912e8960606dd97e", + "size": 781, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe67625cdc8e4aa1dad1f731912e8960606dd97e" + }, + { + "path": "resources/tanstack-ai/reference/functions/createSummarizeOptions.md", + "mode": "100644", + "type": "blob", + "sha": "0bf5114dceeaf6fbc34a95d07425ac8c6b23e95c", + "size": 782, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0bf5114dceeaf6fbc34a95d07425ac8c6b23e95c" + }, + { + "path": "resources/tanstack-ai/reference/functions/createToolRegistry.md", + "mode": "100644", + "type": "blob", + "sha": "43f7e2bb283ee12d119c5aac6d5d491ab273f85d", + "size": 1046, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/43f7e2bb283ee12d119c5aac6d5d491ab273f85d" + }, + { + "path": "resources/tanstack-ai/reference/functions/createTranscriptionOptions.md", + "mode": "100644", + "type": "blob", + "sha": "82302b9eb2448b0398b84d8aeb94e68a52617986", + "size": 890, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/82302b9eb2448b0398b84d8aeb94e68a52617986" + }, + { + "path": "resources/tanstack-ai/reference/functions/createVideoOptions.md", + "mode": "100644", + "type": "blob", + "sha": "75676fbe2a8829a9cfea9e48c7487dc5d74af230", + "size": 874, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/75676fbe2a8829a9cfea9e48c7487dc5d74af230" + }, + { + "path": "resources/tanstack-ai/reference/functions/defineChatMiddleware.md", + "mode": "100644", + "type": "blob", + "sha": "fc7bacf48978cb52a793fc52208e7057e02c154e", + "size": 1157, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fc7bacf48978cb52a793fc52208e7057e02c154e" + }, + { + "path": "resources/tanstack-ai/reference/functions/detectImageMimeType.md", + "mode": "100644", + "type": "blob", + "sha": "92e1e3a388705ae5b0cd285d06629ea27e299ac7", + "size": 956, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/92e1e3a388705ae5b0cd285d06629ea27e299ac7" + }, + { + "path": "resources/tanstack-ai/reference/functions/extendAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "415d0ca94794b863b26b08666bf74ce6c12a1f6d", + "size": 1989, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/415d0ca94794b863b26b08666bf74ce6c12a1f6d" + }, + { + "path": "resources/tanstack-ai/reference/functions/firstSentence.md", + "mode": "100644", + "type": "blob", + "sha": "4c91f5cf0294eef0b85accfe829e8c2b9e5f0fce", + "size": 540, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4c91f5cf0294eef0b85accfe829e8c2b9e5f0fce" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateAudio.md", + "mode": "100644", + "type": "blob", + "sha": "2bb158a8d46aad6d15c5ec0b834b9da99a6a14b1", + "size": 1124, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2bb158a8d46aad6d15c5ec0b834b9da99a6a14b1" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateImage.md", + "mode": "100644", + "type": "blob", + "sha": "2dbd0e8c86ec38dee6b11cfcbae4b418bb36f97e", + "size": 1615, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2dbd0e8c86ec38dee6b11cfcbae4b418bb36f97e" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateMessageId.md", + "mode": "100644", + "type": "blob", + "sha": "0e7c16bb1e954292f948f149f25015bbd8d61329", + "size": 343, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0e7c16bb1e954292f948f149f25015bbd8d61329" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateSpeech.md", + "mode": "100644", + "type": "blob", + "sha": "c7ac72cc9a3705c86160d8168a7d4a5aefe6c4e7", + "size": 1258, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c7ac72cc9a3705c86160d8168a7d4a5aefe6c4e7" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateTranscription.md", + "mode": "100644", + "type": "blob", + "sha": "f07312b4d96eb779394889564378da42e481b6c4", + "size": 1639, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f07312b4d96eb779394889564378da42e481b6c4" + }, + { + "path": "resources/tanstack-ai/reference/functions/generateVideo.md", + "mode": "100644", + "type": "blob", + "sha": "6a81df133c39b5746f9cfdda3e0c9f45468f7f2f", + "size": 2090, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6a81df133c39b5746f9cfdda3e0c9f45468f7f2f" + }, + { + "path": "resources/tanstack-ai/reference/functions/getVideoJobStatus.md", + "mode": "100644", + "type": "blob", + "sha": "7a54efdc0ae5fe4ee79a576b422cde0d42c5fbc3", + "size": 1712, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a54efdc0ae5fe4ee79a576b422cde0d42c5fbc3" + }, + { + "path": "resources/tanstack-ai/reference/functions/isContentPart.md", + "mode": "100644", + "type": "blob", + "sha": "c13d968151133e92ae45df446682c698aef91d22", + "size": 545, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c13d968151133e92ae45df446682c698aef91d22" + }, + { + "path": "resources/tanstack-ai/reference/functions/isContentPartArray.md", + "mode": "100644", + "type": "blob", + "sha": "288bff2ade36d62a0750f76efb84967ddc4b215a", + "size": 623, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/288bff2ade36d62a0750f76efb84967ddc4b215a" + }, + { + "path": "resources/tanstack-ai/reference/functions/isStandardSchema.md", + "mode": "100644", + "type": "blob", + "sha": "3e8860b4680ba9c9f99bd0c41890276c94031026", + "size": 626, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3e8860b4680ba9c9f99bd0c41890276c94031026" + }, + { + "path": "resources/tanstack-ai/reference/functions/maxIterations.md", + "mode": "100644", + "type": "blob", + "sha": "4348dd42e0b5584ad99bad0ee1abb9876e8cf7f0", + "size": 783, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4348dd42e0b5584ad99bad0ee1abb9876e8cf7f0" + }, + { + "path": "resources/tanstack-ai/reference/functions/mergeAgentTools.md", + "mode": "100644", + "type": "blob", + "sha": "6796c281b827437e4ed22778b2b93d0aebf2dfd8", + "size": 1767, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6796c281b827437e4ed22778b2b93d0aebf2dfd8" + }, + { + "path": "resources/tanstack-ai/reference/functions/modelMessageToUIMessage.md", + "mode": "100644", + "type": "blob", + "sha": "6d0755a9d93a4789a2873f108e3ca203a56fd8bb", + "size": 821, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6d0755a9d93a4789a2873f108e3ca203a56fd8bb" + }, + { + "path": "resources/tanstack-ai/reference/functions/modelMessagesToUIMessages.md", + "mode": "100644", + "type": "blob", + "sha": "33ccb4f1740d08b49d144bd4029f808f6b2f4462", + "size": 839, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/33ccb4f1740d08b49d144bd4029f808f6b2f4462" + }, + { + "path": "resources/tanstack-ai/reference/functions/normalizeSystemPrompts.md", + "mode": "100644", + "type": "blob", + "sha": "6d339c4197b5d49cb652d7d294d78c323719a839", + "size": 1218, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6d339c4197b5d49cb652d7d294d78c323719a839" + }, + { + "path": "resources/tanstack-ai/reference/functions/normalizeToUIMessage.md", + "mode": "100644", + "type": "blob", + "sha": "2d99ff81926b458530b1ea1d81fc07f9ed5a73cd", + "size": 927, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2d99ff81926b458530b1ea1d81fc07f9ed5a73cd" + }, + { + "path": "resources/tanstack-ai/reference/functions/normalizeToolResult.md", + "mode": "100644", + "type": "blob", + "sha": "0260257808254e4dfc7267d1fc340b8fdc9cd9f4", + "size": 627, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0260257808254e4dfc7267d1fc340b8fdc9cd9f4" + }, + { + "path": "resources/tanstack-ai/reference/functions/parsePartialJSON.md", + "mode": "100644", + "type": "blob", + "sha": "cfef207733250943397d67494fde284bcabc027c", + "size": 518, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cfef207733250943397d67494fde284bcabc027c" + }, + { + "path": "resources/tanstack-ai/reference/functions/parseWithStandardSchema.md", + "mode": "100644", + "type": "blob", + "sha": "152910f60747d2909aaf4e9a2d6ec2de7710cb13", + "size": 853, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/152910f60747d2909aaf4e9a2d6ec2de7710cb13" + }, + { + "path": "resources/tanstack-ai/reference/functions/realtimeToken.md", + "mode": "100644", + "type": "blob", + "sha": "cc323fc67cd43ad995acba02142328dd4d8a4218", + "size": 1078, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cc323fc67cd43ad995acba02142328dd4d8a4218" + }, + { + "path": "resources/tanstack-ai/reference/functions/renderLazyCatalogEntry.md", + "mode": "100644", + "type": "blob", + "sha": "eb4dda57c5572038a3736bc7e358a962c73e1e95", + "size": 832, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eb4dda57c5572038a3736bc7e358a962c73e1e95" + }, + { + "path": "resources/tanstack-ai/reference/functions/resolveMediaPrompt.md", + "mode": "100644", + "type": "blob", + "sha": "b28312eeb175ef6bd75f5fb23db3a32a157b571a", + "size": 739, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b28312eeb175ef6bd75f5fb23db3a32a157b571a" + }, + { + "path": "resources/tanstack-ai/reference/functions/streamToText.md", + "mode": "100644", + "type": "blob", + "sha": "dab52a6a490d2ee121b69f5a412cf87e9d090ab1", + "size": 961, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dab52a6a490d2ee121b69f5a412cf87e9d090ab1" + }, + { + "path": "resources/tanstack-ai/reference/functions/summarize.md", + "mode": "100644", + "type": "blob", + "sha": "87fdda48912998ddcf5df58028a77e38ff692844", + "size": 1570, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/87fdda48912998ddcf5df58028a77e38ff692844" + }, + { + "path": "resources/tanstack-ai/reference/functions/toHttpResponse.md", + "mode": "100644", + "type": "blob", + "sha": "44c713caf3053aeac78c5500a3e87a21e6577291", + "size": 1102, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/44c713caf3053aeac78c5500a3e87a21e6577291" + }, + { + "path": "resources/tanstack-ai/reference/functions/toHttpStream.md", + "mode": "100644", + "type": "blob", + "sha": "f2f343c2aa49a72292aef593af636e06629d7123", + "size": 1335, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f2f343c2aa49a72292aef593af636e06629d7123" + }, + { + "path": "resources/tanstack-ai/reference/functions/toServerSentEventsResponse.md", + "mode": "100644", + "type": "blob", + "sha": "482295fdba0aa700c3dc78c09d2ef99746cca691", + "size": 1120, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/482295fdba0aa700c3dc78c09d2ef99746cca691" + }, + { + "path": "resources/tanstack-ai/reference/functions/toServerSentEventsStream.md", + "mode": "100644", + "type": "blob", + "sha": "e2d5f559cb1f13fe2a08708fd867119cb13b6176", + "size": 1031, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e2d5f559cb1f13fe2a08708fd867119cb13b6176" + }, + { + "path": "resources/tanstack-ai/reference/functions/toolDefinition.md", + "mode": "100644", + "type": "blob", + "sha": "66ce2837e8dfd026ce4d1d283547e3dbd61609f2", + "size": 2498, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/66ce2837e8dfd026ce4d1d283547e3dbd61609f2" + }, + { + "path": "resources/tanstack-ai/reference/functions/uiMessageToModelMessages.md", + "mode": "100644", + "type": "blob", + "sha": "08dcad58f231e5aad88506e41e8c2e8237351598", + "size": 1360, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/08dcad58f231e5aad88506e41e8c2e8237351598" + }, + { + "path": "resources/tanstack-ai/reference/functions/uiMessagesToWire.md", + "mode": "100644", + "type": "blob", + "sha": "5ffc9d0417b511aeb27d831f1accccf4830bc3bf", + "size": 871, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5ffc9d0417b511aeb27d831f1accccf4830bc3bf" + }, + { + "path": "resources/tanstack-ai/reference/functions/untilFinishReason.md", + "mode": "100644", + "type": "blob", + "sha": "05fd875befcd95f3050289b99313cb389ea1d254", + "size": 838, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/05fd875befcd95f3050289b99313cb389ea1d254" + }, + { + "path": "resources/tanstack-ai/reference/index.md", + "mode": "100644", + "type": "blob", + "sha": "5abd53b5e75572dfdc72b621bae49fd8ab242534", + "size": 14856, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5abd53b5e75572dfdc72b621bae49fd8ab242534" + }, + { + "path": "resources/tanstack-ai/reference/interfaces", + "mode": "040000", + "type": "tree", + "sha": "54306bd2dcf9be303cb7b2717bcf64f99624c0bc", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/54306bd2dcf9be303cb7b2717bcf64f99624c0bc" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AbortInfo.md", + "mode": "100644", + "type": "blob", + "sha": "e190bbb415293ddf962d9d154cc5cf7dc411b15f", + "size": 794, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e190bbb415293ddf962d9d154cc5cf7dc411b15f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AfterToolCallInfo.md", + "mode": "100644", + "type": "blob", + "sha": "54871e27dd723af8f9838c46695fc9d6f6c27d00", + "size": 2340, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/54871e27dd723af8f9838c46695fc9d6f6c27d00" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AgentLoopState.md", + "mode": "100644", + "type": "blob", + "sha": "02dadc887ef257dfce9c2be1ff41b41f8228f18c", + "size": 988, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/02dadc887ef257dfce9c2be1ff41b41f8228f18c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ApprovalRequestedEvent.md", + "mode": "100644", + "type": "blob", + "sha": "27a1af40e89e58940bae083e3402219e61b26af5", + "size": 1684, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/27a1af40e89e58940bae083e3402219e61b26af5" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AudioAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "e66879100525af110d7c0232fcd0f5cceca2468e", + "size": 2446, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e66879100525af110d7c0232fcd0f5cceca2468e" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AudioGenerationOptions.md", + "mode": "100644", + "type": "blob", + "sha": "f5a170c76292c934c5cd5a1bb592422c342847fc", + "size": 1630, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f5a170c76292c934c5cd5a1bb592422c342847fc" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AudioGenerationResult.md", + "mode": "100644", + "type": "blob", + "sha": "8f5dd2da17b0848df1d750b9b64d65050b66652a", + "size": 1059, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f5dd2da17b0848df1d750b9b64d65050b66652a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AudioPart.md", + "mode": "100644", + "type": "blob", + "sha": "1ba3d71cf61b0c054862b4f368b776e9cf39397e", + "size": 930, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1ba3d71cf61b0c054862b4f368b776e9cf39397e" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/AudioVisualization.md", + "mode": "100644", + "type": "blob", + "sha": "0286b45dfbe9a4ffaccd184fbe3abcbdfade99d8", + "size": 3161, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0286b45dfbe9a4ffaccd184fbe3abcbdfade99d8" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/BaseAGUIEvent.md", + "mode": "100644", + "type": "blob", + "sha": "48f8562a888f0475d958894f61dd34795e1f42c3", + "size": 660, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/48f8562a888f0475d958894f61dd34795e1f42c3" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/BaseUsageInput.md", + "mode": "100644", + "type": "blob", + "sha": "f16c8d1e7edbdd2712210221961a75a999d2a53b", + "size": 1004, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f16c8d1e7edbdd2712210221961a75a999d2a53b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/CapabilityContext.md", + "mode": "100644", + "type": "blob", + "sha": "76d1834fa9daa3ef72308f1c80a3c2ea372da77c", + "size": 728, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/76d1834fa9daa3ef72308f1c80a3c2ea372da77c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/CapabilityGetter.md", + "mode": "100644", + "type": "blob", + "sha": "dd1ca98016d7552f2ae9f6bb23350b03c92aa6cd", + "size": 1314, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dd1ca98016d7552f2ae9f6bb23350b03c92aa6cd" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChatMCPOptions.md", + "mode": "100644", + "type": "blob", + "sha": "c3c0287377302e4ac1264bf35bb530dc8d5b228c", + "size": 1989, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c3c0287377302e4ac1264bf35bb530dc8d5b228c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChatMiddleware.md", + "mode": "100644", + "type": "blob", + "sha": "253b7832268b86f343c955099cfca701b7bfa465", + "size": 11948, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/253b7832268b86f343c955099cfca701b7bfa465" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChatMiddlewareConfig.md", + "mode": "100644", + "type": "blob", + "sha": "a5f0e1c5c7783a7eed483022567dc3dcfcbef2f9", + "size": 1738, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a5f0e1c5c7783a7eed483022567dc3dcfcbef2f9" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChatMiddlewareContext.md", + "mode": "100644", + "type": "blob", + "sha": "1559242696ff84088d9ce4186ed88dd21967fd76", + "size": 10847, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1559242696ff84088d9ce4186ed88dd21967fd76" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChunkRecording.md", + "mode": "100644", + "type": "blob", + "sha": "45df932cf6089ecb01b7541f2bc16fd39d25d442", + "size": 1698, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/45df932cf6089ecb01b7541f2bc16fd39d25d442" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ChunkStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "3305e5995653cc8b3c6b1d3866f24ceda659d3fe", + "size": 1071, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3305e5995653cc8b3c6b1d3866f24ceda659d3fe" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ClientTool.md", + "mode": "100644", + "type": "blob", + "sha": "a4f2494f318c3dbfe1b71671fee0a170c9d434ae", + "size": 2868, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a4f2494f318c3dbfe1b71671fee0a170c9d434ae" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ContentPartDataSource.md", + "mode": "100644", + "type": "blob", + "sha": "607e1fc12d2c03f9a0cd0df984ea26c34ea1d1b2", + "size": 1045, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/607e1fc12d2c03f9a0cd0df984ea26c34ea1d1b2" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ContentPartUrlSource.md", + "mode": "100644", + "type": "blob", + "sha": "f4e6d37f8d7d9750c4870c0956a5f9ff77da56ad", + "size": 1010, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f4e6d37f8d7d9750c4870c0956a5f9ff77da56ad" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/CustomEvent.md", + "mode": "100644", + "type": "blob", + "sha": "c47a2ba3535316cfe38389f1cfc15bfb4d833334", + "size": 890, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c47a2ba3535316cfe38389f1cfc15bfb4d833334" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/DebugCategories.md", + "mode": "100644", + "type": "blob", + "sha": "56b7a16a7e72d6651f2182967f77ddaf5191dd57", + "size": 2919, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/56b7a16a7e72d6651f2182967f77ddaf5191dd57" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/DebugConfig.md", + "mode": "100644", + "type": "blob", + "sha": "e4d40ae04a92916dd0ee71d262ff5bb75b7dd6be", + "size": 3926, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4d40ae04a92916dd0ee71d262ff5bb75b7dd6be" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/DefaultMessageMetadataByModality.md", + "mode": "100644", + "type": "blob", + "sha": "420906b801673d48f1ea553281ce82dcfcb7207d", + "size": 1173, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/420906b801673d48f1ea553281ce82dcfcb7207d" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/DocumentPart.md", + "mode": "100644", + "type": "blob", + "sha": "eff9751ebaf2bb5fdfbab40609b21dfca67c94e8", + "size": 992, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eff9751ebaf2bb5fdfbab40609b21dfca67c94e8" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ErrorInfo.md", + "mode": "100644", + "type": "blob", + "sha": "5969011c6bb8a024b7351977d9d1dc1310596bd9", + "size": 779, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5969011c6bb8a024b7351977d9d1dc1310596bd9" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ExtendedModelDef.md", + "mode": "100644", + "type": "blob", + "sha": "e591402dcdbeea055a7b76797b54115e723ba055", + "size": 2177, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e591402dcdbeea055a7b76797b54115e723ba055" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/FinishInfo.md", + "mode": "100644", + "type": "blob", + "sha": "da17c7c2ccf61b81b45d2613066d64c994646b23", + "size": 1402, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/da17c7c2ccf61b81b45d2613066d64c994646b23" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationAbortInfo.md", + "mode": "100644", + "type": "blob", + "sha": "989a3e25aac0037d4951597a4d547c621557e6e0", + "size": 864, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/989a3e25aac0037d4951597a4d547c621557e6e0" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationErrorInfo.md", + "mode": "100644", + "type": "blob", + "sha": "74f816dfbb29d9236358543a4e3edf7afedc49e1", + "size": 861, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/74f816dfbb29d9236358543a4e3edf7afedc49e1" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationFinishInfo.md", + "mode": "100644", + "type": "blob", + "sha": "204e70b0592d5552b99a7ce113aa3fcc9d1ab9b0", + "size": 903, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/204e70b0592d5552b99a7ce113aa3fcc9d1ab9b0" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationMiddleware.md", + "mode": "100644", + "type": "blob", + "sha": "c7d10650845d3f42b5f10aecae548e3309406082", + "size": 4179, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c7d10650845d3f42b5f10aecae548e3309406082" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationMiddlewareContext.md", + "mode": "100644", + "type": "blob", + "sha": "95da9e63cb7750d5969747be96a056fd531e7fcf", + "size": 3202, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/95da9e63cb7750d5969747be96a056fd531e7fcf" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/GenerationUsageInfo.md", + "mode": "100644", + "type": "blob", + "sha": "9fd477dab655858c5a2cb9a50d6b601712f5f916", + "size": 476, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9fd477dab655858c5a2cb9a50d6b601712f5f916" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ImageAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "95e8dad18f0f8881d2b70e52a04c893337f46392", + "size": 3614, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/95e8dad18f0f8881d2b70e52a04c893337f46392" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ImageGenerationOptions.md", + "mode": "100644", + "type": "blob", + "sha": "4014a717c2c7c0f8c550ed8092852e9dd1b6a017", + "size": 2372, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4014a717c2c7c0f8c550ed8092852e9dd1b6a017" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ImageGenerationResult.md", + "mode": "100644", + "type": "blob", + "sha": "1e6668cb815da653e2fea654b33cdc678bf64b3c", + "size": 1069, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1e6668cb815da653e2fea654b33cdc678bf64b3c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ImagePart.md", + "mode": "100644", + "type": "blob", + "sha": "ebe1673a28de8541d940bee362916d689b3c20a7", + "size": 981, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebe1673a28de8541d940bee362916d689b3c20a7" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/InternalToolCallState.md", + "mode": "100644", + "type": "blob", + "sha": "94d218cad547139a48c27a73dc1a8fe092ca188e", + "size": 2027, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94d218cad547139a48c27a73dc1a8fe092ca188e" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/IterationInfo.md", + "mode": "100644", + "type": "blob", + "sha": "9d2cf767adb163489b989c69547e127cbcd69b9d", + "size": 851, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9d2cf767adb163489b989c69547e127cbcd69b9d" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/JSONParser.md", + "mode": "100644", + "type": "blob", + "sha": "d85be3f70780a23dcceffcd4970b2fe4ba51fd00", + "size": 734, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d85be3f70780a23dcceffcd4970b2fe4ba51fd00" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/JSONSchema.md", + "mode": "100644", + "type": "blob", + "sha": "4bd157b583811bfb0b1dca89626522585d789fce", + "size": 7020, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4bd157b583811bfb0b1dca89626522585d789fce" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/LazyToolsConfig.md", + "mode": "100644", + "type": "blob", + "sha": "b109765e974d40386025e73c5320205f680eadb6", + "size": 937, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b109765e974d40386025e73c5320205f680eadb6" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/Logger.md", + "mode": "100644", + "type": "blob", + "sha": "5a93aedb984ac58d28808c9eeb03138ac8b03b41", + "size": 3423, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5a93aedb984ac58d28808c9eeb03138ac8b03b41" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/MCPToolSource.md", + "mode": "100644", + "type": "blob", + "sha": "b894a81d732426de8f489efde43ee4bfc61cd4a4", + "size": 1888, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b894a81d732426de8f489efde43ee4bfc61cd4a4" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/MediaInputMetadata.md", + "mode": "100644", + "type": "blob", + "sha": "d4c5de262b25e896714ed71100a59d4f3b8cece8", + "size": 1220, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d4c5de262b25e896714ed71100a59d4f3b8cece8" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/MessagesSnapshotEvent.md", + "mode": "100644", + "type": "blob", + "sha": "590e13fba116246118759533d91871f944ce3d9f", + "size": 939, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/590e13fba116246118759533d91871f944ce3d9f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ModelCapabilities.md", + "mode": "100644", + "type": "blob", + "sha": "633df6a635e51119d8640865b0d61ab5b35d5f2f", + "size": 1491, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/633df6a635e51119d8640865b0d61ab5b35d5f2f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ModelMessage.md", + "mode": "100644", + "type": "blob", + "sha": "d688e07377b44815fba7a82c1a0234cc58065f9b", + "size": 1562, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d688e07377b44815fba7a82c1a0234cc58065f9b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/NormalizedSystemPrompt.md", + "mode": "100644", + "type": "blob", + "sha": "ebf4916d48f080b68aa9ef4b2c0e70ed2ca432db", + "size": 931, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebf4916d48f080b68aa9ef4b2c0e70ed2ca432db" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ProcessorResult.md", + "mode": "100644", + "type": "blob", + "sha": "a48bc8f6b4d8e3b678605bf9c63c02467d090ea2", + "size": 1174, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a48bc8f6b4d8e3b678605bf9c63c02467d090ea2" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ProcessorState.md", + "mode": "100644", + "type": "blob", + "sha": "ad055a5aaa42526c77cbc886d62b7cc86d1eb738", + "size": 1576, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad055a5aaa42526c77cbc886d62b7cc86d1eb738" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ProviderTool.md", + "mode": "100644", + "type": "blob", + "sha": "5393a665af2a7dac2b4e6599553231c988f2fefd", + "size": 6973, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5393a665af2a7dac2b4e6599553231c988f2fefd" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "b24728baf21d0275af2044d3e5157aef0147badb", + "size": 1526, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b24728baf21d0275af2044d3e5157aef0147badb" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeAudioPart.md", + "mode": "100644", + "type": "blob", + "sha": "ba763a1d0a3170ba6b3bfc1ab15cd078db160f4f", + "size": 1134, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ba763a1d0a3170ba6b3bfc1ab15cd078db160f4f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeConnection.md", + "mode": "100644", + "type": "blob", + "sha": "abdec035300248425f839ed2d015a6c65f086b44", + "size": 3619, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/abdec035300248425f839ed2d015a6c65f086b44" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeError.md", + "mode": "100644", + "type": "blob", + "sha": "65cd43abfd6eecb9871c85a747ee55135e12c1ba", + "size": 861, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/65cd43abfd6eecb9871c85a747ee55135e12c1ba" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeEventPayloads.md", + "mode": "100644", + "type": "blob", + "sha": "338862d965fdc70a5ac0b986ac4167614ac8873f", + "size": 2379, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/338862d965fdc70a5ac0b986ac4167614ac8873f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeImagePart.md", + "mode": "100644", + "type": "blob", + "sha": "ffbbc2f1be950d8e3b2a1273cbbafd9c9ebb9106", + "size": 898, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ffbbc2f1be950d8e3b2a1273cbbafd9c9ebb9106" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeMessage.md", + "mode": "100644", + "type": "blob", + "sha": "ca34029bf6e63a3dcc796ef88841c3665e2d8416", + "size": 1806, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ca34029bf6e63a3dcc796ef88841c3665e2d8416" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeSessionConfig.md", + "mode": "100644", + "type": "blob", + "sha": "ee9c47357568c7b0ad001d6dc7f273cca3e5685a", + "size": 2961, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ee9c47357568c7b0ad001d6dc7f273cca3e5685a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeTextPart.md", + "mode": "100644", + "type": "blob", + "sha": "e3ade5a1af9220642fd2502eacb9352fea6d4339", + "size": 617, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e3ade5a1af9220642fd2502eacb9352fea6d4339" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeToken.md", + "mode": "100644", + "type": "blob", + "sha": "1a34e839a277652f49911508dbe11b3967994f32", + "size": 1138, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1a34e839a277652f49911508dbe11b3967994f32" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeTokenAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "ebb97f1eddfa391fe7dc45d392feda49f5b806bf", + "size": 820, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebb97f1eddfa391fe7dc45d392feda49f5b806bf" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeTokenOptions.md", + "mode": "100644", + "type": "blob", + "sha": "b733d552e7c2b10d2da3f0e6445d4c4e0fdd944d", + "size": 496, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b733d552e7c2b10d2da3f0e6445d4c4e0fdd944d" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeToolCallPart.md", + "mode": "100644", + "type": "blob", + "sha": "9219e1ba6c03778c6ab139ad5598988aa4074e0c", + "size": 1361, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9219e1ba6c03778c6ab139ad5598988aa4074e0c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RealtimeToolResultPart.md", + "mode": "100644", + "type": "blob", + "sha": "40c2b81663187fad15f54d5ccb9cb07dcdee1789", + "size": 833, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/40c2b81663187fad15f54d5ccb9cb07dcdee1789" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningEncryptedValueEvent.md", + "mode": "100644", + "type": "blob", + "sha": "0abbb74c0ba505a3bcf82bf65e253fc2b9b008b4", + "size": 683, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0abbb74c0ba505a3bcf82bf65e253fc2b9b008b4" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningEndEvent.md", + "mode": "100644", + "type": "blob", + "sha": "f96d9c1bafa3fcbf851dcec08f460b3ee4c469a1", + "size": 614, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f96d9c1bafa3fcbf851dcec08f460b3ee4c469a1" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningMessageContentEvent.md", + "mode": "100644", + "type": "blob", + "sha": "cdd211a932c7009503bd91987b76f0f182e31556", + "size": 677, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cdd211a932c7009503bd91987b76f0f182e31556" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningMessageEndEvent.md", + "mode": "100644", + "type": "blob", + "sha": "3d3095f07eef11740b3379216676c25090fafa6a", + "size": 638, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3d3095f07eef11740b3379216676c25090fafa6a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningMessageStartEvent.md", + "mode": "100644", + "type": "blob", + "sha": "82fd5d9e1b56804875ded56186b052d62f1ccc47", + "size": 670, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/82fd5d9e1b56804875ded56186b052d62f1ccc47" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ReasoningStartEvent.md", + "mode": "100644", + "type": "blob", + "sha": "aff3b9c38555add52255c5913570b24810ebb2b5", + "size": 624, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/aff3b9c38555add52255c5913570b24810ebb2b5" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ResolvedMediaPrompt.md", + "mode": "100644", + "type": "blob", + "sha": "c9910dbad074722cd0da1aebb3170dbdbdb3746a", + "size": 2133, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c9910dbad074722cd0da1aebb3170dbdbdb3746a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ResponseFormat.md", + "mode": "100644", + "type": "blob", + "sha": "14ffb47691340efd5fec5566b4a5392493770a90", + "size": 3275, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/14ffb47691340efd5fec5566b4a5392493770a90" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RunErrorEvent.md", + "mode": "100644", + "type": "blob", + "sha": "940304c61ed0cb13ccd61011c33545377a6318dd", + "size": 1012, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/940304c61ed0cb13ccd61011c33545377a6318dd" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RunFinishedEvent.md", + "mode": "100644", + "type": "blob", + "sha": "004ffcbe6d98096aae69ad38d093802e67d2f9d1", + "size": 1202, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/004ffcbe6d98096aae69ad38d093802e67d2f9d1" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/RunStartedEvent.md", + "mode": "100644", + "type": "blob", + "sha": "477bdb103ceef3a2a9c4dce922e733b738bc90d0", + "size": 673, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/477bdb103ceef3a2a9c4dce922e733b738bc90d0" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ServerTool.md", + "mode": "100644", + "type": "blob", + "sha": "e49e82a94e2fd66f740981ff7f3cebcb1dbaca6c", + "size": 6396, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e49e82a94e2fd66f740981ff7f3cebcb1dbaca6c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StateDeltaEvent.md", + "mode": "100644", + "type": "blob", + "sha": "d474d5dcf81a1062fe28a5a1fa9b29da0b91347b", + "size": 637, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d474d5dcf81a1062fe28a5a1fa9b29da0b91347b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StateSnapshotEvent.md", + "mode": "100644", + "type": "blob", + "sha": "3758667d3b23f927a489dad2da48d1bc704faaf0", + "size": 954, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3758667d3b23f927a489dad2da48d1bc704faaf0" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StepFinishedEvent.md", + "mode": "100644", + "type": "blob", + "sha": "4d53ee050cb7dcf1bde766f3afd89b7f1030daca", + "size": 1622, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4d53ee050cb7dcf1bde766f3afd89b7f1030daca" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StepStartedEvent.md", + "mode": "100644", + "type": "blob", + "sha": "a1f91921ab320e457aa5f226047cf1046bd07eef", + "size": 1152, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a1f91921ab320e457aa5f226047cf1046bd07eef" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StreamProcessorEvents.md", + "mode": "100644", + "type": "blob", + "sha": "cf59e517d25b9dff925e58c57f80d84537359b7a", + "size": 4589, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cf59e517d25b9dff925e58c57f80d84537359b7a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StreamProcessorOptions.md", + "mode": "100644", + "type": "blob", + "sha": "d5952763357de5f24e913cba39dac2f1619e4e2e", + "size": 1740, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d5952763357de5f24e913cba39dac2f1619e4e2e" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StructuredOutputCompleteEvent.md", + "mode": "100644", + "type": "blob", + "sha": "ec5a64578daa40cbe9eabcad7811a585e2977c40", + "size": 1962, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ec5a64578daa40cbe9eabcad7811a585e2977c40" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StructuredOutputMiddlewareConfig.md", + "mode": "100644", + "type": "blob", + "sha": "504a00d60230236548e45434b02e00b35b516a77", + "size": 2644, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/504a00d60230236548e45434b02e00b35b516a77" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StructuredOutputPart.md", + "mode": "100644", + "type": "blob", + "sha": "df1c2c6b9840400523561823216c5f478a45cf1b", + "size": 2230, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/df1c2c6b9840400523561823216c5f478a45cf1b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/StructuredOutputStartEvent.md", + "mode": "100644", + "type": "blob", + "sha": "f992de709995bf5be1d7de790b458128a4c228db", + "size": 1504, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f992de709995bf5be1d7de790b458128a4c228db" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/SummarizationOptions.md", + "mode": "100644", + "type": "blob", + "sha": "837a135838eda66fe5a1c566fbedb26ff78696ff", + "size": 1815, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/837a135838eda66fe5a1c566fbedb26ff78696ff" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/SummarizationResult.md", + "mode": "100644", + "type": "blob", + "sha": "88512614267b87636e4bee088961c5b9ad31bd99", + "size": 863, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/88512614267b87636e4bee088961c5b9ad31bd99" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/SummarizeAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "1ea03b8accff7600d878844b15ebba65130d848c", + "size": 3004, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1ea03b8accff7600d878844b15ebba65130d848c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TTSAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "e4a38253f3c3a8c6800653c0b4e64da6c07dcee6", + "size": 2359, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4a38253f3c3a8c6800653c0b4e64da6c07dcee6" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TTSOptions.md", + "mode": "100644", + "type": "blob", + "sha": "84b08fbc647c42f80dbc7490275c31956cc60cb3", + "size": 2013, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/84b08fbc647c42f80dbc7490275c31956cc60cb3" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TTSResult.md", + "mode": "100644", + "type": "blob", + "sha": "3e3d1d1361975ca9218d7feb52c4815ee3896363", + "size": 1697, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3e3d1d1361975ca9218d7feb52c4815ee3896363" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "0b8fb4c6e71293ba0c02125d246f5e8a8b071710", + "size": 7404, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0b8fb4c6e71293ba0c02125d246f5e8a8b071710" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextCompletionChunk.md", + "mode": "100644", + "type": "blob", + "sha": "b8754cac94cbeb0c3d8f60d2a9cb49ceb79d549c", + "size": 1289, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b8754cac94cbeb0c3d8f60d2a9cb49ceb79d549c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextMessageContentEvent.md", + "mode": "100644", + "type": "blob", + "sha": "fe30467477146501a75be4eb964df34151ec895d", + "size": 934, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe30467477146501a75be4eb964df34151ec895d" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextMessageEndEvent.md", + "mode": "100644", + "type": "blob", + "sha": "a9359ebc5047b63422b43d5db2b7c4a267a84dff", + "size": 618, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a9359ebc5047b63422b43d5db2b7c4a267a84dff" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextMessageStartEvent.md", + "mode": "100644", + "type": "blob", + "sha": "8f9a4c3210290f42e415b52da25cccd05b927da0", + "size": 641, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f9a4c3210290f42e415b52da25cccd05b927da0" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextOptions.md", + "mode": "100644", + "type": "blob", + "sha": "c6cfe42f604d6e528990a39966c183f8504c8cd5", + "size": 7667, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c6cfe42f604d6e528990a39966c183f8504c8cd5" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TextPart.md", + "mode": "100644", + "type": "blob", + "sha": "24b7b530b19f00546614593ffd47a9c19cb9620d", + "size": 800, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/24b7b530b19f00546614593ffd47a9c19cb9620d" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ThinkingPart.md", + "mode": "100644", + "type": "blob", + "sha": "e9f00abd64b962de9f6ae3bb37e78d9671eadb55", + "size": 866, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e9f00abd64b962de9f6ae3bb37e78d9671eadb55" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/Tool.md", + "mode": "100644", + "type": "blob", + "sha": "4694688ecefcdea720412356324b21d43ffd1f1f", + "size": 6083, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4694688ecefcdea720412356324b21d43ffd1f1f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCall.md", + "mode": "100644", + "type": "blob", + "sha": "0dd7c7d2c0b95afecdf03d2cdff4087bec9caa04", + "size": 1188, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0dd7c7d2c0b95afecdf03d2cdff4087bec9caa04" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallArgsEvent.md", + "mode": "100644", + "type": "blob", + "sha": "65858b022204e07f10b7f3cc231e6d0fc4e5b166", + "size": 878, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/65858b022204e07f10b7f3cc231e6d0fc4e5b166" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallEndEvent.md", + "mode": "100644", + "type": "blob", + "sha": "8cf880e82f4bd0b4f72902a0955dd21bd1fad683", + "size": 1885, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8cf880e82f4bd0b4f72902a0955dd21bd1fad683" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallHookContext.md", + "mode": "100644", + "type": "blob", + "sha": "9c041e106168744c1984e68713b1b9af577e893f", + "size": 1634, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c041e106168744c1984e68713b1b9af577e893f" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallPart.md", + "mode": "100644", + "type": "blob", + "sha": "bc749ea66a9cb643e72ef6080f51935ba8fc4dcb", + "size": 1949, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bc749ea66a9cb643e72ef6080f51935ba8fc4dcb" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallResultEvent.md", + "mode": "100644", + "type": "blob", + "sha": "d5d01c99409bf2cc6e91c25c22d4c25b4a3e3315", + "size": 890, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d5d01c99409bf2cc6e91c25c22d4c25b4a3e3315" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolCallStartEvent.md", + "mode": "100644", + "type": "blob", + "sha": "fe58b65be71953f4292e78a6018e1949d0c4a043", + "size": 1604, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fe58b65be71953f4292e78a6018e1949d0c4a043" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolConfig.md", + "mode": "100644", + "type": "blob", + "sha": "0df224c18ae60f514f40c51819885dd2980da536", + "size": 270, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0df224c18ae60f514f40c51819885dd2980da536" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolDefinition.md", + "mode": "100644", + "type": "blob", + "sha": "8c1ffe6ed3ccc46fee11be4056c07060e6c35c82", + "size": 8644, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8c1ffe6ed3ccc46fee11be4056c07060e6c35c82" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolDefinitionConfig.md", + "mode": "100644", + "type": "blob", + "sha": "ebcb6670a8410996a7e1b2c232a70e508fe98d46", + "size": 2352, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ebcb6670a8410996a7e1b2c232a70e508fe98d46" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolDefinitionInstance.md", + "mode": "100644", + "type": "blob", + "sha": "5c31638a6275377735c9827b49abd2612fab42be", + "size": 6535, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5c31638a6275377735c9827b49abd2612fab42be" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolInputAvailableEvent.md", + "mode": "100644", + "type": "blob", + "sha": "5480eb55a0116cd214a23e2d3568bd9756deae2c", + "size": 1470, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5480eb55a0116cd214a23e2d3568bd9756deae2c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolPhaseCompleteInfo.md", + "mode": "100644", + "type": "blob", + "sha": "9be9605819bb432d17b846bed08cf2af2e0b2d7e", + "size": 1962, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9be9605819bb432d17b846bed08cf2af2e0b2d7e" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolRegistry.md", + "mode": "100644", + "type": "blob", + "sha": "bc684ecb07a9f55867065fed8a03de5e0ed50b09", + "size": 2622, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bc684ecb07a9f55867065fed8a03de5e0ed50b09" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/ToolResultPart.md", + "mode": "100644", + "type": "blob", + "sha": "2ad2b46b90926278a4f74a5859060dd1c5b406a3", + "size": 1100, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2ad2b46b90926278a4f74a5859060dd1c5b406a3" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TranscriptionAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "4b3088d2c92ba82863cd11af65c19c5c5faa89a7", + "size": 2538, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4b3088d2c92ba82863cd11af65c19c5c5faa89a7" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TranscriptionOptions.md", + "mode": "100644", + "type": "blob", + "sha": "eeac6970905f0564f4ab3cd80d4cf2aa2dd9c21c", + "size": 2183, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eeac6970905f0564f4ab3cd80d4cf2aa2dd9c21c" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TranscriptionResult.md", + "mode": "100644", + "type": "blob", + "sha": "0eaf6ef89b653af1908dcad1f68ff3d94552a4bc", + "size": 1948, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0eaf6ef89b653af1908dcad1f68ff3d94552a4bc" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TranscriptionSegment.md", + "mode": "100644", + "type": "blob", + "sha": "1554ccc0f5d22131b2b01da6df4c2fb4fc0a3f1b", + "size": 1499, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1554ccc0f5d22131b2b01da6df4c2fb4fc0a3f1b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/TranscriptionWord.md", + "mode": "100644", + "type": "blob", + "sha": "d6c478d41ad18d08d467a8f097ab21fa313f1d3a", + "size": 795, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d6c478d41ad18d08d467a8f097ab21fa313f1d3a" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/UIMessage.md", + "mode": "100644", + "type": "blob", + "sha": "43147dbbbfc03ae93e658900a4db229809bd60e9", + "size": 1258, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/43147dbbbfc03ae93e658900a4db229809bd60e9" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/UIResourceEvent.md", + "mode": "100644", + "type": "blob", + "sha": "2a858d97edc178ce35a52ade34e520c885166229", + "size": 1628, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a858d97edc178ce35a52ade34e520c885166229" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/UIResourcePart.md", + "mode": "100644", + "type": "blob", + "sha": "8f2ebce645b5ec31b5814a335e7c9919395b9bed", + "size": 1993, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8f2ebce645b5ec31b5814a335e7c9919395b9bed" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/UsageInfo.md", + "mode": "100644", + "type": "blob", + "sha": "64617014905faae92ad5f1c09ad765ce2f1db9c4", + "size": 564, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/64617014905faae92ad5f1c09ad765ce2f1db9c4" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VADConfig.md", + "mode": "100644", + "type": "blob", + "sha": "e4c0e08e709060cffa59c81147907699a2ca8fb5", + "size": 964, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e4c0e08e709060cffa59c81147907699a2ca8fb5" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "9f0059a7cee34c4b5e43fb4497b75513a7028670", + "size": 6295, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9f0059a7cee34c4b5e43fb4497b75513a7028670" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoGenerationOptions.md", + "mode": "100644", + "type": "blob", + "sha": "7f0ac1a6f81a9f8e409f132165fe868c1d3a8f72", + "size": 2749, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7f0ac1a6f81a9f8e409f132165fe868c1d3a8f72" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoJobResult.md", + "mode": "100644", + "type": "blob", + "sha": "df37783e2e56ac4f618c92be4a913e1d5f7c87a5", + "size": 761, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/df37783e2e56ac4f618c92be4a913e1d5f7c87a5" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoPart.md", + "mode": "100644", + "type": "blob", + "sha": "8fa2644f44c3b69af27248636ff68149ff3349a4", + "size": 931, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8fa2644f44c3b69af27248636ff68149ff3349a4" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoStatusResult.md", + "mode": "100644", + "type": "blob", + "sha": "3e25a6bb6ec90047bd2573209ab07ae38957e07b", + "size": 1246, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3e25a6bb6ec90047bd2573209ab07ae38957e07b" + }, + { + "path": "resources/tanstack-ai/reference/interfaces/VideoUrlResult.md", + "mode": "100644", + "type": "blob", + "sha": "948a1f339d54ead564917774d03b564455afaad6", + "size": 1401, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/948a1f339d54ead564917774d03b564455afaad6" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases", + "mode": "040000", + "type": "tree", + "sha": "18229bf4c78d7e8a8baac3240b74a7efa76abb93", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/18229bf4c78d7e8a8baac3240b74a7efa76abb93" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AGUIEvent.md", + "mode": "100644", + "type": "blob", + "sha": "8743a4bdd0e1ec4ac9f91029a2be997a0475e7fc", + "size": 767, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8743a4bdd0e1ec4ac9f91029a2be997a0475e7fc" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AGUIEventType.md", + "mode": "100644", + "type": "blob", + "sha": "a3b1ee8fbd04b5c335fb28b006a75de93621e467", + "size": 478, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a3b1ee8fbd04b5c335fb28b006a75de93621e467" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AIAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "8e60e3c96a2f0348d652c4c260795d447e82bb2a", + "size": 438, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8e60e3c96a2f0348d652c4c260795d447e82bb2a" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AgentLoopStrategy.md", + "mode": "100644", + "type": "blob", + "sha": "6fce701768ea6d6315e55dc07eb91a900b020f14", + "size": 658, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6fce701768ea6d6315e55dc07eb91a900b020f14" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyAudioAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "a63acbc751be5a49dd6f9b83c4a27a818b9e5d9b", + "size": 419, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a63acbc751be5a49dd6f9b83c4a27a818b9e5d9b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyClientTool.md", + "mode": "100644", + "type": "blob", + "sha": "b630df0ad190f8044ef864fa46a4e8e0d02e662c", + "size": 501, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b630df0ad190f8044ef864fa46a4e8e0d02e662c" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyGenerationMiddleware.md", + "mode": "100644", + "type": "blob", + "sha": "8d2d7f8c3b9949d430274eb20a49fb1a9f1e27bc", + "size": 416, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8d2d7f8c3b9949d430274eb20a49fb1a9f1e27bc" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyImageAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "adee912c6f6de5a2105acf6e1fcfb0a7cef77b92", + "size": 434, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/adee912c6f6de5a2105acf6e1fcfb0a7cef77b92" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnySummarizeAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "762dbac00e71fb48177d69cc78adedb64789755a", + "size": 434, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/762dbac00e71fb48177d69cc78adedb64789755a" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyTTSAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "2a0dc63c376e38e4373c3ab116b00fea96f10b13", + "size": 408, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a0dc63c376e38e4373c3ab116b00fea96f10b13" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyTextAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "fff9ac9a97422984b9cdf98885481d642ef837df", + "size": 421, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fff9ac9a97422984b9cdf98885481d642ef837df" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyTool.md", + "mode": "100644", + "type": "blob", + "sha": "6590c44228e0653827f63865672ec0b3a6c7039b", + "size": 423, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6590c44228e0653827f63865672ec0b3a6c7039b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyTranscriptionAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "e47d462d1cb4aeafb224e7bfcb507bca84c1d3d9", + "size": 482, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e47d462d1cb4aeafb224e7bfcb507bca84c1d3d9" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/AnyVideoAdapter.md", + "mode": "100644", + "type": "blob", + "sha": "45aa1ebdf570d16fdae2e5675ab2914ca1d1b108", + "size": 440, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/45aa1ebdf570d16fdae2e5675ab2914ca1d1b108" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/BeforeToolCallDecision.md", + "mode": "100644", + "type": "blob", + "sha": "2401fa2779bcd23ba4e26394ba67b1f2dc195f1f", + "size": 762, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2401fa2779bcd23ba4e26394ba67b1f2dc195f1f" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/Capability.md", + "mode": "100644", + "type": "blob", + "sha": "f41835b2882dbf60c6d1e15e3d00f381f9b371fd", + "size": 1173, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f41835b2882dbf60c6d1e15e3d00f381f9b371fd" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/CapabilityHandle.md", + "mode": "100644", + "type": "blob", + "sha": "2d4dde523f085316090adca40d4186b556f6053b", + "size": 605, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2d4dde523f085316090adca40d4186b556f6053b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/CapabilityProvider.md", + "mode": "100644", + "type": "blob", + "sha": "255493d0f48ca1ce4f7bf77c3227b7cd821996ed", + "size": 561, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/255493d0f48ca1ce4f7bf77c3227b7cd821996ed" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ChatMiddlewarePhase.md", + "mode": "100644", + "type": "blob", + "sha": "e26a8995d58b182867f6ba6a3c543bf0357f85bd", + "size": 869, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e26a8995d58b182867f6ba6a3c543bf0357f85bd" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ConstrainedContent.md", + "mode": "100644", + "type": "blob", + "sha": "22919f3b8d073f0c5b62d985e9eed64db74d978f", + "size": 665, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/22919f3b8d073f0c5b62d985e9eed64db74d978f" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ConstrainedModelMessage.md", + "mode": "100644", + "type": "blob", + "sha": "4f6de3a16e8d97b46d4487e27762f8e4d803c50c", + "size": 691, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4f6de3a16e8d97b46d4487e27762f8e4d803c50c" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ContentPart.md", + "mode": "100644", + "type": "blob", + "sha": "77af37c3f13d58b22cc427fd059268f5182fee2b", + "size": 915, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/77af37c3f13d58b22cc427fd059268f5182fee2b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ContentPartForInputModalitiesTypes.md", + "mode": "100644", + "type": "blob", + "sha": "d8116818751a32cf7cbd85ae75c1e5a4e67b28bb", + "size": 1021, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d8116818751a32cf7cbd85ae75c1e5a4e67b28bb" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ContentPartSource.md", + "mode": "100644", + "type": "blob", + "sha": "ef2da282f28a101a2165e3cd44e984f9d68269c7", + "size": 504, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef2da282f28a101a2165e3cd44e984f9d68269c7" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/DebugOption.md", + "mode": "100644", + "type": "blob", + "sha": "5786b4b8df5d0ba5b24a16527f3dc203ba9ff9cb", + "size": 477, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5786b4b8df5d0ba5b24a16527f3dc203ba9ff9cb" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/DeepPartial.md", + "mode": "100644", + "type": "blob", + "sha": "e2f6f8b1b1351e1c4fc19bd7cd7ceabf5c66ac91", + "size": 695, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e2f6f8b1b1351e1c4fc19bd7cd7ceabf5c66ac91" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/GeneratedAudio.md", + "mode": "100644", + "type": "blob", + "sha": "e40ca1a2c0847b481b7bba7af6a1d11d67f4180c", + "size": 531, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e40ca1a2c0847b481b7bba7af6a1d11d67f4180c" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/GeneratedImage.md", + "mode": "100644", + "type": "blob", + "sha": "d3f6f9168cfd11bdf8da8ead878bc6c3b9f9da1e", + "size": 421, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d3f6f9168cfd11bdf8da8ead878bc6c3b9f9da1e" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/GeneratedMediaSource.md", + "mode": "100644", + "type": "blob", + "sha": "865fc2b28e78935431241c3c0c4c2c3333696523", + "size": 976, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/865fc2b28e78935431241c3c0c4c2c3333696523" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/GenerationActivity.md", + "mode": "100644", + "type": "blob", + "sha": "85b003530ad6944ad64f242f2c6139cde266cf5e", + "size": 711, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/85b003530ad6944ad64f242f2c6139cde266cf5e" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/InferSchemaType.md", + "mode": "100644", + "type": "blob", + "sha": "5eb030fe69491b1096e441b8c2b2552a43481b9c", + "size": 743, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5eb030fe69491b1096e441b8c2b2552a43481b9c" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/InferToolInput.md", + "mode": "100644", + "type": "blob", + "sha": "b550607cf8706cd19f4d9df64890223b09ec0808", + "size": 590, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b550607cf8706cd19f4d9df64890223b09ec0808" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/InferToolName.md", + "mode": "100644", + "type": "blob", + "sha": "591e72bf976ebb2903d22550af736a4490c9c04f", + "size": 397, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/591e72bf976ebb2903d22550af736a4490c9c04f" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/InferToolOutput.md", + "mode": "100644", + "type": "blob", + "sha": "e630266910a1b6cb823cd66839b92ada731278f2", + "size": 597, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e630266910a1b6cb823cd66839b92ada731278f2" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/InputModalitiesTypes.md", + "mode": "100644", + "type": "blob", + "sha": "ad853e23c9b531169a18f7e137cd337d258b1a01", + "size": 689, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad853e23c9b531169a18f7e137cd337d258b1a01" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MCPConnectionPolicy.md", + "mode": "100644", + "type": "blob", + "sha": "63b408f6ebf53960e0d20b766831e5bef42a25fc", + "size": 697, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/63b408f6ebf53960e0d20b766831e5bef42a25fc" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MediaInputRole.md", + "mode": "100644", + "type": "blob", + "sha": "90bed0a6af58f798266caa4df35997410d67ab11", + "size": 675, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/90bed0a6af58f798266caa4df35997410d67ab11" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MediaPrompt.md", + "mode": "100644", + "type": "blob", + "sha": "a5a08294119e3ad1c6ad6d2ae712dfe038c49f50", + "size": 903, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a5a08294119e3ad1c6ad6d2ae712dfe038c49f50" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MediaPromptFor.md", + "mode": "100644", + "type": "blob", + "sha": "c764c53b50c47155fb32e3cc27811128dabb8e1b", + "size": 790, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c764c53b50c47155fb32e3cc27811128dabb8e1b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MediaPromptModality.md", + "mode": "100644", + "type": "blob", + "sha": "510579e9a607e268b75f7baa3393d30807a7ebef", + "size": 351, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/510579e9a607e268b75f7baa3393d30807a7ebef" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MediaPromptPart.md", + "mode": "100644", + "type": "blob", + "sha": "be186fe665adbb9eb1866c214bb65f2c86c37825", + "size": 615, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/be186fe665adbb9eb1866c214bb65f2c86c37825" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/MessagePart.md", + "mode": "100644", + "type": "blob", + "sha": "f74a3350f7fd5604736516c82db9458555fad050", + "size": 462, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f74a3350f7fd5604736516c82db9458555fad050" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ModalitiesArrayToUnion.md", + "mode": "100644", + "type": "blob", + "sha": "25851c3a5f78d7dedcd6041adbbf60e08d1a2ae5", + "size": 491, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/25851c3a5f78d7dedcd6041adbbf60e08d1a2ae5" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/Modality.md", + "mode": "100644", + "type": "blob", + "sha": "ed431c73c1276219b8cb1ba21ab69fd06f31d86b", + "size": 520, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ed431c73c1276219b8cb1ba21ab69fd06f31d86b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ModelInputModalitiesByName.md", + "mode": "100644", + "type": "blob", + "sha": "80d5533af343181fa738c76581a7863f658ba196", + "size": 554, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/80d5533af343181fa738c76581a7863f658ba196" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeErrorCode.md", + "mode": "100644", + "type": "blob", + "sha": "6454c93ded1966bcd40bf35e7dba077f4beaab32", + "size": 396, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6454c93ded1966bcd40bf35e7dba077f4beaab32" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeEvent.md", + "mode": "100644", + "type": "blob", + "sha": "07000d135b3015482d5b9322087dcca6639d33a0", + "size": 429, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/07000d135b3015482d5b9322087dcca6639d33a0" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeEventHandler.md", + "mode": "100644", + "type": "blob", + "sha": "e3cb54bb1190e50a3a2c0f449b11208e96b30e8a", + "size": 558, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e3cb54bb1190e50a3a2c0f449b11208e96b30e8a" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeMessagePart.md", + "mode": "100644", + "type": "blob", + "sha": "27062f5d1174f7ac49676525d0e89c361ed2b0a4", + "size": 422, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/27062f5d1174f7ac49676525d0e89c361ed2b0a4" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeMode.md", + "mode": "100644", + "type": "blob", + "sha": "4235cc6c7abc876e1faaaafd5859a92cf837b74b", + "size": 324, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4235cc6c7abc876e1faaaafd5859a92cf837b74b" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/RealtimeStatus.md", + "mode": "100644", + "type": "blob", + "sha": "ba09488d7bd1a93045210a4ab9222b8eac7a6f0f", + "size": 352, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ba09488d7bd1a93045210a4ab9222b8eac7a6f0f" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/SchemaInput.md", + "mode": "100644", + "type": "blob", + "sha": "6992b34784107faf466312a6474c563ca8b075c4", + "size": 1112, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6992b34784107faf466312a6474c563ca8b075c4" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/StreamChunk.md", + "mode": "100644", + "type": "blob", + "sha": "59dba978bd64ae0e84da094069ac780be0b2f84c", + "size": 329, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59dba978bd64ae0e84da094069ac780be0b2f84c" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/StreamChunkType.md", + "mode": "100644", + "type": "blob", + "sha": "1d6d9d06571baeb23ef079bcd39f3b9de444b8e9", + "size": 341, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1d6d9d06571baeb23ef079bcd39f3b9de444b8e9" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/StructuredOutputStream.md", + "mode": "100644", + "type": "blob", + "sha": "b725be2a881a7e4944e91cf30ed2f1c3e3296a3e", + "size": 1817, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b725be2a881a7e4944e91cf30ed2f1c3e3296a3e" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/SystemPrompt.md", + "mode": "100644", + "type": "blob", + "sha": "b6eaed2ecdf8db5512c157970812f68d1c1b3373", + "size": 1845, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b6eaed2ecdf8db5512c157970812f68d1c1b3373" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ToolCallState.md", + "mode": "100644", + "type": "blob", + "sha": "2a09eece65b19915508fbeca1562d1f0d2fe8c58", + "size": 420, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2a09eece65b19915508fbeca1562d1f0d2fe8c58" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ToolExecuteFunction.md", + "mode": "100644", + "type": "blob", + "sha": "8085773c85eeb0bc996b2c38fd13c61a30854ae3", + "size": 765, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8085773c85eeb0bc996b2c38fd13c61a30854ae3" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ToolExecutionContext.md", + "mode": "100644", + "type": "blob", + "sha": "beaa9bdba041f5b2de465d90f377febfcf94c835", + "size": 1504, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/beaa9bdba041f5b2de465d90f377febfcf94c835" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ToolOutputState.md", + "mode": "100644", + "type": "blob", + "sha": "a36196111bf7a70af44bd95aaa8a7993d2dd7e7e", + "size": 267, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a36196111bf7a70af44bd95aaa8a7993d2dd7e7e" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/ToolResultState.md", + "mode": "100644", + "type": "blob", + "sha": "21b0bce99ba2d940b727808835c7ccbd44147248", + "size": 325, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/21b0bce99ba2d940b727808835c7ccbd44147248" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/UsageTotals.md", + "mode": "100644", + "type": "blob", + "sha": "2474497e1b80bd1835550869041b91530961d4d2", + "size": 392, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2474497e1b80bd1835550869041b91530961d4d2" + }, + { + "path": "resources/tanstack-ai/reference/type-aliases/WireMessage.md", + "mode": "100644", + "type": "blob", + "sha": "9c7d3e239ce6472f1460cb34bd1736c907ed2909", + "size": 304, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c7d3e239ce6472f1460cb34bd1736c907ed2909" + }, + { + "path": "resources/tanstack-ai/reference/variables", + "mode": "040000", + "type": "tree", + "sha": "e0f658d65ffe7b33e150e4b893dfdddf5fe73edc", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e0f658d65ffe7b33e150e4b893dfdddf5fe73edc" + }, + { + "path": "resources/tanstack-ai/reference/variables/DISCOVERY_TOOL_NAME.md", + "mode": "100644", + "type": "blob", + "sha": "b0371eea95b8ad0710d56201f8fb25ed14390d8d", + "size": 650, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b0371eea95b8ad0710d56201f8fb25ed14390d8d" + }, + { + "path": "resources/tanstack-ai/reference/variables/defaultJSONParser.md", + "mode": "100644", + "type": "blob", + "sha": "802454221172c9f84e4d841091360a36e22053b1", + "size": 338, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/802454221172c9f84e4d841091360a36e22053b1" + }, + { + "path": "resources/tanstack-ai/structured-outputs", + "mode": "040000", + "type": "tree", + "sha": "24c2af58babb302680a213e2732d150101f1de8a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/24c2af58babb302680a213e2732d150101f1de8a" + }, + { + "path": "resources/tanstack-ai/structured-outputs/multi-turn.md", + "mode": "100644", + "type": "blob", + "sha": "d681d4ca904199999a9d034a749d4e54615a718c", + "size": 11768, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d681d4ca904199999a9d034a749d4e54615a718c" + }, + { + "path": "resources/tanstack-ai/structured-outputs/one-shot.md", + "mode": "100644", + "type": "blob", + "sha": "183181b88fc301ab00c456620e28a24ce078cfd4", + "size": 11179, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/183181b88fc301ab00c456620e28a24ce078cfd4" + }, + { + "path": "resources/tanstack-ai/structured-outputs/overview.md", + "mode": "100644", + "type": "blob", + "sha": "18edaac6e50ef792b712f425d67d47b4a6ff3c7f", + "size": 8368, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/18edaac6e50ef792b712f425d67d47b4a6ff3c7f" + }, + { + "path": "resources/tanstack-ai/structured-outputs/streaming.md", + "mode": "100644", + "type": "blob", + "sha": "cd37c21c7a9f7001d81caf7e0d44251070f11eea", + "size": 11093, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cd37c21c7a9f7001d81caf7e0d44251070f11eea" + }, + { + "path": "resources/tanstack-ai/structured-outputs/with-tools.md", + "mode": "100644", + "type": "blob", + "sha": "8938f316fec321eafe559d6086e6f2a184ea4938", + "size": 8862, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8938f316fec321eafe559d6086e6f2a184ea4938" + }, + { + "path": "resources/tanstack-ai/tools", + "mode": "040000", + "type": "tree", + "sha": "7ecc91db042bc96f8813ab3e50bc50d922c839ff", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7ecc91db042bc96f8813ab3e50bc50d922c839ff" + }, + { + "path": "resources/tanstack-ai/tools/client-tools.md", + "mode": "100644", + "type": "blob", + "sha": "321bcf604b61980d85cb30f79805d49c0efcc0bc", + "size": 14104, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/321bcf604b61980d85cb30f79805d49c0efcc0bc" + }, + { + "path": "resources/tanstack-ai/tools/lazy-tool-discovery.md", + "mode": "100644", + "type": "blob", + "sha": "d602d5a9feca9142287d7a4ace835dd7a2f8d408", + "size": 9667, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d602d5a9feca9142287d7a4ace835dd7a2f8d408" + }, + { + "path": "resources/tanstack-ai/tools/mcp-codegen.md", + "mode": "100644", + "type": "blob", + "sha": "ee7039020c11117a103f85a934176b5eb9c7dab6", + "size": 4333, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ee7039020c11117a103f85a934176b5eb9c7dab6" + }, + { + "path": "resources/tanstack-ai/tools/mcp-managed.md", + "mode": "100644", + "type": "blob", + "sha": "ef3f84cdfd2633cb0b922ec79a229aec93404cb3", + "size": 11869, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef3f84cdfd2633cb0b922ec79a229aec93404cb3" + }, + { + "path": "resources/tanstack-ai/tools/mcp-manual.md", + "mode": "100644", + "type": "blob", + "sha": "29d7d7e96b2d8c0755a631ec2954469b29300fe1", + "size": 11045, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/29d7d7e96b2d8c0755a631ec2954469b29300fe1" + }, + { + "path": "resources/tanstack-ai/tools/mcp.md", + "mode": "100644", + "type": "blob", + "sha": "ad7cf1ffbb069fcbde27b7728c83ea41898e0f5a", + "size": 17732, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad7cf1ffbb069fcbde27b7728c83ea41898e0f5a" + }, + { + "path": "resources/tanstack-ai/tools/provider-skills.md", + "mode": "100644", + "type": "blob", + "sha": "64dc7d4eaf9e96f58b3652aa7ac127c52f0fb7e1", + "size": 5403, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/64dc7d4eaf9e96f58b3652aa7ac127c52f0fb7e1" + }, + { + "path": "resources/tanstack-ai/tools/provider-tools.md", + "mode": "100644", + "type": "blob", + "sha": "5c3d04f5724e7b7dcdd877c931530c796771160e", + "size": 4596, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5c3d04f5724e7b7dcdd877c931530c796771160e" + }, + { + "path": "resources/tanstack-ai/tools/server-tools.md", + "mode": "100644", + "type": "blob", + "sha": "8ae0b5aa72684a492caf9630a406d49761377855", + "size": 12038, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8ae0b5aa72684a492caf9630a406d49761377855" + }, + { + "path": "resources/tanstack-ai/tools/tool-approval.md", + "mode": "100644", + "type": "blob", + "sha": "1d87a3ff8b0e973287b19b983f5684bb5b738256", + "size": 9057, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1d87a3ff8b0e973287b19b983f5684bb5b738256" + }, + { + "path": "resources/tanstack-ai/tools/tool-architecture.md", + "mode": "100644", + "type": "blob", + "sha": "fb78700378527035dcd1a1b83b95051d6c18ff0a", + "size": 14088, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fb78700378527035dcd1a1b83b95051d6c18ff0a" + }, + { + "path": "resources/tanstack-ai/tools/tools.md", + "mode": "100644", + "type": "blob", + "sha": "debc8f2dbdb5f65d19a4c6a935d2b34da3e04d9c", + "size": 13883, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/debc8f2dbdb5f65d19a4c6a935d2b34da3e04d9c" + }, + { + "path": "resources/turso", + "mode": "040000", + "type": "tree", + "sha": "86abd49c0475941a7df3b85bfdb5e30502c24b2d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/86abd49c0475941a7df3b85bfdb5e30502c24b2d" + }, + { + "path": "resources/turso/features", + "mode": "040000", + "type": "tree", + "sha": "6973730912b872a1133206523ee262266f3e14fe", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6973730912b872a1133206523ee262266f3e14fe" + }, + { + "path": "resources/turso/features/ai-and-embeddings.mdx", + "mode": "100644", + "type": "blob", + "sha": "59f932caa1db8489e6a01573946ef2611f093e7a", + "size": 17541, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/59f932caa1db8489e6a01573946ef2611f093e7a" + }, + { + "path": "resources/turso/features/attach-database.mdx", + "mode": "100644", + "type": "blob", + "sha": "f06689b8c72c86f992ed20cc49b6bff3656923f5", + "size": 4105, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f06689b8c72c86f992ed20cc49b6bff3656923f5" + }, + { + "path": "resources/turso/features/branching.mdx", + "mode": "100644", + "type": "blob", + "sha": "a6ecfbdd423700ccf53576027c72862316e35a42", + "size": 3172, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a6ecfbdd423700ccf53576027c72862316e35a42" + }, + { + "path": "resources/turso/features/data-edge.mdx", + "mode": "100644", + "type": "blob", + "sha": "dbd2a508ae59d5cbc8b922bf09f8a70a758d29f6", + "size": 2032, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dbd2a508ae59d5cbc8b922bf09f8a70a758d29f6" + }, + { + "path": "resources/turso/features/embedded-replicas", + "mode": "040000", + "type": "tree", + "sha": "87e01b65513adeb55c41030c0005d0df5b41d8be", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/87e01b65513adeb55c41030c0005d0df5b41d8be" + }, + { + "path": "resources/turso/features/embedded-replicas/introduction.mdx", + "mode": "100644", + "type": "blob", + "sha": "f50180a36031686ae30330178e42363e296f785d", + "size": 7892, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f50180a36031686ae30330178e42363e296f785d" + }, + { + "path": "resources/turso/features/embedded-replicas/rust", + "mode": "040000", + "type": "tree", + "sha": "9f7daa3936b6f96a83b88c3cad4580d53c64db02", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9f7daa3936b6f96a83b88c3cad4580d53c64db02" + }, + { + "path": "resources/turso/features/embedded-replicas/rust/railway.mdx", + "mode": "100644", + "type": "blob", + "sha": "ec62c985c966766b1ef30d9226123397a35c3a4f", + "size": 2217, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ec62c985c966766b1ef30d9226123397a35c3a4f" + }, + { + "path": "resources/turso/features/embedded-replicas/with-akamai.mdx", + "mode": "100644", + "type": "blob", + "sha": "0a8554e7a3518f659e605eb82abb58e20840be28", + "size": 2438, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0a8554e7a3518f659e605eb82abb58e20840be28" + }, + { + "path": "resources/turso/features/embedded-replicas/with-fly.mdx", + "mode": "100644", + "type": "blob", + "sha": "1457b18af86b302ee20f8f3b2494979ec7b7cdf4", + "size": 2161, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1457b18af86b302ee20f8f3b2494979ec7b7cdf4" + }, + { + "path": "resources/turso/features/embedded-replicas/with-koyeb.mdx", + "mode": "100644", + "type": "blob", + "sha": "807da6595c30220bd65e6b3dd08684259d8e23fb", + "size": 2143, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/807da6595c30220bd65e6b3dd08684259d8e23fb" + }, + { + "path": "resources/turso/features/embedded-replicas/with-railway.mdx", + "mode": "100644", + "type": "blob", + "sha": "2822bd22dfb68805af039693e20de01a9a3d8c4a", + "size": 2599, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2822bd22dfb68805af039693e20de01a9a3d8c4a" + }, + { + "path": "resources/turso/features/embedded-replicas/with-render.mdx", + "mode": "100644", + "type": "blob", + "sha": "d3fa99f3010469f21b4e762815524c9699abc12f", + "size": 2062, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d3fa99f3010469f21b4e762815524c9699abc12f" + }, + { + "path": "resources/turso/features/multi-db-schemas.mdx", + "mode": "100644", + "type": "blob", + "sha": "5377a7a031775b9f4f9d57d92c14a87faed178e6", + "size": 5474, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5377a7a031775b9f4f9d57d92c14a87faed178e6" + }, + { + "path": "resources/turso/features/platform-api.mdx", + "mode": "100644", + "type": "blob", + "sha": "b5bdd1534e593a40c19d139180f4958df93c47fa", + "size": 1103, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b5bdd1534e593a40c19d139180f4958df93c47fa" + }, + { + "path": "resources/turso/features/point-in-time-recovery.mdx", + "mode": "100644", + "type": "blob", + "sha": "d7c66500923e81aa4216f198118f58161f8c574c", + "size": 2350, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d7c66500923e81aa4216f198118f58161f8c574c" + }, + { + "path": "resources/turso/features/sqlite-extensions.mdx", + "mode": "100644", + "type": "blob", + "sha": "eeb0dd03a9709a3dc60f2b10f02624eb57b9f0d1", + "size": 3081, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eeb0dd03a9709a3dc60f2b10f02624eb57b9f0d1" + }, + { + "path": "resources/turso/guides", + "mode": "040000", + "type": "tree", + "sha": "bb1e2d2b578bb0a4e136c7788e5b4a67ad2d8493", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/bb1e2d2b578bb0a4e136c7788e5b4a67ad2d8493" + }, + { + "path": "resources/turso/guides/agent-databases.mdx", + "mode": "100644", + "type": "blob", + "sha": "5443c9d40e464fb5ee6e3e0ce62d61238fc97e57", + "size": 6677, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5443c9d40e464fb5ee6e3e0ce62d61238fc97e57" + }, + { + "path": "resources/turso/guides/ai-memory.mdx", + "mode": "100644", + "type": "blob", + "sha": "3d38380f17bea645e04ddc9ab2349126faeb03b8", + "size": 5627, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3d38380f17bea645e04ddc9ab2349126faeb03b8" + }, + { + "path": "resources/turso/guides/code-indexing.mdx", + "mode": "100644", + "type": "blob", + "sha": "6df4a15c7d883eaa91d524cfb1f88c2aae475eb5", + "size": 8207, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6df4a15c7d883eaa91d524cfb1f88c2aae475eb5" + }, + { + "path": "resources/turso/guides/content-caching.mdx", + "mode": "100644", + "type": "blob", + "sha": "904e5dd5da78e1d522cc53350cd8a60ab3ce04f7", + "size": 5135, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/904e5dd5da78e1d522cc53350cd8a60ab3ce04f7" + }, + { + "path": "resources/turso/guides/secrets-vault.mdx", + "mode": "100644", + "type": "blob", + "sha": "eaeb00fbd450d2020e08fb44ca48a4aa67752bb3", + "size": 6335, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eaeb00fbd450d2020e08fb44ca48a4aa67752bb3" + }, + { + "path": "resources/turso/guides/vector-search.mdx", + "mode": "100644", + "type": "blob", + "sha": "1caa69778cef4d75fb7df377619970df1d46b2d8", + "size": 7145, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1caa69778cef4d75fb7df377619970df1d46b2d8" + }, + { + "path": "resources/turso/sdk", + "mode": "040000", + "type": "tree", + "sha": "81e658af4aa50bd133a08160e18d3ce4ce0b097a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/81e658af4aa50bd133a08160e18d3ce4ce0b097a" + }, + { + "path": "resources/turso/sdk/activerecord", + "mode": "040000", + "type": "tree", + "sha": "51cefbf8d5665c0bd9b1ada71ab55368e7ecf55b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/51cefbf8d5665c0bd9b1ada71ab55368e7ecf55b" + }, + { + "path": "resources/turso/sdk/activerecord/guides", + "mode": "040000", + "type": "tree", + "sha": "4521fd33d0845359bd6f97058c8d946d99e9332e", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4521fd33d0845359bd6f97058c8d946d99e9332e" + }, + { + "path": "resources/turso/sdk/activerecord/guides/rails.mdx", + "mode": "100644", + "type": "blob", + "sha": "a6cd6ca338ffadccad2a114a65497cf14f9b6a36", + "size": 2476, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a6cd6ca338ffadccad2a114a65497cf14f9b6a36" + }, + { + "path": "resources/turso/sdk/activerecord/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "28d0e3f586ec9e10f4284b7dadd45b9e69c5f3b3", + "size": 3629, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/28d0e3f586ec9e10f4284b7dadd45b9e69c5f3b3" + }, + { + "path": "resources/turso/sdk/authentication.mdx", + "mode": "100644", + "type": "blob", + "sha": "bd74df93b0ecca880c1d637c11b477b17fa004b0", + "size": 1165, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bd74df93b0ecca880c1d637c11b477b17fa004b0" + }, + { + "path": "resources/turso/sdk/authorization.mdx", + "mode": "100644", + "type": "blob", + "sha": "926232dbc14ff15a97fd3c46f6444beda0bcd69a", + "size": 1969, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/926232dbc14ff15a97fd3c46f6444beda0bcd69a" + }, + { + "path": "resources/turso/sdk/authorization", + "mode": "040000", + "type": "tree", + "sha": "ca71dd5e5b2a67e2e349c56af26c7ce4bfe05986", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ca71dd5e5b2a67e2e349c56af26c7ce4bfe05986" + }, + { + "path": "resources/turso/sdk/authorization/fine-grained-permissions.mdx", + "mode": "100644", + "type": "blob", + "sha": "07e90024cb759a1f8ff87de926a8a5c73d0236c4", + "size": 1742, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/07e90024cb759a1f8ff87de926a8a5c73d0236c4" + }, + { + "path": "resources/turso/sdk/authorization/jwks.mdx", + "mode": "100644", + "type": "blob", + "sha": "1b49c3f42ca36c37c1ba9dee1208a1e5142dddbf", + "size": 1960, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1b49c3f42ca36c37c1ba9dee1208a1e5142dddbf" + }, + { + "path": "resources/turso/sdk/authorization/tokens.mdx", + "mode": "100644", + "type": "blob", + "sha": "28c5c69b8d93503ccbdfbc7e75b3bd762f1142b5", + "size": 1458, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/28c5c69b8d93503ccbdfbc7e75b3bd762f1142b5" + }, + { + "path": "resources/turso/sdk/c", + "mode": "040000", + "type": "tree", + "sha": "250bd6f7ca25ccb07473083a2ac4721b6c48b796", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/250bd6f7ca25ccb07473083a2ac4721b6c48b796" + }, + { + "path": "resources/turso/sdk/c/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "716fb05bf8bad003076d86408a0901db293ed0a1", + "size": 1918, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/716fb05bf8bad003076d86408a0901db293ed0a1" + }, + { + "path": "resources/turso/sdk/c/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "ba53232000858bebdedf6d0566b138fa441a6165", + "size": 3767, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ba53232000858bebdedf6d0566b138fa441a6165" + }, + { + "path": "resources/turso/sdk/c/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "bdf03eb96a61760365507c19bd5930e4f37dd930", + "size": 4561, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bdf03eb96a61760365507c19bd5930e4f37dd930" + }, + { + "path": "resources/turso/sdk/flutter", + "mode": "040000", + "type": "tree", + "sha": "0646d0731a5fce8691f55cdf0cb815bbae1a740d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/0646d0731a5fce8691f55cdf0cb815bbae1a740d" + }, + { + "path": "resources/turso/sdk/flutter/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "883142892003c82a74a3dbefdb772d429e9a9226", + "size": 86, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/883142892003c82a74a3dbefdb772d429e9a9226" + }, + { + "path": "resources/turso/sdk/flutter/integrations", + "mode": "040000", + "type": "tree", + "sha": "618f6260c9facffe0b331b384e14f1d7c423773d", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/618f6260c9facffe0b331b384e14f1d7c423773d" + }, + { + "path": "resources/turso/sdk/flutter/integrations/drift.mdx", + "mode": "100644", + "type": "blob", + "sha": "6f9ae4c70294a183e9382b5dfc9b4e90053bb1bc", + "size": 1528, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6f9ae4c70294a183e9382b5dfc9b4e90053bb1bc" + }, + { + "path": "resources/turso/sdk/flutter/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "214906dff9a3a12e9b5c297fd3a30df4f14eb8c8", + "size": 3670, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/214906dff9a3a12e9b5c297fd3a30df4f14eb8c8" + }, + { + "path": "resources/turso/sdk/flutter/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "f00f37f0ba3bce7ea42488e16e7e1b708c5732f3", + "size": 7368, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f00f37f0ba3bce7ea42488e16e7e1b708c5732f3" + }, + { + "path": "resources/turso/sdk/go", + "mode": "040000", + "type": "tree", + "sha": "1c075ca12af0191f0bbe4e5d086c49628cb16f36", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/1c075ca12af0191f0bbe4e5d086c49628cb16f36" + }, + { + "path": "resources/turso/sdk/go/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "0738cb714326da3042c3d28bd53faede34767501", + "size": 83, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0738cb714326da3042c3d28bd53faede34767501" + }, + { + "path": "resources/turso/sdk/go/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "11e4be5e8312668e26b9e5c3a979a5be77e19cec", + "size": 4982, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/11e4be5e8312668e26b9e5c3a979a5be77e19cec" + }, + { + "path": "resources/turso/sdk/go/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "d7d059db34b332ec15b1e4837045e13d4a608fc3", + "size": 7847, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d7d059db34b332ec15b1e4837045e13d4a608fc3" + }, + { + "path": "resources/turso/sdk/http", + "mode": "040000", + "type": "tree", + "sha": "b2f88b6b52563b1e6011cfd9b941374fe70543b5", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b2f88b6b52563b1e6011cfd9b941374fe70543b5" + }, + { + "path": "resources/turso/sdk/http/guides", + "mode": "040000", + "type": "tree", + "sha": "e58b01dc8ffb0e3a163f5753c3246941ca5997a6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/e58b01dc8ffb0e3a163f5753c3246941ca5997a6" + }, + { + "path": "resources/turso/sdk/http/guides/flutter.mdx", + "mode": "100644", + "type": "blob", + "sha": "e691bf3a65d0112fd0c49f3f6cb266fb7a7889ff", + "size": 2303, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e691bf3a65d0112fd0c49f3f6cb266fb7a7889ff" + }, + { + "path": "resources/turso/sdk/http/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "22f85ce5c855a3841d0ec8d5fa063d9f87f64e05", + "size": 7614, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/22f85ce5c855a3841d0ec8d5fa063d9f87f64e05" + }, + { + "path": "resources/turso/sdk/http/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "07e13bf2aed7ee0d9cf5f6ba0b7f3a0997a13e16", + "size": 14906, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/07e13bf2aed7ee0d9cf5f6ba0b7f3a0997a13e16" + }, + { + "path": "resources/turso/sdk/introduction.mdx", + "mode": "100644", + "type": "blob", + "sha": "2eb0039788d1e33a05573957a975dea57ed50c52", + "size": 5898, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2eb0039788d1e33a05573957a975dea57ed50c52" + }, + { + "path": "resources/turso/sdk/java", + "mode": "040000", + "type": "tree", + "sha": "2e423c2b3a87fc0b7f0e408deb9e9dc409d39144", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2e423c2b3a87fc0b7f0e408deb9e9dc409d39144" + }, + { + "path": "resources/turso/sdk/java/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "47003feabb6ed754f86b99b7c63c2ab6bde13831", + "size": 204, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/47003feabb6ed754f86b99b7c63c2ab6bde13831" + }, + { + "path": "resources/turso/sdk/java/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "58b898aba831a10cd96ab9a1f7943ac42c7f61c6", + "size": 137, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/58b898aba831a10cd96ab9a1f7943ac42c7f61c6" + }, + { + "path": "resources/turso/sdk/kotlin", + "mode": "040000", + "type": "tree", + "sha": "7896cfe406c2a9f350ff8a2585b2d782e503dc7a", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/7896cfe406c2a9f350ff8a2585b2d782e503dc7a" + }, + { + "path": "resources/turso/sdk/kotlin/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "da448354138705d864848b71ceebba41168dab67", + "size": 2781, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/da448354138705d864848b71ceebba41168dab67" + }, + { + "path": "resources/turso/sdk/kotlin/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "c5ab226956d18935ecd449a2cc3579a6010c0d59", + "size": 3174, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c5ab226956d18935ecd449a2cc3579a6010c0d59" + }, + { + "path": "resources/turso/sdk/php", + "mode": "040000", + "type": "tree", + "sha": "b67218b0e9da8a5f4d46cbefcd603caeb5925a62", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b67218b0e9da8a5f4d46cbefcd603caeb5925a62" + }, + { + "path": "resources/turso/sdk/php/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "a11c5a05421e18c0dd5c004da0576e32477fd9a4", + "size": 218, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a11c5a05421e18c0dd5c004da0576e32477fd9a4" + }, + { + "path": "resources/turso/sdk/php/guides", + "mode": "040000", + "type": "tree", + "sha": "edf1e577e4d30cefb1baab30e1e9ba49d344b218", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/edf1e577e4d30cefb1baab30e1e9ba49d344b218" + }, + { + "path": "resources/turso/sdk/php/guides/laravel.mdx", + "mode": "100644", + "type": "blob", + "sha": "a42c1c614ce42e6ef5a456a57256f604079573e8", + "size": 4876, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a42c1c614ce42e6ef5a456a57256f604079573e8" + }, + { + "path": "resources/turso/sdk/php/orm", + "mode": "040000", + "type": "tree", + "sha": "10e83d3ba70cb41a20fbc78e358073170409220f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/10e83d3ba70cb41a20fbc78e358073170409220f" + }, + { + "path": "resources/turso/sdk/php/orm/doctrine-dbal.mdx", + "mode": "100644", + "type": "blob", + "sha": "e74577dda75fb8a384cf02ce3716dfbf411aa774", + "size": 10331, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e74577dda75fb8a384cf02ce3716dfbf411aa774" + }, + { + "path": "resources/turso/sdk/php/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "d79a0615ebde319c4f76d6ec91186fe23e8dcbab", + "size": 3257, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d79a0615ebde319c4f76d6ec91186fe23e8dcbab" + }, + { + "path": "resources/turso/sdk/php/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "78e244073b41ed8bc76482d2ab40c183eede64c1", + "size": 4218, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/78e244073b41ed8bc76482d2ab40c183eede64c1" + }, + { + "path": "resources/turso/sdk/python", + "mode": "040000", + "type": "tree", + "sha": "66ab57142553b4902bca8990b923811d82138467", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/66ab57142553b4902bca8990b923811d82138467" + }, + { + "path": "resources/turso/sdk/python/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "ce17f56dfa28f081bb0c7f2e1bdf2146bac64296", + "size": 95, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ce17f56dfa28f081bb0c7f2e1bdf2146bac64296" + }, + { + "path": "resources/turso/sdk/python/guides", + "mode": "040000", + "type": "tree", + "sha": "425e605ffc035b2813d0a015067161501dfe0ce0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/425e605ffc035b2813d0a015067161501dfe0ce0" + }, + { + "path": "resources/turso/sdk/python/guides/flask.mdx", + "mode": "100644", + "type": "blob", + "sha": "94dc740208e834332feb49bf7eeeb8f97e4beb06", + "size": 2218, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/94dc740208e834332feb49bf7eeeb8f97e4beb06" + }, + { + "path": "resources/turso/sdk/python/orm", + "mode": "040000", + "type": "tree", + "sha": "41ee22fbac15f499f1395b33cd399b29826088ee", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/41ee22fbac15f499f1395b33cd399b29826088ee" + }, + { + "path": "resources/turso/sdk/python/orm/sqlalchemy.mdx", + "mode": "100644", + "type": "blob", + "sha": "c43df960534464f13343c78a3ac8d6f4e66a9bb0", + "size": 2592, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c43df960534464f13343c78a3ac8d6f4e66a9bb0" + }, + { + "path": "resources/turso/sdk/python/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "c3a0ba4d868b25d2a4343ca8bf1a1b1bfe3809c6", + "size": 3873, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c3a0ba4d868b25d2a4343ca8bf1a1b1bfe3809c6" + }, + { + "path": "resources/turso/sdk/python/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "b5890cc2bcb4aadf7eaab24e90b276ef7eb5b1c4", + "size": 4719, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b5890cc2bcb4aadf7eaab24e90b276ef7eb5b1c4" + }, + { + "path": "resources/turso/sdk/ruby", + "mode": "040000", + "type": "tree", + "sha": "b9e9352426f27cabc1ee7b27f81cdeaeafb8fa5f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b9e9352426f27cabc1ee7b27f81cdeaeafb8fa5f" + }, + { + "path": "resources/turso/sdk/ruby/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "dcff92c1af4d5b270b766d4dabb975eeae5bf7db", + "size": 1762, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/dcff92c1af4d5b270b766d4dabb975eeae5bf7db" + }, + { + "path": "resources/turso/sdk/ruby/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "c9ee1ca9ff74cc2fae60381828ba157dc1866720", + "size": 2226, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c9ee1ca9ff74cc2fae60381828ba157dc1866720" + }, + { + "path": "resources/turso/sdk/rust", + "mode": "040000", + "type": "tree", + "sha": "6225158dd90220690ff6a2568a16fd3fc44805a0", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6225158dd90220690ff6a2568a16fd3fc44805a0" + }, + { + "path": "resources/turso/sdk/rust/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "80ebb76adeb7b34b6e01b4bbf8acd969bce11671", + "size": 95, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/80ebb76adeb7b34b6e01b4bbf8acd969bce11671" + }, + { + "path": "resources/turso/sdk/rust/guides", + "mode": "040000", + "type": "tree", + "sha": "34b67dcb7aed37840abf810c76973b820f6bc9e4", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/34b67dcb7aed37840abf810c76973b820f6bc9e4" + }, + { + "path": "resources/turso/sdk/rust/guides/actix.mdx", + "mode": "100644", + "type": "blob", + "sha": "a80f867e9c71df0dfd7bb8586972c8b994d7107f", + "size": 2289, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a80f867e9c71df0dfd7bb8586972c8b994d7107f" + }, + { + "path": "resources/turso/sdk/rust/guides/axum.mdx", + "mode": "100644", + "type": "blob", + "sha": "404e8d3a14b3222ae41f244eba1081ce2024e208", + "size": 3182, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/404e8d3a14b3222ae41f244eba1081ce2024e208" + }, + { + "path": "resources/turso/sdk/rust/guides/rocket.mdx", + "mode": "100644", + "type": "blob", + "sha": "371980b437ceb34c5a75b09e8b1478a1e14a58fd", + "size": 2032, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/371980b437ceb34c5a75b09e8b1478a1e14a58fd" + }, + { + "path": "resources/turso/sdk/rust/guides/tauri.mdx", + "mode": "100644", + "type": "blob", + "sha": "a89fc35c44862cb312adee7315317ddd3c08496f", + "size": 3314, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a89fc35c44862cb312adee7315317ddd3c08496f" + }, + { + "path": "resources/turso/sdk/rust/orm", + "mode": "040000", + "type": "tree", + "sha": "8d76c24afd182095929a96b6b29e1feed0265727", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8d76c24afd182095929a96b6b29e1feed0265727" + }, + { + "path": "resources/turso/sdk/rust/orm/toasty.mdx", + "mode": "100644", + "type": "blob", + "sha": "03873c1274c160926a69ceda4c9122a102a8b04a", + "size": 3808, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/03873c1274c160926a69ceda4c9122a102a8b04a" + }, + { + "path": "resources/turso/sdk/rust/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "2b5f53710c0ae3f87e078bd7e24c68b93f143b0b", + "size": 5551, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2b5f53710c0ae3f87e078bd7e24c68b93f143b0b" + }, + { + "path": "resources/turso/sdk/rust/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "c7e0273f188ef6f2098f0307c9626aa44e85e740", + "size": 9494, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c7e0273f188ef6f2098f0307c9626aa44e85e740" + }, + { + "path": "resources/turso/sdk/swift", + "mode": "040000", + "type": "tree", + "sha": "45d3d4f5c1d49cf45f51dff3b2c00f9129dab96f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/45d3d4f5c1d49cf45f51dff3b2c00f9129dab96f" + }, + { + "path": "resources/turso/sdk/swift/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "7fe5d90fe9bc379ec3faec6a85e36601031e9901", + "size": 2910, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7fe5d90fe9bc379ec3faec6a85e36601031e9901" + }, + { + "path": "resources/turso/sdk/swift/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "54513dec2a7511d0ef142833ee690a5de6d6aa92", + "size": 3349, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/54513dec2a7511d0ef142833ee690a5de6d6aa92" + }, + { + "path": "resources/turso/sdk/ts", + "mode": "040000", + "type": "tree", + "sha": "973205b92f9f6978c684d03e93cf560c82fb49ef", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/973205b92f9f6978c684d03e93cf560c82fb49ef" + }, + { + "path": "resources/turso/sdk/ts/examples.mdx", + "mode": "100644", + "type": "blob", + "sha": "51198814b54a28b5ede6fc9ee936e34303fa4d62", + "size": 121, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/51198814b54a28b5ede6fc9ee936e34303fa4d62" + }, + { + "path": "resources/turso/sdk/ts/guides", + "mode": "040000", + "type": "tree", + "sha": "3e063629461e52103b20242a01bbabd2d64dde5b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/3e063629461e52103b20242a01bbabd2d64dde5b" + }, + { + "path": "resources/turso/sdk/ts/guides/astro.mdx", + "mode": "100644", + "type": "blob", + "sha": "5de730e813cb918a7926d38911ce9c33263613c0", + "size": 1451, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5de730e813cb918a7926d38911ce9c33263613c0" + }, + { + "path": "resources/turso/sdk/ts/guides/elysia.mdx", + "mode": "100644", + "type": "blob", + "sha": "9c2bf09d5e750e849e06892f110e6dd0eb4d0af1", + "size": 1243, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/9c2bf09d5e750e849e06892f110e6dd0eb4d0af1" + }, + { + "path": "resources/turso/sdk/ts/guides/hono.mdx", + "mode": "100644", + "type": "blob", + "sha": "852ec7d21438c01ffa47ddb3ef3f2b7036ca43a4", + "size": 1235, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/852ec7d21438c01ffa47ddb3ef3f2b7036ca43a4" + }, + { + "path": "resources/turso/sdk/ts/guides/nextjs.mdx", + "mode": "100644", + "type": "blob", + "sha": "b56e8b4cfc1aa021051a58e9d00aa44111d0353b", + "size": 1893, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b56e8b4cfc1aa021051a58e9d00aa44111d0353b" + }, + { + "path": "resources/turso/sdk/ts/guides/nuxt.mdx", + "mode": "100644", + "type": "blob", + "sha": "31b759f96c9245196c38581bfde97f8172407c7a", + "size": 2242, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31b759f96c9245196c38581bfde97f8172407c7a" + }, + { + "path": "resources/turso/sdk/ts/guides/quasar.mdx", + "mode": "100644", + "type": "blob", + "sha": "a285dd368626a46011c6318799e724a737a63fbd", + "size": 2066, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a285dd368626a46011c6318799e724a737a63fbd" + }, + { + "path": "resources/turso/sdk/ts/guides/qwik.mdx", + "mode": "100644", + "type": "blob", + "sha": "262472c0030c543cb55d517b2ea763590623b27f", + "size": 1746, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/262472c0030c543cb55d517b2ea763590623b27f" + }, + { + "path": "resources/turso/sdk/ts/guides/remix.mdx", + "mode": "100644", + "type": "blob", + "sha": "322ce0fa17fa5d250ac569000a3090424d697bda", + "size": 1459, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/322ce0fa17fa5d250ac569000a3090424d697bda" + }, + { + "path": "resources/turso/sdk/ts/guides/sveltekit.mdx", + "mode": "100644", + "type": "blob", + "sha": "4a23806080849ea247535b74088d50ab9d42c453", + "size": 1871, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4a23806080849ea247535b74088d50ab9d42c453" + }, + { + "path": "resources/turso/sdk/ts/integrations", + "mode": "040000", + "type": "tree", + "sha": "45e2e9ac106fade20c777ac9af29e7e34932e34c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/45e2e9ac106fade20c777ac9af29e7e34932e34c" + }, + { + "path": "resources/turso/sdk/ts/integrations/sentry.mdx", + "mode": "100644", + "type": "blob", + "sha": "3ec8156e2127d2dd044a47f0447728988f30533e", + "size": 1541, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3ec8156e2127d2dd044a47f0447728988f30533e" + }, + { + "path": "resources/turso/sdk/ts/orm", + "mode": "040000", + "type": "tree", + "sha": "ec063b9c1a3cfb0944fe455871894b2a1e163c69", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/ec063b9c1a3cfb0944fe455871894b2a1e163c69" + }, + { + "path": "resources/turso/sdk/ts/orm/drizzle.mdx", + "mode": "100644", + "type": "blob", + "sha": "70608a0a4e2e62ad50bea595fa8bfc7900e1dcee", + "size": 5884, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/70608a0a4e2e62ad50bea595fa8bfc7900e1dcee" + }, + { + "path": "resources/turso/sdk/ts/orm/prisma.mdx", + "mode": "100644", + "type": "blob", + "sha": "86a97571615136c90b353eeb4a6dd104f5a8683a", + "size": 2756, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/86a97571615136c90b353eeb4a6dd104f5a8683a" + }, + { + "path": "resources/turso/sdk/ts/quickstart.mdx", + "mode": "100644", + "type": "blob", + "sha": "31192caa6b069749a3ce2a5fd3bdb5c1a4a6c4af", + "size": 4554, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31192caa6b069749a3ce2a5fd3bdb5c1a4a6c4af" + }, + { + "path": "resources/turso/sdk/ts/reference.mdx", + "mode": "100644", + "type": "blob", + "sha": "f5c196b86908aa0ede710e2986ea4d474af3ce60", + "size": 15776, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f5c196b86908aa0ede710e2986ea4d474af3ce60" + }, + { + "path": "resources/turso/sql-reference", + "mode": "040000", + "type": "tree", + "sha": "deb3008e96f9e8e3226311578427bbb0c9e678ef", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/deb3008e96f9e8e3226311578427bbb0c9e678ef" + }, + { + "path": "resources/turso/sql-reference/cli", + "mode": "040000", + "type": "tree", + "sha": "da4f7be0df567b8fbd5993d8705e072132eef449", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/da4f7be0df567b8fbd5993d8705e072132eef449" + }, + { + "path": "resources/turso/sql-reference/cli/command-line-options.mdx", + "mode": "100644", + "type": "blob", + "sha": "07a36959010b4a0b13858a8a1a1b0a53ca0bc08c", + "size": 3962, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/07a36959010b4a0b13858a8a1a1b0a53ca0bc08c" + }, + { + "path": "resources/turso/sql-reference/cli/getting-started.mdx", + "mode": "100644", + "type": "blob", + "sha": "e3311955a37b3275bb6f57945a056903d19926f8", + "size": 3231, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e3311955a37b3275bb6f57945a056903d19926f8" + }, + { + "path": "resources/turso/sql-reference/cli/shell-commands.mdx", + "mode": "100644", + "type": "blob", + "sha": "5ae935aae2b346b413a4a0b214d48ecdf300d6da", + "size": 8152, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5ae935aae2b346b413a4a0b214d48ecdf300d6da" + }, + { + "path": "resources/turso/sql-reference/compatibility.mdx", + "mode": "100644", + "type": "blob", + "sha": "bee4ea553198745d588b672e4ddd64cffa3751dd", + "size": 2033, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bee4ea553198745d588b672e4ddd64cffa3751dd" + }, + { + "path": "resources/turso/sql-reference/data-types.mdx", + "mode": "100644", + "type": "blob", + "sha": "4b9e33723a691c7cddf5db49dfd59fa7a89e5699", + "size": 9833, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4b9e33723a691c7cddf5db49dfd59fa7a89e5699" + }, + { + "path": "resources/turso/sql-reference/experimental-features.mdx", + "mode": "100644", + "type": "blob", + "sha": "275b90713ed3184b4704c3dab8fc48e2b2506c54", + "size": 4024, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/275b90713ed3184b4704c3dab8fc48e2b2506c54" + }, + { + "path": "resources/turso/sql-reference/expressions.mdx", + "mode": "100644", + "type": "blob", + "sha": "73df219f842ad027b5d67ed35ebd50cc8a45750a", + "size": 12635, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/73df219f842ad027b5d67ed35ebd50cc8a45750a" + }, + { + "path": "resources/turso/sql-reference/extensions.mdx", + "mode": "100644", + "type": "blob", + "sha": "eb156e63e022ffbd84dce8fb972bc6f6b3216490", + "size": 10558, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/eb156e63e022ffbd84dce8fb972bc6f6b3216490" + }, + { + "path": "resources/turso/sql-reference/functions", + "mode": "040000", + "type": "tree", + "sha": "41ba3d1cbe628d7c9038c601f7c7ad21723dec9c", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/41ba3d1cbe628d7c9038c601f7c7ad21723dec9c" + }, + { + "path": "resources/turso/sql-reference/functions/aggregate.mdx", + "mode": "100644", + "type": "blob", + "sha": "a47d277741ca00f12770979405d6e48457103c19", + "size": 14233, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a47d277741ca00f12770979405d6e48457103c19" + }, + { + "path": "resources/turso/sql-reference/functions/array.mdx", + "mode": "100644", + "type": "blob", + "sha": "087a53935095801fcf9c753f488939146ca496c6", + "size": 14778, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/087a53935095801fcf9c753f488939146ca496c6" + }, + { + "path": "resources/turso/sql-reference/functions/date-time.mdx", + "mode": "100644", + "type": "blob", + "sha": "2e4bcfe6832ba50206ea958fb8c536044625a91e", + "size": 16145, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2e4bcfe6832ba50206ea958fb8c536044625a91e" + }, + { + "path": "resources/turso/sql-reference/functions/fts.mdx", + "mode": "100644", + "type": "blob", + "sha": "e1dbb7053f0ad99dfbc103a5b6a81c79b0884f6e", + "size": 12226, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e1dbb7053f0ad99dfbc103a5b6a81c79b0884f6e" + }, + { + "path": "resources/turso/sql-reference/functions/json.mdx", + "mode": "100644", + "type": "blob", + "sha": "63dc6e69b3949dae9048bd2114f698e41df80f9c", + "size": 17584, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/63dc6e69b3949dae9048bd2114f698e41df80f9c" + }, + { + "path": "resources/turso/sql-reference/functions/math.mdx", + "mode": "100644", + "type": "blob", + "sha": "8afdb36dad9681977c6b7c61d4222deec712a408", + "size": 12624, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8afdb36dad9681977c6b7c61d4222deec712a408" + }, + { + "path": "resources/turso/sql-reference/functions/scalar.mdx", + "mode": "100644", + "type": "blob", + "sha": "12694070edb96be4fc8d621de2a51773544dc7ea", + "size": 17385, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/12694070edb96be4fc8d621de2a51773544dc7ea" + }, + { + "path": "resources/turso/sql-reference/functions/vector.mdx", + "mode": "100644", + "type": "blob", + "sha": "e7e38403797c9b5fd33dac34b86ae23e0923b098", + "size": 9994, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e7e38403797c9b5fd33dac34b86ae23e0923b098" + }, + { + "path": "resources/turso/sql-reference/functions/window.mdx", + "mode": "100644", + "type": "blob", + "sha": "bd074c24fa31863ab7fa807eb36ec1b3b9bb013f", + "size": 7623, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bd074c24fa31863ab7fa807eb36ec1b3b9bb013f" + }, + { + "path": "resources/turso/sql-reference/multiprocess-access.mdx", + "mode": "100644", + "type": "blob", + "sha": "8a19c6d8e30a5c1d9ac93d4460890e8d8b7e5a58", + "size": 8290, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/8a19c6d8e30a5c1d9ac93d4460890e8d8b7e5a58" + }, + { + "path": "resources/turso/sql-reference/pragmas.mdx", + "mode": "100644", + "type": "blob", + "sha": "ecb68779c10f3fbdea01b42b64f4ca6ea05edbab", + "size": 12276, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ecb68779c10f3fbdea01b42b64f4ca6ea05edbab" + }, + { + "path": "resources/turso/sql-reference/statements", + "mode": "040000", + "type": "tree", + "sha": "2dbdb74dd11e1a73a00ec76a41d27c85092fab1f", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/2dbdb74dd11e1a73a00ec76a41d27c85092fab1f" + }, + { + "path": "resources/turso/sql-reference/statements/alter-table.mdx", + "mode": "100644", + "type": "blob", + "sha": "d42efb2aedf8453647291ebfa9421594122804a3", + "size": 8006, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d42efb2aedf8453647291ebfa9421594122804a3" + }, + { + "path": "resources/turso/sql-reference/statements/analyze.mdx", + "mode": "100644", + "type": "blob", + "sha": "c1ae997abbd3965aa8dc9774eba2dfaa6a44c6d7", + "size": 2242, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c1ae997abbd3965aa8dc9774eba2dfaa6a44c6d7" + }, + { + "path": "resources/turso/sql-reference/statements/attach-database.mdx", + "mode": "100644", + "type": "blob", + "sha": "194256f1a35b33310c1c808751100c21d5c2a8a1", + "size": 2328, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/194256f1a35b33310c1c808751100c21d5c2a8a1" + }, + { + "path": "resources/turso/sql-reference/statements/create-domain.mdx", + "mode": "100644", + "type": "blob", + "sha": "e6a8987c2608f23d832a5c3a62103921da7daed3", + "size": 9106, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e6a8987c2608f23d832a5c3a62103921da7daed3" + }, + { + "path": "resources/turso/sql-reference/statements/create-index.mdx", + "mode": "100644", + "type": "blob", + "sha": "bf482106c29c581c2c8c0a06f06316029626b5d6", + "size": 6229, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bf482106c29c581c2c8c0a06f06316029626b5d6" + }, + { + "path": "resources/turso/sql-reference/statements/create-materialized-view.mdx", + "mode": "100644", + "type": "blob", + "sha": "b5cf6e94b5e8c2e196ddb093e527053a2868b3c3", + "size": 3257, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b5cf6e94b5e8c2e196ddb093e527053a2868b3c3" + }, + { + "path": "resources/turso/sql-reference/statements/create-table.mdx", + "mode": "100644", + "type": "blob", + "sha": "42dac67eb26abbdb916837d3eb81edbcbe88b29a", + "size": 12994, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/42dac67eb26abbdb916837d3eb81edbcbe88b29a" + }, + { + "path": "resources/turso/sql-reference/statements/create-trigger.mdx", + "mode": "100644", + "type": "blob", + "sha": "bed3de13c0f271e0cecd72e7e60da311fb5880f5", + "size": 8401, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bed3de13c0f271e0cecd72e7e60da311fb5880f5" + }, + { + "path": "resources/turso/sql-reference/statements/create-type.mdx", + "mode": "100644", + "type": "blob", + "sha": "584cd17842d57ccd8008bc61c2a39f47b1ec86fb", + "size": 20132, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/584cd17842d57ccd8008bc61c2a39f47b1ec86fb" + }, + { + "path": "resources/turso/sql-reference/statements/create-view.mdx", + "mode": "100644", + "type": "blob", + "sha": "7cac96d36d5296e8b60d7744f2d94b85dc347246", + "size": 2704, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7cac96d36d5296e8b60d7744f2d94b85dc347246" + }, + { + "path": "resources/turso/sql-reference/statements/create-virtual-table.mdx", + "mode": "100644", + "type": "blob", + "sha": "02af84e89488fdc84a7c5b2d9544b229e34d4dea", + "size": 3518, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/02af84e89488fdc84a7c5b2d9544b229e34d4dea" + }, + { + "path": "resources/turso/sql-reference/statements/delete.mdx", + "mode": "100644", + "type": "blob", + "sha": "08ad311a21180e80cbd1dd9db83cd9d0fc1f266c", + "size": 3401, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/08ad311a21180e80cbd1dd9db83cd9d0fc1f266c" + }, + { + "path": "resources/turso/sql-reference/statements/detach-database.mdx", + "mode": "100644", + "type": "blob", + "sha": "6358a48326dacad5fd5aadf3c60dc37a0e076f1f", + "size": 1339, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/6358a48326dacad5fd5aadf3c60dc37a0e076f1f" + }, + { + "path": "resources/turso/sql-reference/statements/drop-domain.mdx", + "mode": "100644", + "type": "blob", + "sha": "b26bfec0dad3c3e181f4334a82e4a37d33588193", + "size": 2548, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b26bfec0dad3c3e181f4334a82e4a37d33588193" + }, + { + "path": "resources/turso/sql-reference/statements/drop-index.mdx", + "mode": "100644", + "type": "blob", + "sha": "f763a5eee3a612b7f482a737b71c5b498944b125", + "size": 1570, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f763a5eee3a612b7f482a737b71c5b498944b125" + }, + { + "path": "resources/turso/sql-reference/statements/drop-table.mdx", + "mode": "100644", + "type": "blob", + "sha": "bc4afd6ea9b416ab28b3aa9c32abc6b6387bcbb7", + "size": 1835, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/bc4afd6ea9b416ab28b3aa9c32abc6b6387bcbb7" + }, + { + "path": "resources/turso/sql-reference/statements/drop-trigger.mdx", + "mode": "100644", + "type": "blob", + "sha": "f43ed8f41a39bf425ca060eeacab25661d407e59", + "size": 1676, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f43ed8f41a39bf425ca060eeacab25661d407e59" + }, + { + "path": "resources/turso/sql-reference/statements/drop-type.mdx", + "mode": "100644", + "type": "blob", + "sha": "54d709793e4fb04f0542e3db98c99a32fb04097d", + "size": 2034, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/54d709793e4fb04f0542e3db98c99a32fb04097d" + }, + { + "path": "resources/turso/sql-reference/statements/drop-view.mdx", + "mode": "100644", + "type": "blob", + "sha": "d0c8451751a3c40b141ecac83949f4ce4c5ca24b", + "size": 1320, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d0c8451751a3c40b141ecac83949f4ce4c5ca24b" + }, + { + "path": "resources/turso/sql-reference/statements/explain.mdx", + "mode": "100644", + "type": "blob", + "sha": "ad71448a79c3bb5dee06f6e36ffee08acc573adf", + "size": 3989, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ad71448a79c3bb5dee06f6e36ffee08acc573adf" + }, + { + "path": "resources/turso/sql-reference/statements/insert.mdx", + "mode": "100644", + "type": "blob", + "sha": "b828af5c152d54a4d5d9e9b70f5e73b68ec1d1ae", + "size": 8669, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b828af5c152d54a4d5d9e9b70f5e73b68ec1d1ae" + }, + { + "path": "resources/turso/sql-reference/statements/replace.mdx", + "mode": "100644", + "type": "blob", + "sha": "a65d27c020e64bf2af067cade406cbeb4740419f", + "size": 3623, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a65d27c020e64bf2af067cade406cbeb4740419f" + }, + { + "path": "resources/turso/sql-reference/statements/select.mdx", + "mode": "100644", + "type": "blob", + "sha": "abca9bf0d79619fda9eeb17c22af391d84f0ec03", + "size": 15339, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/abca9bf0d79619fda9eeb17c22af391d84f0ec03" + }, + { + "path": "resources/turso/sql-reference/statements/transactions.mdx", + "mode": "100644", + "type": "blob", + "sha": "36325f52c7ccf62d9fd1d009998d40ec1b9b23e6", + "size": 5615, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/36325f52c7ccf62d9fd1d009998d40ec1b9b23e6" + }, + { + "path": "resources/turso/sql-reference/statements/update.mdx", + "mode": "100644", + "type": "blob", + "sha": "f2fb959d446db1802974f96ebe99b50481cf3022", + "size": 5388, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/f2fb959d446db1802974f96ebe99b50481cf3022" + }, + { + "path": "resources/turso/sql-reference/statements/upsert.mdx", + "mode": "100644", + "type": "blob", + "sha": "c5cbb7461080a328a5c0b362982b31e27c04f04a", + "size": 6447, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/c5cbb7461080a328a5c0b362982b31e27c04f04a" + }, + { + "path": "resources/turso/sql-reference/statements/vacuum.mdx", + "mode": "100644", + "type": "blob", + "sha": "5f54806eee1e3b2a93f951dccc57da32d0cf1322", + "size": 8424, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5f54806eee1e3b2a93f951dccc57da32d0cf1322" + }, + { + "path": "resources/turso/sync", + "mode": "040000", + "type": "tree", + "sha": "8d85b20e0ea86eb6bb3835806b48f21c438cb512", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8d85b20e0ea86eb6bb3835806b48f21c438cb512" + }, + { + "path": "resources/turso/sync/checkpoint.mdx", + "mode": "100644", + "type": "blob", + "sha": "89cd92754327c4817e4ac3bcf115eaad6d98e844", + "size": 2031, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/89cd92754327c4817e4ac3bcf115eaad6d98e844" + }, + { + "path": "resources/turso/sync/conflict-resolution.mdx", + "mode": "100644", + "type": "blob", + "sha": "e10ae8d0c108a8ff7f461d2a28347abea0918a6c", + "size": 1027, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e10ae8d0c108a8ff7f461d2a28347abea0918a6c" + }, + { + "path": "resources/turso/sync/local-sync-server.mdx", + "mode": "100644", + "type": "blob", + "sha": "5ddd238e721443c6a0fe72612ef2f610d4eb55a2", + "size": 4181, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5ddd238e721443c6a0fe72612ef2f610d4eb55a2" + }, + { + "path": "resources/turso/sync/partial.mdx", + "mode": "100644", + "type": "blob", + "sha": "3dec89c4910d3ccd8112b83568a946527face49d", + "size": 34051, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3dec89c4910d3ccd8112b83568a946527face49d" + }, + { + "path": "resources/turso/sync/usage.mdx", + "mode": "100644", + "type": "blob", + "sha": "a5b3c8c04b357e45b61f351272604220321e65dd", + "size": 9303, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/a5b3c8c04b357e45b61f351272604220321e65dd" + }, + { + "path": "scripts", + "mode": "040000", + "type": "tree", + "sha": "8e98b2bb8530f069848e27572d2a8dc1b0b0b166", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/8e98b2bb8530f069848e27572d2a8dc1b0b0b166" + }, + { + "path": "scripts/sync-resources.sh", + "mode": "100644", + "type": "blob", + "sha": "0ebc314a1ffdb7270f46900891edbc5ff9bc43b8", + "size": 1521, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0ebc314a1ffdb7270f46900891edbc5ff9bc43b8" + }, + { + "path": "scripts/windows-singleton", + "mode": "040000", + "type": "tree", + "sha": "1547adb4c9d125af0d88be69be0fb30e5a00b4fd", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/1547adb4c9d125af0d88be69be0fb30e5a00b4fd" + }, + { + "path": "scripts/windows-singleton/assets", + "mode": "040000", + "type": "tree", + "sha": "b756c9f64e4365d07bcdd104de4aecee10512c17", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/b756c9f64e4365d07bcdd104de4aecee10512c17" + }, + { + "path": "scripts/windows-singleton/assets/ASPIRE-LICENSE.TXT", + "mode": "100644", + "type": "blob", + "sha": "984713a49622a96da110443c15477613bc12656b", + "size": 1116, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/984713a49622a96da110443c15477613bc12656b" + }, + { + "path": "scripts/windows-singleton/assets/aspire-dashboard.json", + "mode": "100644", + "type": "blob", + "sha": "b2ef73f01dd94f37f6a13d2c939541e3057b3671", + "size": 252, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b2ef73f01dd94f37f6a13d2c939541e3057b3671" + }, + { + "path": "scripts/windows-singleton/build.ts", + "mode": "100644", + "type": "blob", + "sha": "be305c9d9864561a6295dd53879955fd704ee16b", + "size": 6407, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/be305c9d9864561a6295dd53879955fd704ee16b" + }, + { + "path": "scripts/windows-singleton/entries", + "mode": "040000", + "type": "tree", + "sha": "9b7117141701a60ef251861c761460af2fa870aa", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/9b7117141701a60ef251861c761460af2fa870aa" + }, + { + "path": "scripts/windows-singleton/entries/workers-api.ts", + "mode": "100644", + "type": "blob", + "sha": "7d04a466c4338d9b05cfab18270a14aa64203352", + "size": 260, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7d04a466c4338d9b05cfab18270a14aa64203352" + }, + { + "path": "scripts/windows-singleton/entries/workers.ts", + "mode": "100644", + "type": "blob", + "sha": "98a3cb5ff2cc3927186b8e11d7f443b918a995b7", + "size": 762, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/98a3cb5ff2cc3927186b8e11d7f443b918a995b7" + }, + { + "path": "services", + "mode": "040000", + "type": "tree", + "sha": "27338f5736056f1ba886c78c79db487e7e32b3c2", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/27338f5736056f1ba886c78c79db487e7e32b3c2" + }, + { + "path": "services/_shared", + "mode": "040000", + "type": "tree", + "sha": "4d83cb4dbbf59b416594a6526c1faf0953a2bfc9", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4d83cb4dbbf59b416594a6526c1faf0953a2bfc9" + }, + { + "path": "services/_shared/plugin-service-context.ts", + "mode": "100644", + "type": "blob", + "sha": "43c7cc3b7629bd75124e2fd496bfdc24cc24ddf1", + "size": 3177, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/43c7cc3b7629bd75124e2fd496bfdc24cc24ddf1" + }, + { + "path": "services/eischat", + "mode": "040000", + "type": "tree", + "sha": "c32130c2ced292ba9002f7885e6c6c5fff98e4c6", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/c32130c2ced292ba9002f7885e6c6c5fff98e4c6" + }, + { + "path": "services/eischat/deno.json", + "mode": "100644", + "type": "blob", + "sha": "74b177adf6c6576dfefa770659bc7d1d1254e6c4", + "size": 1038, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/74b177adf6c6576dfefa770659bc7d1d1254e6c4" + }, + { + "path": "services/eischat/src", + "mode": "040000", + "type": "tree", + "sha": "f88d727b7086a7bc6eb5b684f961e39522161a2b", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/f88d727b7086a7bc6eb5b684f961e39522161a2b" + }, + { + "path": "services/eischat/src/builtin-skills.ts", + "mode": "100644", + "type": "blob", + "sha": "86f993757a28b12fe3ccc54173476771f27b44a5", + "size": 24231, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/86f993757a28b12fe3ccc54173476771f27b44a5" + }, + { + "path": "services/eischat/src/channel-client.ts", + "mode": "100644", + "type": "blob", + "sha": "332266dc22fb2da894aacedeb58713c6c9038980", + "size": 1285, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/332266dc22fb2da894aacedeb58713c6c9038980" + }, + { + "path": "services/eischat/src/embeddings.ts", + "mode": "100644", + "type": "blob", + "sha": "d2805ebc3c84e6015bbd48562a221b88f18091ff", + "size": 12496, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d2805ebc3c84e6015bbd48562a221b88f18091ff" + }, + { + "path": "services/eischat/src/embeddings_test.ts", + "mode": "100644", + "type": "blob", + "sha": "ae4a8bf40272ca150f627c64b301bc18b7593d38", + "size": 4748, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ae4a8bf40272ca150f627c64b301bc18b7593d38" + }, + { + "path": "services/eischat/src/jobs.ts", + "mode": "100644", + "type": "blob", + "sha": "7a0f950ceb5340d4e62e6faa5594aa36a5eb5976", + "size": 3734, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7a0f950ceb5340d4e62e6faa5594aa36a5eb5976" + }, + { + "path": "services/eischat/src/main.ts", + "mode": "100644", + "type": "blob", + "sha": "b0f44dfc95352a578a212e1ca214c8e1a5ed6981", + "size": 702, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b0f44dfc95352a578a212e1ca214c8e1a5ed6981" + }, + { + "path": "services/eischat/src/router.ts", + "mode": "100644", + "type": "blob", + "sha": "d0f5b598fbcd8accc1508fb3647f1318747cd4af", + "size": 847, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d0f5b598fbcd8accc1508fb3647f1318747cd4af" + }, + { + "path": "services/eischat/src/routers", + "mode": "040000", + "type": "tree", + "sha": "322e46586ff9f5f0511180224a0d6cab43a68251", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/322e46586ff9f5f0511180224a0d6cab43a68251" + }, + { + "path": "services/eischat/src/routers/channel.ts", + "mode": "100644", + "type": "blob", + "sha": "d75599aaf6fd37702f5708f956aa29a9cfe44919", + "size": 27587, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/d75599aaf6fd37702f5708f956aa29a9cfe44919" + }, + { + "path": "services/eischat/src/routers/health.ts", + "mode": "100644", + "type": "blob", + "sha": "ef4504d402ffcc1fccf69ec0d0ce0490cebc93d1", + "size": 432, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ef4504d402ffcc1fccf69ec0d0ce0490cebc93d1" + }, + { + "path": "services/eischat/src/routers/skills.ts", + "mode": "100644", + "type": "blob", + "sha": "302f224ad9cfa861eff5e4ca54b12e17ed9346bd", + "size": 11829, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/302f224ad9cfa861eff5e4ca54b12e17ed9346bd" + }, + { + "path": "services/eischat/src/routers/v1.ts", + "mode": "100644", + "type": "blob", + "sha": "cce3038be5ef8220fe6a09ea3635329165b98998", + "size": 3157, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/cce3038be5ef8220fe6a09ea3635329165b98998" + }, + { + "path": "services/eischat/src/sharing.ts", + "mode": "100644", + "type": "blob", + "sha": "ea5756535dd6324267897b86f37af6480bd6d191", + "size": 5323, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/ea5756535dd6324267897b86f37af6480bd6d191" + }, + { + "path": "services/eischat/src/skills-git.ts", + "mode": "100644", + "type": "blob", + "sha": "b012d534ca5dedd828ce9c596ebcd6d372bdf86e", + "size": 11772, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b012d534ca5dedd828ce9c596ebcd6d372bdf86e" + }, + { + "path": "services/eischat/src/vision.ts", + "mode": "100644", + "type": "blob", + "sha": "5e7f66ae97945bb7e4ec16df0856705c07d8db9e", + "size": 7609, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/5e7f66ae97945bb7e4ec16df0856705c07d8db9e" + }, + { + "path": "services/eischat/src/vision_test.ts", + "mode": "100644", + "type": "blob", + "sha": "4bac634a1a5b09fe9712c4cc41f4399101b60fe1", + "size": 3046, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/4bac634a1a5b09fe9712c4cc41f4399101b60fe1" + }, + { + "path": "streams", + "mode": "040000", + "type": "tree", + "sha": "6d067ff92e69abc6e221effd628d38725a20dc29", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/6d067ff92e69abc6e221effd628d38725a20dc29" + }, + { + "path": "streams/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "fb669f905faa4d80fe5ee9d2bb75d4b42c3462a7", + "size": 521, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/fb669f905faa4d80fe5ee9d2bb75d4b42c3462a7" + }, + { + "path": "streams/notifications-stream.ts", + "mode": "100644", + "type": "blob", + "sha": "b8b93aa616b0e96cfdd7c9cf8d75dd0826da5d74", + "size": 2112, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/b8b93aa616b0e96cfdd7c9cf8d75dd0826da5d74" + }, + { + "path": "tools", + "mode": "040000", + "type": "tree", + "sha": "bee0ca1097de7568a310081aa64d0a860ee20610", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/bee0ca1097de7568a310081aa64d0a860ee20610" + }, + { + "path": "tools/excalidraw-mcp.ts", + "mode": "100644", + "type": "blob", + "sha": "7ae09c20a09bc8d9f80205b21710219acaf42804", + "size": 24047, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/7ae09c20a09bc8d9f80205b21710219acaf42804" + }, + { + "path": "tools/legacy-archeo-mcp.ts", + "mode": "100644", + "type": "blob", + "sha": "1bd8d8787c847db07beb290a9228ffbe8402927c", + "size": 49341, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/1bd8d8787c847db07beb290a9228ffbe8402927c" + }, + { + "path": "tools/mcp-http.ts", + "mode": "100644", + "type": "blob", + "sha": "2206ed5d1decb4633f156391fee9e7c618eea744", + "size": 6551, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2206ed5d1decb4633f156391fee9e7c618eea744" + }, + { + "path": "workers", + "mode": "040000", + "type": "tree", + "sha": "33de22b31c886ee41a8713d96a2e8be5bc94a803", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/33de22b31c886ee41a8713d96a2e8be5bc94a803" + }, + { + "path": "workers/deno.json", + "mode": "100644", + "type": "blob", + "sha": "3c4468fafd8f68d4650c01a66628ce26ffc345f2", + "size": 81, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/3c4468fafd8f68d4650c01a66628ce26ffc345f2" + }, + { + "path": "workers/job-definitions.ts", + "mode": "100644", + "type": "blob", + "sha": "e048e61e376b4eb9dbded90a6fa40dbe2504d619", + "size": 4286, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/e048e61e376b4eb9dbded90a6fa40dbe2504d619" + }, + { + "path": "workers/jobs", + "mode": "040000", + "type": "tree", + "sha": "867df610b7840235213ce058cc4542fcf35484fe", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/867df610b7840235213ce058cc4542fcf35484fe" + }, + { + "path": "workers/jobs/embed-document.ts", + "mode": "100644", + "type": "blob", + "sha": "0a90fe4ab4d14507e856117f028b74f529b1616d", + "size": 5153, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0a90fe4ab4d14507e856117f028b74f529b1616d" + }, + { + "path": "workers/jobs/health-check.ts", + "mode": "100644", + "type": "blob", + "sha": "31812131d047b0ba90682fcabf178f9299967dee", + "size": 424, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/31812131d047b0ba90682fcabf178f9299967dee" + }, + { + "path": "workers/jobs/transcribe-image.ts", + "mode": "100644", + "type": "blob", + "sha": "83893aa6d29bf87976d7a0004e46bb731b921d97", + "size": 5508, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/83893aa6d29bf87976d7a0004e46bb731b921d97" + }, + { + "path": "workers/mod.ts", + "mode": "100644", + "type": "blob", + "sha": "2e9570b73b31cb8f6b82d02c98eb0c62e250db09", + "size": 250, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/2e9570b73b31cb8f6b82d02c98eb0c62e250db09" + }, + { + "path": "workers/runtime.ts", + "mode": "100644", + "type": "blob", + "sha": "0e16306a4f2d0e341e2b5caaa16dce862eea0c59", + "size": 2698, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/0e16306a4f2d0e341e2b5caaa16dce862eea0c59" + }, + { + "path": "workers/tasks", + "mode": "040000", + "type": "tree", + "sha": "4c610bd3cd46490b669e13c0b17f042789b79818", + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/trees/4c610bd3cd46490b669e13c0b17f042789b79818" + }, + { + "path": "workers/tasks/validate-payload.ts", + "mode": "100644", + "type": "blob", + "sha": "218b709f8b5f1e6b9b04cc92ef3bf51378ca11cc", + "size": 352, + "url": "https://api.github.com/repos/rickylabs/eis-chat/git/blobs/218b709f8b5f1e6b9b04cc92ef3bf51378ca11cc" + } + ], + "truncated": false +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__desktop-chrome.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__desktop-chrome.ts new file mode 100644 index 000000000..16cfc637b --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__desktop-chrome.ts @@ -0,0 +1,75 @@ +/** + * Native desktop chrome (tray + auto-update), gated so the SAME app runs + * unchanged as a plain web server under `deno task dev` / Aspire. + * + * `deno desktop` (Deno 2.9+) exposes desktop-only globals — `Deno.BrowserWindow`, + * `Deno.Tray`, `Deno.dock`, `Deno.autoUpdate`, `Deno.desktopVersion`, `Notification` + * — that DO NOT exist under `deno run`. We feature-detect `Deno.BrowserWindow` + * (the documented idiom, per resources/deno-desktop/notifications.md) and no-op in + * the web/Aspire build. Nothing here runs unless the process is a packaged desktop + * app, so importing + calling `initDesktopChrome()` from main.ts is safe everywhere. + * + * These globals are not in the stable Deno type lib, so we describe just the slice + * we use via a local structural type and read them off `Deno` through it — no + * `any`, no ambient global augmentation, gate stays lint-clean. + */ + +interface TrayMenuItem { + item: { label: string; id: string; enabled?: boolean; accelerator?: string }; +} + +interface DesktopTray { + setTooltip(text: string | null): void; + setMenu(items: (TrayMenuItem | 'separator')[] | null): void; + addEventListener( + type: 'menuclick', + handler: (e: { detail: { id: string } }) => void, + ): void; + readonly trayId: number; +} + +interface DesktopApi { + BrowserWindow?: unknown; + desktopVersion?: string | null; + Tray?: new () => DesktopTray; + autoUpdate?: (options: { url?: string; interval?: number }) => void; +} + +/** The desktop-only surface of `Deno`, all optional (undefined under `deno run`). */ +const desktop = Deno as unknown as DesktopApi; + +/** True only inside a packaged `deno desktop` binary. */ +export function isDesktopRuntime(): boolean { + return typeof desktop.BrowserWindow !== 'undefined'; +} + +/** + * Install tray + auto-update. No-op (and cheap) under the web/Aspire build. + * Call once, after the Fresh app is defined in main.ts. + */ +export function initDesktopChrome(): void { + if (!isDesktopRuntime() || !desktop.Tray) return; + + const tray = new desktop.Tray(); + // trayId === 0 → the platform could not create a status-area icon; bail quietly. + if (tray.trayId === 0) return; + + tray.setTooltip('eis-chat'); + tray.setMenu([ + { item: { label: 'eis-chat', id: 'about', enabled: false } }, + 'separator', + { item: { label: 'Quit', id: 'quit', enabled: true, accelerator: 'CmdOrCtrl+Q' } }, + ]); + tray.addEventListener('menuclick', (e) => { + if (e.detail.id === 'quit') Deno.exit(0); + }); + + // Auto-update: a no-op unless compiled with a `version` + `desktop.release.baseUrl` + // (`Deno.desktopVersion` is null under `deno run`). NOTE: on Windows the runtime + // STAGES but does not APPLY updates yet (macOS/Linux only) — safe to leave in; it + // just won't self-update on Windows. Only wire it once a release baseUrl exists. + const releaseBaseUrl = Deno.env.get('EISCHAT_RELEASE_BASE_URL'); + if (releaseBaseUrl && desktop.autoUpdate) { + desktop.autoUpdate({ url: releaseBaseUrl }); + } +} diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.test.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.test.ts new file mode 100644 index 000000000..95e5d4f37 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.test.ts @@ -0,0 +1,66 @@ +import { assertEquals, assertThrows } from '@std/assert'; +import { join } from '@std/path'; +import { + resolveWindowsSingletonPaths, + windowsSingletonServiceEnvironment, + windowsSingletonTelemetryEnvironment, +} from './windows-singleton.ts'; + +Deno.test('windows singleton paths use per-user application data', () => { + const paths = resolveWindowsSingletonPaths( + { LOCALAPPDATA: 'C:\\Users\\alice\\AppData\\Local' }, + 'C:\\Program Files\\eis-chat', + ); + + assertEquals(paths.dataDir, join('C:\\Users\\alice\\AppData\\Local', 'eis-chat')); + assertEquals(paths.databaseUrl, `file:${join(paths.dataDir, 'eis_chat.db')}`); + assertEquals(paths.channelDataDir, join(paths.dataDir, 'channels')); + assertEquals(paths.logDir, join(paths.dataDir, 'logs')); + assertEquals(paths.sidecarPath, join('C:\\Program Files\\eis-chat', 'eischat-service.exe')); +}); + +Deno.test('windows singleton paths accept an explicit sidecar override', () => { + const paths = resolveWindowsSingletonPaths( + { APPDATA: 'C:\\Users\\alice\\AppData\\Roaming', EISCHAT_SINGLETON_SIDECAR: 'D:\\eis.exe' }, + 'C:\\Program Files\\eis-chat', + ); + assertEquals(paths.sidecarPath, 'D:\\eis.exe'); +}); + +Deno.test('windows singleton paths require an application data root', () => { + assertThrows( + () => resolveWindowsSingletonPaths({}, 'C:\\Program Files\\eis-chat'), + Error, + 'LOCALAPPDATA or APPDATA', + ); +}); + +Deno.test('windows singleton service environment covers server and browser discovery', () => { + const runtime = windowsSingletonServiceEnvironment(); + assertEquals(runtime.services__eischat__http__0, 'http://127.0.0.1:3001'); + assertEquals(runtime.EISCHAT_URL, 'http://127.0.0.1:3001'); + assertEquals(runtime['services__workers-api__http__0'], 'http://127.0.0.1:8091'); + assertEquals(runtime.LEGACY_ARCHEO_MCP_URL, 'http://127.0.0.1:8095'); + assertEquals(runtime.DURABLE_STREAMS_URL, 'http://127.0.0.1:4437'); + assertEquals(runtime.VITE_services__eischat__http__0, undefined); + + const build = windowsSingletonServiceEnvironment({ includeVite: true }); + assertEquals(build.VITE_services__eischat__http__0, 'http://127.0.0.1:3001'); + assertEquals(build.VITE_EISCHAT_URL, 'http://127.0.0.1:3001'); + assertEquals(build['VITE_services__workers-api__http__0'], undefined); + assertEquals(build.VITE_WORKERS_API_URL, 'http://127.0.0.1:8091'); + assertEquals(build.VITE_DURABLE_STREAMS_URL, 'http://127.0.0.1:4437'); +}); + +Deno.test('windows singleton telemetry environment enables compiled Deno OTLP', () => { + const env = windowsSingletonTelemetryEnvironment({ serviceName: 'eischat' }); + assertEquals(env.OTEL_DENO, 'true'); + assertEquals(env.OTEL_DENO_TRACING, 'true'); + assertEquals(env.OTEL_DENO_METRICS, 'true'); + assertEquals(env.OTEL_DENO_CONSOLE, 'capture'); + assertEquals(env.OTEL_PROPAGATORS, 'tracecontext,baggage'); + assertEquals(env.OTEL_SERVICE_NAME, 'eischat'); + assertEquals(env.OTEL_EXPORTER_OTLP_ENDPOINT, 'http://127.0.0.1:4318'); + assertEquals(env.OTEL_EXPORTER_OTLP_PROTOCOL, 'http/protobuf'); + assertEquals(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, undefined); +}); diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.ts new file mode 100644 index 000000000..28757bb97 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/apps__dashboard__lib__windows-singleton.ts @@ -0,0 +1,389 @@ +import { dirname, join } from '@std/path'; + +export const WINDOWS_SINGLETON_SERVICE_URLS = { + eischat: 'http://127.0.0.1:3001', + streams: 'http://127.0.0.1:4437', + 'workers-api': 'http://127.0.0.1:8091', + 'legacy-archeo-mcp': 'http://127.0.0.1:8095', + 'excalidraw-mcp': 'http://127.0.0.1:8096', +} as const; + +const URLS = WINDOWS_SINGLETON_SERVICE_URLS; + +export const WINDOWS_SINGLETON_ASPIRE_ENDPOINTS = { + frontend: 'http://127.0.0.1:18888', + otlpGrpc: 'http://127.0.0.1:4317', + otlpHttp: 'http://127.0.0.1:4318', +} as const; + +/** + * Build the complete Deno OpenTelemetry environment for compiled processes. + * + * Deno embeds the OTEL enablement flags and propagators in `deno compile` and + * `deno desktop` metadata, so this environment must be present both while the + * executables are built and while they run. Exporter endpoints, resource + * attributes, sampling and batching remain runtime configuration. + */ +export function windowsSingletonTelemetryEnvironment( + options: { readonly serviceName?: string } = {}, +): Record { + const env: Record = { + OTEL_DENO: 'true', + OTEL_DENO_TRACING: 'true', + OTEL_DENO_METRICS: 'true', + OTEL_DENO_CONSOLE: 'capture', + OTEL_PROPAGATORS: 'tracecontext,baggage', + OTEL_EXPORTER_OTLP_ENDPOINT: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp, + OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf', + OTEL_RESOURCE_ATTRIBUTES: + 'service.namespace=eis-chat,service.version=1.0.0,deployment.environment.name=windows-singleton', + OTEL_TRACES_SAMPLER: 'always_on', + OTEL_BSP_SCHEDULE_DELAY: '1000', + OTEL_BLRP_SCHEDULE_DELAY: '1000', + OTEL_METRIC_EXPORT_INTERVAL: '1000', + }; + if (options.serviceName) env.OTEL_SERVICE_NAME = options.serviceName; + return env; +} + +/** + * Build the service-discovery environment used by the packaged singleton. + * + * NetScript resolves `services____http__0` in Deno, while browser code + * must receive the corresponding `VITE_services__...` value during the Vite + * build. Hyphenated service names use the SDK's `VITE__URL` fallback + * because Vite cannot emit their canonical key as a dotted define expression. + * The short `*_URL` aliases also cover the app's MCP / durable-stream + * compatibility seams. Keeping the complete graph here prevents the build-time + * and process-time environments from drifting. + */ +export function windowsSingletonServiceEnvironment( + options: { readonly includeVite?: boolean } = {}, +): Record { + const env: Record = {}; + for (const [name, url] of Object.entries(URLS)) { + const alias = name.toUpperCase().replaceAll('-', '_'); + env[`services__${name}__http__0`] = url; + env[`${alias}_URL`] = url; + if (options.includeVite) { + // Vite converts each VITE_* key into an esbuild define expression. A + // hyphenated property is not valid dotted JavaScript, so use the SDK's + // documented VITE__URL fallback for those service names. + if (/^[A-Za-z0-9_]+$/.test(name)) env[`VITE_services__${name}__http__0`] = url; + env[`VITE_${alias}_URL`] = url; + } + } + env.DURABLE_STREAMS_URL = URLS.streams; + if (options.includeVite) env.VITE_DURABLE_STREAMS_URL = URLS.streams; + return env; +} + +export interface WindowsSingletonPaths { + readonly dataDir: string; + readonly databaseUrl: string; + readonly channelDataDir: string; + readonly logDir: string; + readonly sidecarPath: string; +} + +export interface WindowsSingletonHandle { + readonly children: readonly Deno.ChildProcess[]; + readonly serviceUrl: string; + stop(): void; +} + +interface SidecarSpec { + readonly name: string; + readonly executable: string; + readonly args?: readonly string[]; + readonly url?: string; + readonly env?: Readonly>; + readonly ready?: 'http' | 'tcp' | 'process'; +} + +function desktopRuntime(): boolean { + const runtime = Deno as typeof Deno & { readonly BrowserWindow?: unknown }; + return runtime.BrowserWindow !== undefined; +} + +/** Resolve writable data and adjacent-sidecar paths without relying on the launch cwd. */ +export function resolveWindowsSingletonPaths( + env: Readonly>, + executableDir: string, +): WindowsSingletonPaths { + const appData = env.LOCALAPPDATA ?? env.APPDATA; + if (!appData) throw new Error('windows-singleton requires LOCALAPPDATA or APPDATA.'); + const dataDir = join(appData, 'eis-chat'); + return { + dataDir, + databaseUrl: `file:${join(dataDir, 'eis_chat.db')}`, + channelDataDir: join(dataDir, 'channels'), + logDir: join(dataDir, 'logs'), + sidecarPath: env.EISCHAT_SINGLETON_SIDECAR ?? join(executableDir, 'eischat-service.exe'), + }; +} + +async function httpReachable(url: string): Promise { + try { + await fetch(new URL('/health', url), { signal: AbortSignal.timeout(1_000) }); + return true; + } catch { + return false; + } +} + +async function endpointReachable(url: string): Promise { + try { + const response = await fetch(url, { signal: AbortSignal.timeout(1_000) }); + return response.ok; + } catch { + return false; + } +} + +async function tcpReachable(hostname: string, port: number): Promise { + try { + const connection = await Deno.connect({ hostname, port }); + connection.close(); + return true; + } catch { + return false; + } +} + +async function waitUntilReady(child: Deno.ChildProcess, spec: SidecarSpec): Promise { + const deadline = Date.now() + 120_000; + while (Date.now() < deadline) { + if (spec.ready === 'process') { + await new Promise((resolve) => setTimeout(resolve, 1_000)); + const status = await Promise.race([ + child.status, + new Promise((resolve) => setTimeout(() => resolve(undefined), 10)), + ]); + if (!status) return; + } else if (spec.ready === 'tcp') { + if (await tcpReachable('127.0.0.1', 6379)) return; + } else if (spec.url && await httpReachable(spec.url)) return; + + const status = await Promise.race([ + child.status, + new Promise((resolve) => setTimeout(() => resolve(undefined), 250)), + ]); + if (status) throw new Error(`${spec.name} exited with code ${status.code}.`); + } + throw new Error(`${spec.name} did not become ready${spec.url ? ` at ${spec.url}` : ''}.`); +} + +async function spawnSidecar( + spec: SidecarSpec, + baseEnv: Record, + logDir: string, +): Promise { + const child = new Deno.Command(spec.executable, { + args: spec.args ? [...spec.args] : [], + clearEnv: true, + env: { ...baseEnv, OTEL_SERVICE_NAME: spec.name, ...spec.env }, + stdin: 'piped', + stdout: 'piped', + stderr: 'piped', + }).spawn(); + await child.stdin.close(); + const stdout = await Deno.open(join(logDir, `${spec.name}.stdout.log`), { + create: true, + write: true, + truncate: true, + }); + const stderr = await Deno.open(join(logDir, `${spec.name}.stderr.log`), { + create: true, + write: true, + truncate: true, + }); + void child.stdout.pipeTo(stdout.writable).catch(() => undefined); + void child.stderr.pipeTo(stderr.writable).catch(() => undefined); + await waitUntilReady(child, spec); + return child; +} + +/** Start the complete adjacent process graph for a packaged Deno Desktop singleton. */ +export async function startWindowsSingleton(): Promise { + if (!desktopRuntime() || Deno.env.get('EISCHAT_WINDOWS_SINGLETON') !== '1') return undefined; + + const serviceEnvironment = windowsSingletonServiceEnvironment(); + for (const [name, value] of Object.entries(serviceEnvironment)) Deno.env.set(name, value); + if (await httpReachable(URLS.eischat) && await httpReachable(URLS.streams)) return undefined; + + const executableDir = dirname(Deno.execPath()); + const paths = resolveWindowsSingletonPaths(Deno.env.toObject(), executableDir); + await Deno.mkdir(paths.channelDataDir, { recursive: true }); + await Deno.mkdir(paths.logDir, { recursive: true }); + await Deno.mkdir(join(paths.dataDir, 'streams'), { recursive: true }); + await Deno.mkdir(join(paths.dataDir, 'garnet'), { recursive: true }); + + const permissions = Object.fromEntries( + await Promise.all((['env', 'read', 'write', 'run', 'net'] as const).map(async (name) => [ + name, + (await Deno.permissions.query({ name })).state, + ])), + ); + const baseEnv = Deno.env.toObject(); + const removedRuntimeEnv = Object.keys(baseEnv).filter((name) => + name.startsWith('DENO_') || name === 'NODE_CHANNEL_FD' + ); + for (const name of removedRuntimeEnv) delete baseEnv[name]; + + const common = { + DATABASE_URL: paths.databaseUrl, + SQLITE_URI: paths.databaseUrl, + DB_PROVIDER: 'sqlite', + DATABASE_PROVIDER: 'sqlite', + GARNET_URI: '127.0.0.1:6379', + REDIS_URI: '127.0.0.1:6379', + CACHE_PROVIDER: 'garnet', + LOG_LEVEL: 'debug', + DEBUG: 'netscript:*', + ...windowsSingletonTelemetryEnvironment(), + }; + Object.assign(baseEnv, common); + + const dashboardRequested = Deno.env.get('EISCHAT_ASPIRE_DASHBOARD') === '1'; + const dashboardUrl = dashboardRequested ? WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend : undefined; + const dashboardAlreadyRunning = dashboardUrl ? await endpointReachable(dashboardUrl) : false; + const specs: SidecarSpec[] = []; + if (dashboardRequested && !dashboardAlreadyRunning) { + specs.push({ + name: 'aspire-dashboard', + executable: join(executableDir, 'tools', 'aspire', 'aspire.exe'), + args: [ + 'dashboard', + 'run', + '--frontend-url', + WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend, + '--otlp-grpc-url', + WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpGrpc, + '--otlp-http-url', + WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp, + '--config-file-path', + join(executableDir, 'tools', 'aspire', 'aspire-dashboard.json'), + '--allow-anonymous', + '--non-interactive', + ], + url: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend, + env: { + ASPNETCORE_URLS: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.frontend, + ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpGrpc, + ASPIRE_DASHBOARD_OTLP_HTTP_ENDPOINT_URL: WINDOWS_SINGLETON_ASPIRE_ENDPOINTS.otlpHttp, + ASPIRE_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS: 'true', + ASPIRE_DASHBOARD_CONFIG_FILE_PATH: join( + executableDir, + 'tools', + 'aspire', + 'aspire-dashboard.json', + ), + // The receiver is loopback-only and anonymous. Preparing CORS here + // makes it usable by a future browser OTEL SDK without changing the + // bundled dashboard; Deno's server-side exporter does not need CORS. + DASHBOARD__OTLP__CORS__ALLOWEDORIGINS: '*', + }, + }); + } + specs.push( + { + name: 'garnet', + executable: join(executableDir, 'tools', 'garnet', 'garnet-server.exe'), + args: ['--port', '6379'], + ready: 'tcp', + }, + { + name: 'streams', + executable: join(executableDir, 'streams-service.exe'), + url: URLS.streams, + env: { PORT: '4437', STREAMS_DATA_DIR: join(paths.dataDir, 'streams') }, + }, + { + name: 'workers-api', + executable: join(executableDir, 'workers-api-service.exe'), + url: URLS['workers-api'], + env: { PORT: '8091', services__streams__http__0: URLS.streams }, + }, + { + name: 'eischat', + executable: paths.sidecarPath, + url: URLS.eischat, + env: { + PORT: '3001', + CHANNEL_DATA_DIR: paths.channelDataDir, + EISCHAT_NO_DOTENV: '1', + 'services__workers-api__http__0': URLS['workers-api'], + services__streams__http__0: URLS.streams, + }, + }, + { + name: 'legacy-archeo-mcp', + executable: join(executableDir, 'legacy-archeo-mcp-service.exe'), + url: URLS['legacy-archeo-mcp'], + env: { PORT: '8095', MCP_TRANSPORT: 'http' }, + }, + { + name: 'excalidraw-mcp', + executable: join(executableDir, 'excalidraw-mcp-service.exe'), + url: URLS['excalidraw-mcp'], + env: { PORT: '8096', MCP_TRANSPORT: 'http' }, + }, + { + name: 'workers', + executable: join(executableDir, 'workers-service.exe'), + ready: 'process', + env: { + WORKER_CONCURRENCY: '2', + services__eischat__http__0: URLS.eischat, + services__workers_api__http__0: URLS['workers-api'], + services__streams__http__0: URLS.streams, + }, + }, + ); + + await Deno.writeTextFile( + join(paths.logDir, 'desktop-supervisor.log'), + `${new Date().toISOString()} starting full stack\n` + + `${ + JSON.stringify( + { + paths, + permissions, + removedRuntimeEnv, + serviceEnvironment, + telemetryEnvironment: common, + dashboardUrl, + dashboardAlreadyRunning, + resources: specs, + }, + null, + 2, + ) + }\n`, + { append: true }, + ); + + const children: Deno.ChildProcess[] = []; + try { + for (const spec of specs) children.push(await spawnSidecar(spec, baseEnv, paths.logDir)); + } catch (error) { + for (const child of children.toReversed()) { + try { + child.kill('SIGKILL'); + } catch { /* already stopped */ } + } + throw error; + } + + const stop = () => { + for (const child of children.toReversed()) { + try { + child.kill('SIGTERM'); + } catch { /* best effort */ } + } + }; + globalThis.addEventListener('unload', stop, { once: true }); + console.log(`[windows-singleton] full stack ready (${children.length} processes)`); + return { children, serviceUrl: URLS.eischat, stop }; +} diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/aspire__PROPOSED-desktop-resource.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/aspire__PROPOSED-desktop-resource.md new file mode 100644 index 000000000..f25265aaa --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/aspire__PROPOSED-desktop-resource.md @@ -0,0 +1,122 @@ +# PROPOSED — register the `deno desktop` window as an Aspire dev-stack resource (#118 POC) + +> **DO NOT auto-apply.** `aspire/.helpers/*` is generator-owned (`GENERATED BY @netscript/cli`) and +> coordinator-staged. This file proposes the wiring for the supervisor to stage into the generator +> template / hand-edit block. It is the **pattern to lift upstream into NetScript** (mirrors +> `rickylabs/netscript-start` → `AddNetScriptApps` / `AddTaskBackedApp`). + +## Goal + +`aspire run` launches the native `deno desktop` window as a dev-stack resource **alongside** +dashboard / eischat / streams / workers — the desktop window reaches those services over `127.0.0.1` +via the exact same `services__{name}__http__0` discovery env vars the dashboard uses. This is the S1 +option-(b) topology, now driven from the apphost. + +## Reference (private `rickylabs/netscript-start`, .NET AppHost) + +- `Apps/NetScriptAppRegistrationExtensions.cs` → `AddTaskBackedApp(...)`: a Deno app with a custom + `TaskName` / `WatchMode` is registered as `AddDenoTask(name, workspaceRoot, taskName)` → + `builder.addExecutable('deno', ['task', ])`, then `.WithConfiguredHttpReferences(...)` + + `.WithConfiguredViteHttpReferences(...)` inject service discovery. The **Tauri** app there + (`AddTauriApp`) is just a task-backed app that additionally `.WithReference(remoteApp endpoint)`. +- `Deno/DenoExecutableExtensions.cs` → `AddNetScriptDenoExecutable(...)`: standard app path + (`AddDenoApp` + `WithHttpEndpoint`). **Our desktop resource follows the task-backed path, not this + one** — the desktop window has no externally-bound HTTP port to advertise (its `Deno.serve` + auto-binds an internal port the webview navigates to). + +Our TS apphost already mirrors this: `aspire/.helpers/register-apps.mts` registers `dashboard` as +`builder.addExecutable('dashboard', 'deno', workdir, ['task', 'dev'])` + `withEnvironment` discovery +injection. The desktop resource is a sibling of that block. + +## appsettings — add to `NetScript.Apps` + +```jsonc +"Apps": { + "dashboard": { /* unchanged */ }, + "desktop": { + "Enabled": false, // opt-in: `aspire run` only spawns the window when turned on + "Runtime": "deno", + "Type": "app", + "TaskName": "desktop:dev", // deno task desktop:dev = `deno desktop --hmr .` + "Workdir": "apps/dashboard", + "WatchMode": false, // deno desktop --hmr owns reload; don't double-watch + "ServiceReferences": ["eischat"], + "PluginReferences": ["streams"] + // NO "Port": the desktop window binds its own internal Deno.serve port; nothing to advertise. + } +} +``` + +`"Enabled": false` by default so CI / headless `aspire run` is unaffected; a developer flips it on +(or the supervisor stages an env/profile toggle) to get the window in the dev stack. + +## register-apps.mts — proposed hand-edit (sibling of the `dashboard` block) + +Insert after the `dashboard` block, before `return apps;`. It is the dashboard block minus +`withHttpEndpoint`, running `desktop:dev` instead of `dev`, reusing the same discovery env wiring: + +```ts +// --- desktop (deno desktop window; #118 POC) --- +// Task-backed executable running `deno task desktop:dev` (= `deno desktop --hmr .`). +// Same service-discovery env as the dashboard so the WINDOW reaches eischat/streams over +// 127.0.0.1; NO withHttpEndpoint — the window binds its own internal Deno.serve port. +if (config.Apps['desktop']?.Enabled === true) { + const desktop_workdir = resolveWorkspacePath(appHostDir, 'apps/dashboard'); + const desktop = builder.addExecutable('desktop', 'deno', desktop_workdir, [ + 'task', + 'desktop:dev', + ]); + + const desktop_otel = buildOtelEnvVars( + 'desktop', + config.Version, + 'executable', + config.Otel.HttpEndpoint, + ); + for (const [key, value] of Object.entries(desktop_otel)) { + await desktop.withEnvironment(key, value); + } + + // Service discovery — mirror the dashboard's wiring (eischat + streams). + { + const endpoint = await getResourceEndpoint(services.get('eischat'), 'http'); + if (endpoint) await desktop.withEnvironment('services__eischat__http__0', endpoint); + } + { + const endpoint = await getResourceEndpoint(plugins.get('streams'), 'http'); + if (endpoint) await desktop.withEnvironment('services__streams__http__0', endpoint); + } + { + const endpoint = await getResourceEndpoint(services.get('legacy-archeo-mcp'), 'http'); + if (endpoint) await desktop.withEnvironment('services__legacy-archeo-mcp__http__0', endpoint); + } + { + const endpoint = await getResourceEndpoint(services.get('excalidraw-mcp'), 'http'); + if (endpoint) await desktop.withEnvironment('services__excalidraw-mcp__http__0', endpoint); + } + + apps.set('desktop', desktop); +} +``` + +### Notes for staging + +- **Depends-on ordering:** the window should start after eischat/streams are up. If the generator + supports `.WaitFor(...)` (Aspire `WithReference`/`waitFor`), gate the desktop resource on eischat + so the first KB call doesn't race a cold service. Otherwise the chat/KB path degrades until + eischat binds — acceptable for a dev POC. +- **VITE_ vars not needed:** the desktop resource runs `desktop:dev` (server-side Deno), so the + server-side `services__*__http__0` form is what matters; the `VITE_…` client-inlined forms are + only needed if the _client bundle_ must know a URL at build time (it doesn't here — the browser + calls the same-origin `/api/*` routes). +- **Windows console:** `deno desktop --hmr` spawns the Vite dev server + the webview process; Aspire + captures its stdout/stderr like any executable resource. Expect the window to appear a few seconds + after `aspire run` reaches the desktop resource. + +## Lift-upstream summary (for NetScript) + +Generalize into `@netscript/cli`: when an `Apps.` entry has `Type: "app"` **and** a `TaskName` +resolving to a `desktop:*` task (or a new `Type: "desktop"`), register it as a task-backed +executable with **service-discovery injection but no HTTP endpoint**, optionally `WaitFor` its +`ServiceReferences`. This is exactly the `AddTauriApp` shape in the .NET reference minus the remote +reference — a first-class "native window as a dev-stack resource" primitive. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/docs__DESKTOP-SHELL.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/docs__DESKTOP-SHELL.md new file mode 100644 index 000000000..719daea78 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/docs__DESKTOP-SHELL.md @@ -0,0 +1,439 @@ +# Desktop shell — `deno desktop` window + packaging (#118) + +Current status (PR #150, `agent/windows-singleton-desktop`): **full-stack Windows singleton staged +and smoke-tested · adjacent sidecars launched directly by Deno Desktop · Aspire standalone telemetry +verified · MSI assembly still open**. + +This is the build/run/distribute reference for wrapping eis-chat as a native desktop app with +`deno desktop` (Deno 2.9+). The original Phase-1 dashboard-only investigation is retained below as +historical context. Its decision has been superseded by the verified `windows-singleton` experiment, +documented in the final section, which stages and supervises the complete process graph without +PowerShell or Docker. + +--- + +## Historical Phase-1 architecture decision (superseded for `windows-singleton`) + +### The problem + +`deno desktop` wraps a **single Fresh project** (`apps/dashboard`) into a native binary: it runs the +framework's production server as one `Deno.serve()` handler inside one Deno process, with an OS +webview pointed at it (`resources/deno-desktop/frameworks.md`, `index.md`, `comparison.md`). It has +**no official multi-process / sidecar story** — `comparison.md` lists it as "process group +(WebView)", explicitly contrasted against Electron's main+renderer+IPC model, and none of the 18 +desktop doc pages mention spawning or bundling a second service process. + +But eis-chat today is a **multi-process Aspire orchestration**. The dashboard reaches its backend +**only over HTTP** (there is no in-process/link mode in `@netscript/sdk` — `createServiceClient` +always returns an HTTP RPC client resolved from Aspire service-discovery env vars). At runtime the +dashboard depends on: + +| Process | Port | Role | Core-chat critical? | +| --------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------- | +| **eischat** | 3001 | oRPC service. **Sole writer** of the SQLite catalog + per-channel tursodb files. Chat history, channels, sessions, KB search. | **Yes** | +| **streams** | 4437 | Durable-streams runtime — live KB status + sharing registry (`useLiveQuery`). | No (degrades) | +| **workers** | (bg) | KB embedding / image transcription jobs. | No (KB ingest only) | +| **workers-api** | 8091 | Job enqueue (called by eischat, not the dashboard directly). | No (KB ingest only) | +| **legacy-archeo-mcp** | 8095 | Estate-analytics MCP tools. Falls back to stdio subprocess if no URL. | No (optional) | +| **excalidraw-mcp** | 8096 | Diagram widget MCP. Falls back to stdio subprocess. | No (optional) | +| LiteLLM gateway | (ext) | Sole LLM entry (`LITELLM_BASE_URL`). | **Yes** | + +**The hard constraint** (`services/eischat/src/channel-client.ts`): the native tursodb driver holds +an **exclusive OS file lock per DB** (os error 33 on double-open). eis-chat is therefore a +**single-writer architecture** — _only_ eischat opens `data/channels/.db` and the SQLite +catalog; everything else (dashboard, workers) reaches the data plane through eischat over HTTP. **A +dashboard-only desktop wrap cannot own the data plane; it must reach a running eischat.** + +### Options evaluated + +- **(a) Desktop binary bundles + spawns all NS services.** Highest fidelity, but `deno desktop`'s + single-entry bundler only statically analyses the one entry module; extra entrypoints/worker mains + need explicit `--include`, and **native-addon npm packages are unverified through the VFS + self-extraction** — this directly hits `@tursodatabase/database` (native driver) and Prisma's + native query engine. No doc confirms native `.node`/FFI addons survive embedding. High risk, needs + a dedicated spike. `Deno.Command` itself is _not_ documented as blocked (the binary inherits + `--allow-run`), so spawning sidecars from bundled/adjacent source is plausible but unproven. +- **(b) Dashboard-only desktop that connects to a separately-run services process.** Matches + `deno desktop`'s documented single-process model exactly. The desktop binary is the dashboard; the + eischat service (+ streams/workers) run as a separate process the binary reaches over + `127.0.0.1:` (outbound `fetch` is unrestricted). Lowest risk, ships now. +- **(c) In-process/embedded subset.** Would require refactoring eischat's oRPC router to export a + fetch handler the dashboard mounts in-process (and moving the tursodb single-writer into the + dashboard process). A genuine architecture change + upstream `@netscript/sdk` link-mode feature. + Out of scope for Phase 1. + +### Historical decision (Phase-1 MVP) + +**Phase 1 adopted (b), with a path to (a).** The `windows-singleton` experiment later completed that +path by compiling and staging adjacent sidecars; this paragraph records the earlier decision, not +the current deployment status. + +- **S2–S4 target:** a launchable native dashboard binary in `dist/` that renders the app and talks + to a **separately-launched services process** over localhost (the same `services__*__http__0` + env-var contract Aspire already injects — set them when launching the packaged app, or point at a + running dev stack). Native chrome (tray/window) gated so the _same_ `main.ts` still runs as a + plain web server for the Aspire/web build. +- **S5 target:** prove the data plane works when eischat runs alongside the packaged app (SQLite + catalog + per-channel tursodb under a per-user data dir), and document the run flow. +- **Spun into follow-up sub-issues (not Phase 1):** + - **Bundled/managed services** — desktop binary spawns eischat (+ streams/workers) as a sidecar + via `Deno.Command`, resolving the **native-addon-in-VFS** question for tursodb + Prisma. This is + the (a)→ upgrade and needs a spike. _(sub-issue)_ + - **Single-binary / in-process eischat** — option (c), export eischat's router as a mountable + fetch handler + move the tursodb single-writer in-process. Larger refactor. _(sub-issue)_ + - **Windows auto-update** — `Deno.autoUpdate()` **stages but does not apply** updates on Windows + yet (only macOS/Linux). Since this is a Windows-first target, ship a manual-update fallback and + track upstream; stand up the release server (`latest.json` + bsdiff + signing) to activate the + gated `initDesktopChrome()` auto-update. _(sub-issue)_ + - **Aspire live demo** — stage the `register-apps.mts` desktop resource (`Enabled:false` → opt-in) + and capture the window rendering inside a running `aspire run` dev stack. _(coordinator /user + step — see the Aspire section + `aspire/PROPOSED-desktop-resource.md`)_ + +### Why (b) and not (a) now + +The whole risk in (a) is native code surviving `deno desktop`'s VFS embedding — and eis-chat's data +plane is _entirely_ native (tursodb driver + Prisma engine). Nothing in the docs confirms or denies +it, so it is a spike, not a slice. (b) ships a verifiable desktop app this phase and leaves (a) as a +clean, well-scoped upgrade once the native-bundling question is answered. + +--- + +## Build / run / distribute (verified pieces marked ✅) + +### Prerequisites + +- Deno **2.9.0+** (`deno desktop` subcommand). ✅ confirmed installed (`x86_64-pc-windows-msvc`). +- Deps installed with the age-floor disabled once to bake `deno.lock`: + `deno install --allow-scripts --minimum-dependency-age=0` (see the deno-best-practice skill). ✅ + +### Build the web output (S2 prerequisite) ✅ + +```powershell +deno task --cwd apps/dashboard build # → apps/dashboard/_fresh/ (server.js + client/ + server/) +``` + +`deno desktop` detects Fresh via the `_fresh/` directory and imports `_fresh/server.js` in release +mode (`resources/deno-desktop/frameworks.md`). It does **not** run the build for you — build first. + +### Package the desktop binary (S2) ✅ VERIFIED + +```powershell +deno task --cwd apps/dashboard desktop:build +# = deno task build && deno desktop --no-check -o ../../dist/windows/eis-chat . +``` + +Produces (verified on `x86_64-pc-windows-msvc`, ~88 MB): + +``` +dist/windows/eis-chat/ + eis-chat.bat # launcher + eis-chat.dll # compiled entry + Deno runtime + embedded _fresh/ (9.49MB) VFS + laufey_webview.exe # the WebView backend (laufey v0.4.0, auto-downloaded) + AppIcon.ico # from static/favicon.ico +``` + +Two scaffold bugs were fixed to get here: + +1. **`--no-check` is required.** Without it `deno desktop` runs `deno check` on its synthetic entry, + which imports the Vite-built `_fresh/server/server-entry.mjs`, and fails with + `TS2307: Cannot find module '_fresh/server/html_renderer'` (a Vite chunk `deno check` can't + resolve). The build "still might work correctly" per Deno's own hint — `--no-check` skips the + check and the bundle is fine. The workspace gate (`deno task check`) still type-checks the real + source graph; only this desktop-synthetic-entry check is skipped. + +2. **`desktop.output` is not honored (Deno 2.9.0) → use explicit `-o`.** The original task's + `-o ../../dist/` (a bare dir) produced a synthetic-named `.deno_desktop_entry-XXXX` bundle, and + even with the `-o` dropped, the `desktop.output.windows` block in `deno.json` was **ignored** — + the build fell back to `/dashboard/`. The reliable, predictable path is an **explicit + `-o ../../dist/windows/eis-chat`**, which yields the correctly-named `eis-chat.*` bundle in the + right place. The `desktop.output` block was therefore removed from `deno.json` to avoid implying + a behavior that does not occur. For macOS/Linux, swap the `-o` path + (`-o ../../dist/macos/eis-chat.app`, `-o ../../dist/linux/eis-chat`) — cross-compile with + `--target` per `resources/deno-desktop/distribution.md`. + +Icons: `deno desktop` auto-detects `static/favicon.ico` (a real 16/32px multi-res `.ico`) and uses +it as `AppIcon.ico`; `desktop.app.icons` in `deno.json` also points there explicitly, so the app +ships a real icon (not the generic Deno one). + +### Launch evidence (S3) ✅ runtime loads + starts + +The packaged app's launcher is `eis-chat.bat` → `laufey_webview.exe --runtime "eis-chat.dll"`. +Launched headlessly in this environment, it produces: + +``` +Runtime loaded successfully from: eis-chat.dll +Runtime started +Failed to create WebView2 environment +``` + +So the **Deno runtime + embedded `_fresh/` app load and start from the bundle** (the first two +lines). The third line is expected here: creating a WebView2 environment needs an **interactive +desktop session** — this box's WebView2 runtime is present (v149.x confirmed via registry) but there +is no attached desktop to host a visible window in the non-interactive shell. `deno desktop`'s +webview drives the `Deno.serve` bind on navigation, so no `[dashboard]` server banner prints before +the webview init — that ordering is by design. + +**Final visual confirmation** (the window renders the app + chat/KB/skills/MCP) is an interactive +**coordinator/user step** — run `deno task --cwd apps/dashboard desktop:dev` (HMR) or launch +`dist/windows/eis-chat/eis-chat.bat` on a machine with an interactive desktop session, with a +services process reachable (below). + +### Run the packaged app (S3, target (b)) + +The binary is the dashboard; point it at a running services process via the same env contract Aspire +uses: + +``` +services__eischat__http__0=http://127.0.0.1:3001 +services__streams__http__0=http://127.0.0.1:4437 # optional; UI degrades without it +LITELLM_BASE_URL=... LITELLM_MASTER_KEY=... # required for chat +``` + +Start eischat (+ streams/workers) separately for the MVP — e.g. the dev Aspire stack, or a launcher +script (tracked in the bundled-services sub-issue). + +### `desktop:dev` (HMR) + +```powershell +deno task --cwd apps/dashboard desktop:dev # = deno desktop --hmr . +``` + +Runs the Vite dev server inside the desktop runtime with fast-refresh (`frameworks.md`, `hmr.md`). +Dev-only — never ship an `--hmr` binary. + +### Per-user data directory (S5) + +There is **no `Deno.desktopDataDir()`**, and the packaged binary's cwd is the user's _launch_ cwd +(unreliable — do not write DBs relative to it). Resolve an app-data root yourself and point +`CHANNEL_DATA_DIR` / the SQLite `DATABASE_URL` at it: + +- Windows: `%APPDATA%\eis-chat` (`Deno.env.get("APPDATA")`) +- macOS: `~/Library/Application Support/eis-chat` +- Linux: `$XDG_DATA_HOME/eis-chat` or `~/.local/share/eis-chat` + +Since eischat is the sole DB owner (target (b)), eischat resolves and owns these paths; the desktop +dashboard never touches the files directly. + +--- + +## Native chrome (S4) ✅ IMPLEMENTED — tray + auto-update, gated + +The same `main.ts` must run as a plain web server (Aspire/browser) **and** add native chrome only +under `deno desktop`. Implemented in **`apps/dashboard/lib/desktop-chrome.ts`**, called from +`main.ts`: + +```ts +// main.ts — after defineFreshApp() +import { initDesktopChrome } from '@app/lib/desktop-chrome.ts'; +initDesktopChrome(); // no-op under `deno task dev` / Aspire +``` + +`initDesktopChrome()` feature-detects the desktop runtime and installs a tray (tooltip + Quit) and +optional auto-update: + +```ts +// gate on a desktop-only global (the documented idiom, notifications.md) +const isDesktop = typeof Deno.BrowserWindow !== 'undefined'; +if (isDesktop && Deno.Tray) { + const tray = new Deno.Tray(); + if (tray.trayId !== 0) { // 0 = platform couldn't create it → bail + tray.setTooltip('eis-chat'); + tray.setMenu([/* about (disabled), separator, Quit ⌘Q */]); + tray.addEventListener('menuclick', (e) => { + if (e.detail.id === 'quit') Deno.exit(0); + }); + } + // Deno.autoUpdate({ url }) only if EISCHAT_RELEASE_BASE_URL is set. +} +``` + +**Why a helper module, not inline:** the desktop-only globals (`Deno.BrowserWindow`, `Deno.Tray`, +`Deno.autoUpdate`, `Deno.desktopVersion`) are **not in the stable Deno type lib**, so referencing +them raw would fail `deno check`/lint in the web build. `desktop-chrome.ts` describes just the slice +it uses via a local structural type and reads it off `Deno` through that — **no `any`, no ambient +global augmentation**, gate stays lint-clean and the module is a cheap no-op everywhere but a +packaged binary. Verified: `deno check` + `deno lint` clean; `desktop:build` still produces the +binary with the tray import embedded. + +`Deno.desktopVersion` is `string` in a packaged build, `null` under `deno run` (auto-update is a +no-op when null). **Auto-update on Windows STAGES but does not APPLY (macOS/Linux only)** — leaving +the call in is safe; it just won't self-update on Windows. Only wire `EISCHAT_RELEASE_BASE_URL` + +`desktop.release.baseUrl` + a signed `latest.json` once a release server exists (follow-up +sub-issue). API shapes: `resources/deno-desktop/tray_and_dock.md`, `auto_update.md`. + +--- + +## Aspire dev-stack integration (POC — the headline deliverable) + +The reframed goal: prove a `deno desktop` window runs **inside our Aspire TS apphost as a dev-stack +resource**, so `aspire run` launches the native window alongside dashboard / eischat / streams / +workers, wired to them via the same `services__{name}__http__0` discovery env vars. Once proven here +it lifts upstream into NetScript (`@netscript/cli`). + +### The pattern (from the working .NET reference) + +`rickylabs/netscript-start` → `NetScriptAppRegistrationExtensions.AddNetScriptApps` registers a Deno +app with a custom task / watch mode via `AddTaskBackedApp` → `AddDenoTask(name, root, taskName)` → +`addExecutable('deno', ['task', ])`, then injects service discovery +(`WithConfiguredHttpReferences`). Its `AddTauriApp` is exactly that **plus** a `WithReference` to a +remote app — i.e. a native-window resource is a task-backed executable with discovery env but **no +HTTP endpoint of its own**. Our TS apphost already mirrors this: `register-apps.mts` registers +`dashboard` as `builder.addExecutable('dashboard','deno',workdir,['task','dev'])` + +`withEnvironment` discovery injection. The desktop resource is a sibling that runs +`['task','desktop:dev']`. + +### Proposed wiring (staged by the supervisor — `aspire/.helpers/*` is generator-owned) + +Full proposal + copy-paste snippet: **`aspire/PROPOSED-desktop-resource.md`**. In short: + +- **appsettings `NetScript.Apps.desktop`**: + `{ Enabled:false, Runtime:"deno", Type:"app", + TaskName:"desktop:dev", Workdir:"apps/dashboard", ServiceReferences:["eischat"], + PluginReferences:["streams"] }` + — no `Port` (the window binds its own internal `Deno.serve` port), `Enabled:false` so headless/CI + `aspire run` is unaffected until a dev opts in. +- **`register-apps.mts`**: a `desktop` block = the `dashboard` block minus `withHttpEndpoint`, + running `['task','desktop:dev']`, reusing the identical `services__eischat__http__0` / + `services__streams__http__0` (+ MCP URL) `withEnvironment` injection. + +This keeps S1 option (b) — the window is the dashboard binary; eischat/streams run as their own +Aspire resources; the window reaches them over `127.0.0.1`. The apphost simply becomes the thing +that spawns the window in dev. + +> Not staged into the running apphost by this PR (coordinator owns `aspire/.helpers/*` + the +> generator template). Flagged for staging; the proposal file carries the exact diff. + +--- + +## References (local) + +`resources/deno-desktop/{index,frameworks,serving,configuration,backends,distribution,tray_and_dock,auto_update,hmr,comparison}.md` +· `docs/PHASE-1-FOUNDATION.md` · `docs/BUILD-PLAN.md` · `services/eischat/src/channel-client.ts` +(single-writer note) · `apps/dashboard/lib/channel-service.ts` (HTTP-only SDK client) · +`aspire/.helpers/register-apps.mts` (`services__*__http__0` discovery env). + +--- + +## Experimental `windows-singleton` deployment target + +The repository now carries the first experiment for a future NetScript +`deploy.targets.windows.singleton` option. It stages a Deno Desktop application, Garnet, and the +compiled service process graph needed by the chat, streams, workers, and MCP surfaces. The desktop +process supervises every sidecar and waits for readiness before serving UI requests. + +```powershell +deno task deploy:windows-singleton +dist\windows\eis-chat-singleton-\eis-chat-singleton.cmd +``` + +Builds are placed in a new Temporal-generated timestamped directory so a running or inspected +desktop build cannot lock the next release. Automation may set +`EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR` to an explicit child of `dist/windows`. + +The generated launcher sets `EISCHAT_WINDOWS_SINGLETON=1`. Normal browser, Aspire, and existing +desktop builds do not start a sidecar. Singleton data is placed under `%LOCALAPPDATA%\eis-chat` +(`%APPDATA%` fallback), including the SQLite catalog and channel files; the installation directory +remains read-only. + +Supervisor diagnostics and debug sidecar output are written to `%LOCALAPPDATA%\eis-chat\logs` +(`desktop-supervisor.log` plus `.stdout.log` / `.stderr.log`). Deno Desktop's +app-scoped `Deno.openKv()` storage uses the stable `eis-chat` application identity and therefore +survives timestamped rebuilds. + +The packager injects the complete fixed loopback graph twice from one source of truth: +`services____http__0` (plus compatibility aliases) for the Fresh server and sidecars, and +`VITE_services____http__0` / `VITE__URL` while Vite builds browser islands. Hyphenated +names use the short form (for example `VITE_WORKERS_API_URL`) because Vite define expressions cannot +contain a hyphenated dotted property. Runtime environment assignment alone is too late for +`import.meta.env`; without the build-time form, browser-side typed clients fail even though +server-side RPC works. The supervisor records the non-secret service-discovery and OTLP environment +in `desktop-supervisor.log` for auditing. + +The staged graph contains: + +- Garnet on 6379; +- durable streams on 4437; +- workers API on 8091 and the background workers process; +- the core `eischat` service on 3001 with SQLite data under the per-user directory; +- legacy-archeology and Excalidraw MCP HTTP services on 8095 and 8096. + +Run `eis-chat-singleton-observed.cmd` to also start the bundled Aspire 13.4.6 standalone dashboard +on 18888 with anonymous local access and OTLP receivers on 4317/4318. The packager stages the pinned +NativeAOT `Aspire.Cli` executable, its MIT license and third-party notices, and a bounded telemetry +configuration under `eis-chat/tools/aspire`; the installed application therefore needs neither +Docker, a .NET runtime, nor a system Aspire installation. If a dashboard is already reachable, the +supervisor reuses it instead of competing for the ports. Open `http://127.0.0.1:18888` to inspect +structured logs, traces, and metrics. + +This is Aspire's documented **standalone** mode and the `aspire dashboard` command remains Preview +in 13.4. It intentionally has no AppHost resource service, so the resource list, resource graph, and +AppHost console-log surfaces are unavailable; those require an AppHost-provided +`ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL`. The singleton supervisor remains the resource authority and +writes its complete non-secret resource/environment audit to `desktop-supervisor.log`. Shipping an +AppHost resource service solely for that UI would replace the Deno supervisor with the Aspire +orchestrator and is a distinct deployment design, not another dashboard setting. + +The packager supplies Deno's OpenTelemetry enablement variables during **both build and launch**. +This is essential for standalone executables: `deno compile` and `deno desktop` serialize tracing, +metrics, console-capture, and propagator enablement into their runtime metadata. Supplying +`OTEL_DENO=true` only to the finished executable is too late and produces a healthy but empty +dashboard. Runtime configuration then gives every process its own `OTEL_SERVICE_NAME` and the shared +`OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318` with `http/protobuf`; Deno appends the standard +signal paths. A compiled control executable exported both its console log and `fetch` span to the +bundled dashboard with this setup, without a JavaScript OTel SDK. + +The dashboard process receives the corresponding documented Aspire variables for its frontend, +OTLP/gRPC and OTLP/HTTP listeners, anonymous local access, config path, and standalone browser CORS. +Browser-originated telemetry still requires an OpenTelemetry JavaScript SDK in the Fresh client; +that is separate from Deno's built-in server/runtime instrumentation and is not required for the +singleton services to populate logs, traces, and metrics. + +### Fresh/Vite production module identity + +Fresh 2.3's Vite integration correctly owns React-compat aliases and disables dependency discovery, +which prevents the pre-bundling duplicate described in its release notes. A clean Windows production +build on current stable Fresh 2.3.3 / `@fresh/plugin-vite` 1.1.2 nevertheless resolves the same +installed `preact/hooks` and Signals files through both `C:/...` and `C:\...` IDs. Rollup then emits +two hook runtimes; the second patches the same Preact options object and hydration fails. + +`resolve.dedupe`, import-map pins, browser conditions, and declarative aliases were each retested +without the application resolver and did not merge those final resolved IDs. The Vite config +therefore retains one narrow temporary resolver that delegates normal resolution and applies Vite's +`normalizePath()` only to Preact IDs. It is not a Babel pass or a custom bundle transform. The +framework-level fix and reproduction are tracked in +[NetScript #782](https://github.com/rickylabs/netscript/issues/782); once final Deno-resolved IDs +are canonicalized upstream, the Preact ID resolver can be removed from this app. The generic +versioned-`npm:` aliases cover a separate cold Deno-resolution case seen by Linux CI. + +The chat renderer no longer uses `react-markdown`. Markdown is parsed through the existing unified +pipeline and rendered directly by `rehype-react` with Preact's JSX runtime. This removes the React +wrapper and its dependency surface while keeping the rehype plugin ecosystem; the framework +follow-up is [NetScript #783](https://github.com/rickylabs/netscript/issues/783). + +Image ingestion and semantic retrieval are separate settings. The default offline Tesseract OCR +still produces searchable text chunks, but the default embedding provider is `disabled`; in that +mode the KB is intentionally keyword-only. A generic question such as “what is in this image?” may +not match OCR text even though the document is `ready`. Select an embedding provider in Settings for +semantic retrieval, or query for terms visible in the image to verify the offline OCR path. + +Current experiment constraints: + +- Deno sidecars are compiled with `--node-modules-dir=none --exclude-unused-npm`; this avoids + inheriting Deno Desktop's npm process-state handles. The experimental `--bundle` mode remains + unsuitable for the libSQL sidecar because it cannot resolve the dynamically selected + `@libsql/win32-x64-msvc` native package. +- Garnet is staged from the pinned `garnet-server` .NET tool package; Docker is not required. +- The observed launcher adds the pinned Aspire 13.4.6 NativeAOT CLI (~144 MB) to provide the + official zero-container standalone dashboard path. Normal launches do not start it. +- The target stages an application directory. Producing an MSI containing the adjacent sidecars + needs a packaging hook in `deno desktop` or a second installer pass over the staged directory. +- Deno 2.9.3 or newer is required for denoland/deno#36005. The desktop supervisor removes inherited + `DENO_*` runtime variables, including the desktop-only `DENO_SERVE_ADDRESS`, before starting the + independently listening sidecar. +- First run idempotently creates the catalog's `Channel`, `ExampleRecord`, and unique-slug schema in + the per-user SQLite database. +- The supervisor treats any response from HTTP `/health` as listener readiness, uses a TCP probe for + Garnet, and terminates children in reverse order during normal desktop teardown. NetScript beta.9 + currently includes an unused MySQL adapter in aggregate health for this SQLite-only app, so the + response status cannot yet be the readiness authority. Fixing that upstream, crash restart, and + Windows Job Object containment are follow-ups. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__auto_update.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__auto_update.md new file mode 100644 index 000000000..4d0c7280e --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__auto_update.md @@ -0,0 +1,245 @@ +--- +last_modified: 2026-06-25 +title: "Auto-update" +description: "Ship binary-diff updates to deno desktop apps with Deno.autoUpdate(): bsdiff patches, manifest polling, automatic rollback on failed launch." +--- + +:::info Available in Deno 2.9 + +`deno desktop` is available starting in Deno v2.9.0. If you're on an earlier +version, [update Deno](/runtime/reference/cli/upgrade/) to use it. + +::: + +[`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate) polls a release server for +new versions, downloads binary-diff patches, applies them to the runtime dylib, +and stages the result for the next launch. If the next launch fails, the runtime +rolls back to the previous version automatically. Updates ship as small `bsdiff` +patches instead of full binary downloads, with rollback baked into the launcher. + +:::note Platform support + +Applying staged updates and rolling back on a failed launch currently run on +**macOS and Linux only**. On Windows, patches are still downloaded and staged, +but the launcher does not yet swap them in (a loaded DLL can't be replaced in +place), so updates do not take effect. Treat Windows auto-update as not yet +supported. + +::: + +## Prerequisites + +Two pieces of configuration are required: + +1. A `version` in your `deno.json`: + ```jsonc + { "version": "1.4.0" } + ``` +2. A `desktop.release.baseUrl` in your `deno.json`: + ```jsonc + { + "desktop": { + "release": { "baseUrl": "https://releases.example.com/my-app" } + } + } + ``` + +Both are baked into the compiled binary. The version is exposed at runtime as +[`Deno.desktopVersion`](/api/deno/~/Deno.desktopVersion): + +```ts +console.log(Deno.desktopVersion); // "1.4.0", or null if no version was set +``` + +If [`Deno.desktopVersion`](/api/deno/~/Deno.desktopVersion) is `null`, +[`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate) is a no-op: the runtime warns +once and returns. This is also what happens under `deno run`, since a +non-compiled program has no baked-in version. +[`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate) does not throw there, so you +can leave the call in your code and run the same entry point with `deno run` +during development. + +## Calling `autoUpdate()` + +```ts +Deno.autoUpdate({ + url: "https://releases.example.com/my-app", + interval: 60 * 60 * 1000, // hourly + onUpdateReady(version) { + console.log("Update", version, "ready; will apply on next launch"); + }, + onRollback(reason) { + console.warn("Previous launch failed; rolled back:", reason); + }, +}); +``` + +Or pass a URL string for a single one-shot check on startup: + +```ts +Deno.autoUpdate("https://releases.example.com/my-app"); +``` + +| Option | Type | Notes | +| --------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `url` | `string` | Required if no `desktop.release.baseUrl` is set in `deno.json`. | +| `interval` | `number` (milliseconds) | Poll interval. If omitted, only a single check is performed. | +| `onUpdateReady` | `(version: string) => void` | Called once a patch is applied and staged for next launch. | +| `onRollback` | `(reason: string) => void` | Called shortly after this call if the previous launch failed. | +| `publicKey` | `string` | Base64 Ed25519 public key. When set, the manifest must be signed (see [Signed manifests](#signed-manifests)). | + +## Manifest format + +The runtime fetches `/latest.json` and parses it as JSON. Each patch entry +is an object carrying the patch filename and its **SHA-256 hash**: + +```json +{ + "version": "1.5.0", + "patches": { + "1.4.0": { "name": "patch-1.4.0-to-1.5.0.bin", "sha256": "<64-hex-chars>" }, + "1.4.1": { "name": "patch-1.4.1-to-1.5.0.bin", "sha256": "<64-hex-chars>" }, + "1.3.9": { "name": "patch-1.3.9-to-1.5.0.bin", "sha256": "<64-hex-chars>" } + } +} +``` + +| Field | Meaning | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `version` | The latest available version. Compared with [`Deno.desktopVersion`](/api/deno/~/Deno.desktopVersion). | +| `patches` | Map of from-version → `{ name, sha256 }`. `name` is the patch filename relative to the manifest's URL; `sha256` is the lowercase hex SHA-256 of the patch bytes. | + +The `sha256` is **required**: the runtime refuses to apply a patch whose bytes +don't hash to the declared value, so a tampered or truncated download can never +be applied. + +Old versions you no longer want to support can be omitted from `patches`. Users +on those versions log a "no patch available for X" message and stay on their +current version. + +The update URL **must** be `https://`: the runtime refuses to poll a plaintext +endpoint. + +### Signed manifests + +For tamper protection beyond TLS, sign the manifest with an Ed25519 key and pass +the public key to [`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate). When a +`publicKey` is configured, the manifest must be an envelope: + +```json +{ + "signed": "{\"version\":\"1.5.0\",\"patches\":{ … }}", + "signature": "" +} +``` + +The runtime verifies `signature` over the exact bytes of the `signed` string +using your `publicKey`, then parses `signed` as the trusted manifest. To avoid +depending on a canonical-JSON implementation, the real manifest is embedded +verbatim as the `signed` string and only its contents are trusted. + +```ts +Deno.autoUpdate({ + url: "https://releases.example.com/my-app", + publicKey: "", +}); +``` + +## Update flow + +1. **Fetch manifest.** `GET /latest.json`. On a non-2xx response, the check + silently returns and waits for the next interval. +2. **Compare versions.** If `manifest.version === Deno.desktopVersion`, nothing + to do. +3. **Look up a patch.** `manifest.patches[Deno.desktopVersion]` → + `{ name, sha256 }`. +4. **Download the patch.** `GET /`. The whole patch is buffered into + memory; for typical bsdiff outputs (a few MB) this is fine. +5. **Verify and apply.** The runtime checks the downloaded bytes against the + manifest's `sha256` and refuses to continue on a mismatch, then applies the + binary diff to the app's runtime dylib using the + [`qbsdiff`](https://crates.io/crates/qbsdiff) crate. The patched bytes are + sanity-checked to look like a native binary before staging. +6. **Stage the result.** Write the patched dylib as `.update` next to the + original. The running dylib is left untouched. +7. **Fire `onUpdateReady`.** + +The running dylib is untouched until the next launch. When the app restarts, the +launcher swaps the staged update into place before anything else runs. + +## Rollback on failed launch + +The launcher resolves staged updates and rollback state at startup, before +anything else runs, using three files next to the runtime dylib: +`.update` (a staged patch), `.backup` (the previous dylib), and +`.update-ok` (a success sentinel). + +- If `.update` exists, the launcher copies the current dylib aside to + `.backup` (leaving the original in place), swaps the staged update into + the dylib path, and starts the new version. Once it boots successfully, the + runtime calls an internal "confirm update" op that writes `.update-ok`. +- On a later launch, if `.backup` and `.update-ok` both exist, the + previous update is confirmed good and both files are cleaned up. +- If `.backup` exists but `.update-ok` does not, the last update + started but never confirmed, meaning it crashed during startup. The launcher + restores `.backup` over the dylib, rolling back. The next + [`Deno.autoUpdate()`](/api/deno/~/Deno.autoUpdate) call then fires + `onRollback` with the reason. + +This makes broken updates self-healing. Users do not need to know anything +happened beyond seeing the same version they had before. + +## Generating patches + +A patch is a `bsdiff` of the app's runtime dylib between two releases, the file +the updater patches, which lives inside your built app. `qbsdiff` reads the +`bsdiff` 4.x format, so the classic `bsdiff` CLI produces compatible output: + +```sh +bsdiff old-dylib new-dylib patch-1.4.0-to-1.5.0.bin +shasum -a 256 patch-1.4.0-to-1.5.0.bin # the sha256 for the manifest entry +``` + +Then add the patch's `name` and `sha256` to `latest.json` and upload both the +patch and the manifest to your release server. + +For shipping multiple architectures (macOS arm64, x86_64; Windows x86_64; Linux +arm64, x86_64), generate patches per-architecture. Either serve the right +manifest based on user-agent, or include all patches under architecture-specific +keys and pick on the client: + +```jsonc +// release/macos-arm64/latest.json +{ + "version": "1.5.0", + "patches": { + "1.4.0": { "name": "patch-1.4.0-to-1.5.0.bin", "sha256": "<64-hex-chars>" } + } +} +``` + +```ts +const arch = Deno.build.os + "-" + Deno.build.arch; +Deno.autoUpdate({ + url: "https://releases.example.com/" + arch, + interval: 60 * 60 * 1000, +}); +``` + +## Best practices + +- **Sign your manifests.** TLS plus the required per-patch `sha256` already stop + a tampered patch from being applied, but anyone able to serve from your URL + could still push a validly-hashed malicious patch. For defense in depth, sign + the manifest with an Ed25519 key and configure `publicKey` (see + [Signed manifests](#signed-manifests)). Keep the private key off the release + host. +- **Test patches against a real install.** A patch that applies cleanly but + produces a non-bootable binary triggers rollback, but only after a failed + launch, so your users see a brief startup failure once. Run the patched binary + in CI before publishing the manifest. +- **Choose a sensible interval.** Hourly is fine for most apps. Polling more + often than every few minutes is wasteful for both you and your users. +- **Handle `onRollback`.** A rollback is a signal that a recent release was + broken on at least one machine. Log it to your telemetry so you notice broken + releases quickly. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__distribution.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__distribution.md new file mode 100644 index 000000000..c80aa1d15 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/resources__deno-desktop__distribution.md @@ -0,0 +1,265 @@ +--- +last_modified: 2026-06-25 +title: "Distribution" +description: "Cross-compile a deno desktop app for macOS, Windows, and Linux from one machine, and produce per-platform output formats: .app, .dmg, .exe directory, AppImage." +--- + +:::info Available in Deno 2.9 + +`deno desktop` is available starting in Deno v2.9.0. If you're on an earlier +version, [update Deno](/runtime/reference/cli/upgrade/) to use it. + +::: + +`deno desktop` cross-compiles from any host. The same machine builds for macOS +Intel, macOS arm64, Windows x86_64, Linux arm64, and Linux x86_64. Backend +binaries (CEF, WebView, etc.) are downloaded as needed. + +## Per-platform output + +```sh +# Build for the host platform. +deno desktop main.ts + +# Build for a specific target. +deno desktop --target aarch64-apple-darwin main.ts + +# Build for every supported target in one go. +deno desktop --all-targets main.ts +``` + +Supported triples: + +| Triple | OS | Architecture | +| --------------------------- | ------- | ------------ | +| `aarch64-apple-darwin` | macOS | arm64 | +| `x86_64-apple-darwin` | macOS | Intel | +| `x86_64-pc-windows-msvc` | Windows | x86_64 | +| `aarch64-unknown-linux-gnu` | Linux | arm64 | +| `x86_64-unknown-linux-gnu` | Linux | x86_64 | + +The CLI fetches the matching prebuilt `denort` and the matching prebuilt backend +archive automatically. No platform-specific toolchain is needed on the host. + +## Output formats + +The output extension determines the format: + +### macOS + +| Output | Produced by | +| ------------ | ------------------------------------------- | +| `MyApp.app/` | Default; `.app` bundle. | +| `MyApp.dmg` | `hdiutil`; drag-to-Applications disk image. | + +The `.app` bundle has the standard layout: + +``` +MyApp.app/ + Contents/ + Info.plist + MacOS/ + MyApp # the launcher + Resources/ + icon.icns + Frameworks/ + Chromium Embedded Framework.framework/ # CEF backend + … +``` + +Self-extracting mode is enabled by default: the embedded virtual filesystem +(your code, framework build outputs, static assets) extracts to disk on first +run so frameworks like Next.js find their build output relative to CWD. + +### Windows + +| Output | Produced by | +| ----------- | ----------------------------------------------------- | +| `MyApp/` | Default; directory with a launcher and support files. | +| `MyApp.msi` | Windows Installer package (per-machine install). | + +The `MyApp/` directory contains: + +``` +MyApp/ + MyApp.bat # launcher + denort.dll # Deno runtime + your code + *.dll # rendering backend and CEF libraries + resources.pak, locales/ # CEF support files + AppIcon.ico # icon (optional) +``` + +Set a `.msi` output extension to build a Windows Installer package directly. It +installs the app per-machine under `%ProgramFiles%\\` and registers an +uninstaller. The MSI is authored in pure Rust, so it cross-compiles from any +host (only the target must be Windows). To package the directory another way, +zip it or feed it into a third-party installer generator such as Inno Setup, +NSIS, or WiX. + +### Linux + +| Output | Produced by | +| ----------------- | -------------------------------------------- | +| `my-app/` | Default; app directory with launcher script. | +| `my-app.AppImage` | Single-file portable bundle. | +| `my-app.deb` | Debian/Ubuntu package. | +| `my-app.rpm` | Fedora/RHEL package. | + +The app directory layout: + +``` +my-app/ + my-app # launcher shell script + libdenort.so # Deno runtime + your code + *.so # rendering backend and CEF libraries + resources.pak, locales/ # CEF support files + AppIcon.png # icon (optional) +``` + +`AppImage` is the most portable Linux format: one file, no install step, runs on +any modern distro. `deno desktop` builds it directly: it packs the app directory +into a SquashFS image and prepends the AppImage Type-2 runtime, adding the +required `AppRun`, `.desktop`, and icon entries. There is no external tool to +install (no `appimagetool`), and it works from any build host, so you can +produce a Linux `.AppImage` while cross-compiling from macOS or Windows. + +Set a `.deb` or `.rpm` output extension to build a Linux package directly. Both +install the app under `/usr/lib//`, symlink a launcher into `/usr/bin/`, +and register a `.desktop` entry and icon. Like the `.AppImage`, they are +assembled in pure Rust and cross-compile from any host (only the target must be +Linux). + +## Compressing the bundle + +Pass `--compress` to ship a self-extracting bundle. The heavy payload (the +runtime and UI backend) is compressed inside the distributed app and unpacked to +a per-user data directory on first launch, then reused on later runs. This +shrinks the distributed artifact substantially, a webview hello-world drops from +about 66 MB to 19 MB, in exchange for a one-time decompression on first launch. + +```sh +# Self-extracting, compressed bundle +deno desktop --compress main.ts + +# Choose the codec explicitly +deno desktop --compress=xz main.ts +deno desktop --compress=zstd main.ts +``` + +`xz` produces the smaller artifact; `zstd` trades some size for faster +first-launch decompression. + +## Choosing the output path + +The output path can be set in three places, in priority order: + +1. The `--output` CLI flag. +2. The `desktop.output` field in `deno.json` (per-platform). +3. The default: the project name, with the platform-appropriate extension. + +```sh +# Override per build: +deno desktop --output ./builds/MyApp-1.4.0.dmg main.ts +``` + +```jsonc title="deno.json" +{ + "desktop": { + "output": { + "macos": "./dist/macos/MyApp.app", + "windows": "./dist/windows/MyApp", + "linux": "./dist/linux/my-app.AppImage" + } + } +} +``` + +## Cross-compilation details + +Cross-compiling from one OS to another requires: + +- The right `denort` binary for the target. Downloaded automatically from + `github.com/denoland/deno/releases`, matching your local Deno version. +- The right backend archive for the target. Downloaded automatically, pinned to + your Deno version. + +Both downloads are SHA-256 verified and cached under `/`. + +There is **no Rust toolchain involved** in cross-compiling a desktop app. You +are not compiling Rust on the host; you are downloading prebuilt artifacts for +the target and packaging them with your code. This is the same model as +`deno compile --target`. + +Icon assembly (`.icns`, `.ico`) and the Linux `.AppImage` are produced on any +host. The one exception is the macOS `.dmg`, which shells out to `hdiutil` and +therefore must be built on a macOS host. To produce a `.dmg` from another +platform, build it on a macOS CI machine. + +## CI + +A typical GitHub Actions matrix builds platform-native installers in parallel: + +```yaml title=".github/workflows/release.yml" +jobs: + build: + strategy: + matrix: + include: + - { os: macos-14, target: aarch64-apple-darwin } + - { os: macos-15-intel, target: x86_64-apple-darwin } + - { os: windows-latest, target: x86_64-pc-windows-msvc } + - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu } + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - uses: denoland/setup-deno@v2 + + - run: deno desktop --target ${{ matrix.target }} main.ts + + - uses: actions/upload-artifact@v4 + with: + name: my-app-${{ matrix.target }} + path: dist/ +``` + +Cross-compiling from a single host (e.g. only running on `ubuntu-latest` with +`--all-targets`) works for the bundles and the Linux `.AppImage`. Only the macOS +`.dmg` needs a macOS host. + +## Code signing + +On macOS, `deno desktop` code-signs the bundle for you. By default it applies an +**ad-hoc** signature (`-`), which gives the app a stable code identity, enough +for the OS to grant [notification](/runtime/desktop/notifications/) permission, +but not enough to distribute without Gatekeeper warnings. The CEF helper +processes' bundle identifiers are harmonized with the main bundle id +automatically. + +To produce a distributable, notarizable bundle, set a real signing identity in +`deno.json` (signing must run on a macOS host, since it shells out to +`codesign(1)`): + +```jsonc title="deno.json" +{ + "desktop": { + "app": { "identifier": "com.example.myapp" }, + "macos": { + "codesignIdentity": "Developer ID Application: Acme, Inc. (TEAMID)" + } + } +} +``` + +With a real identity, the bundle is signed with Hardened Runtime and a secure +timestamp. **Notarization is still a separate step**. Submit the signed bundle +with `xcrun notarytool submit` and staple the ticket. + +On Windows, sign the produced executables (the backend `.exe` and `denort.dll` +in the output directory) externally for now, e.g. +`signtool sign /f cert.pfx /tr `. + +## Distributing updates after release + +Once your binary is in users' hands, ship updates via +[`Deno.autoUpdate()`](/runtime/desktop/auto_update/): `bsdiff` patches shipped +from your own server, no app store required. diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__assets__aspire-dashboard.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__assets__aspire-dashboard.json new file mode 100644 index 000000000..b2ef73f01 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__assets__aspire-dashboard.json @@ -0,0 +1,13 @@ +{ + "Dashboard": { + "ApplicationName": "eis-chat Windows singleton", + "TelemetryLimits": { + "MaxLogCount": 25000, + "MaxTraceCount": 25000, + "MaxMetricsCount": 50000 + }, + "UI": { + "DisableResourceGraph": true + } + } +} diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__build.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__build.ts new file mode 100644 index 000000000..be305c9d9 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__build.ts @@ -0,0 +1,193 @@ +import { dirname, fromFileUrl, isAbsolute, join, relative, resolve } from '@std/path'; +import { + windowsSingletonServiceEnvironment, + windowsSingletonTelemetryEnvironment, +} from '../../apps/dashboard/lib/windows-singleton.ts'; + +const repoRoot = resolve(dirname(fromFileUrl(import.meta.url)), '..', '..'); +const windowsOutputRoot = join(repoRoot, 'dist', 'windows'); +const buildTimestamp = Temporal.Now.instant() + .toString({ smallestUnit: 'second' }) + .replaceAll('-', '') + .replaceAll(':', ''); +const outputDir = resolve( + Deno.env.get('EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR') ?? + join(windowsOutputRoot, `eis-chat-singleton-${buildTimestamp}`), +); +const relativeOutputDir = relative(windowsOutputRoot, outputDir); +if ( + !relativeOutputDir || isAbsolute(relativeOutputDir) || relativeOutputDir.startsWith('..') +) { + throw new Error('Windows singleton output must be a child of dist/windows.'); +} +const desktopOutput = join(outputDir, 'eis-chat'); +const dashboardDir = join(repoRoot, 'apps', 'dashboard'); +const aspireCliVersion = '13.4.6'; +const aspireToolStaging = join(windowsOutputRoot, `.aspire-cli-${buildTimestamp}`); +const aspireOutput = join(desktopOutput, 'tools', 'aspire'); +const sidecars = [ + ['eischat-service.exe', join(repoRoot, 'services', 'eischat', 'src', 'main.ts')], + ['streams-service.exe', 'jsr:@netscript/plugin-streams@0.0.1-beta.9/services'], + [ + 'workers-api-service.exe', + join(repoRoot, 'scripts', 'windows-singleton', 'entries', 'workers-api.ts'), + ], + ['workers-service.exe', join(repoRoot, 'scripts', 'windows-singleton', 'entries', 'workers.ts')], + ['legacy-archeo-mcp-service.exe', join(repoRoot, 'tools', 'legacy-archeo-mcp.ts')], + ['excalidraw-mcp-service.exe', join(repoRoot, 'tools', 'excalidraw-mcp.ts')], +] as const; + +async function run( + command: string, + args: readonly string[], + cwd = repoRoot, + env?: Readonly>, +): Promise { + console.log(`> ${command} ${args.join(' ')}`); + const child = new Deno.Command(command, { + args: [...args], + cwd, + stdin: 'null', + stdout: 'inherit', + stderr: 'inherit', + env: env ? { ...env } : undefined, + }).spawn(); + const result = await child.status; + if (!result.success) throw new Error(`${command} exited with code ${result.code}.`); +} + +await Deno.remove(outputDir, { recursive: true }).catch((error) => { + if (!(error instanceof Deno.errors.NotFound)) throw error; +}); + +// Browser-side typed clients cannot read the runtime `services__...` variables. +// Vite must replace their `import.meta.env.VITE_services__...` lookups while it +// builds the Fresh client. Inject the whole singleton graph from the same source +// used by the runtime supervisor so packaged and Aspire-style discovery agree. +const viteEnvironment = windowsSingletonServiceEnvironment({ includeVite: true }); +const telemetryBuildEnvironment = windowsSingletonTelemetryEnvironment({ + serviceName: 'eis-chat-build', +}); +await run( + 'deno', + ['task', 'build'], + dashboardDir, + viteEnvironment, +); +// Deno Desktop recognizes Fresh applications and performs another production +// build before bundling them. Preserve the discovery environment for that +// second build too, otherwise it silently replaces the correctly built client. +await run( + 'deno', + [ + 'desktop', + '--backend', + 'cef', + '--no-check', + '--allow-all', + '-o', + desktopOutput, + '.', + ], + dashboardDir, + { ...viteEnvironment, ...telemetryBuildEnvironment }, +); +for (const [fileName, entrypoint] of sidecars) { + await run( + 'deno', + [ + 'compile', + '--node-modules-dir=none', + '--allow-all', + '--no-check', + '--exclude-unused-npm', + '--output', + join(desktopOutput, fileName), + entrypoint, + ], + repoRoot, + telemetryBuildEnvironment, + ); +} + +await run('dotnet', [ + 'tool', + 'install', + 'garnet-server', + '--version', + '1.1.10', + '--tool-path', + join(desktopOutput, 'tools', 'garnet'), +]); + +// Aspire 13.4 ships its CLI as a self-contained NativeAOT .NET tool. The +// standalone dashboard command is the documented zero-container hosting path, +// so stage only its portable executable (not the NuGet tool cache/shim) beside +// the singleton. End-user machines do not need Aspire, .NET, or Docker. +await Deno.remove(aspireToolStaging, { recursive: true }).catch((error) => { + if (!(error instanceof Deno.errors.NotFound)) throw error; +}); +try { + await run('dotnet', [ + 'tool', + 'install', + 'Aspire.Cli', + '--version', + aspireCliVersion, + '--tool-path', + aspireToolStaging, + ]); + const aspirePackageRoot = join( + aspireToolStaging, + '.store', + 'aspire.cli', + aspireCliVersion, + 'aspire.cli.win-x64', + aspireCliVersion, + ); + await Deno.mkdir(aspireOutput, { recursive: true }); + await Deno.copyFile( + join(aspirePackageRoot, 'tools', 'net10.0', 'win-x64', 'aspire.exe'), + join(aspireOutput, 'aspire.exe'), + ); + await Deno.copyFile( + join(aspirePackageRoot, 'THIRD-PARTY-NOTICES.TXT'), + join(aspireOutput, 'THIRD-PARTY-NOTICES.TXT'), + ); + await Deno.copyFile( + join(repoRoot, 'scripts', 'windows-singleton', 'assets', 'ASPIRE-LICENSE.TXT'), + join(aspireOutput, 'LICENSE.TXT'), + ); + await Deno.copyFile( + join(repoRoot, 'scripts', 'windows-singleton', 'assets', 'aspire-dashboard.json'), + join(aspireOutput, 'aspire-dashboard.json'), + ); +} finally { + await Deno.remove(aspireToolStaging, { recursive: true }).catch((error) => { + if (!(error instanceof Deno.errors.NotFound)) throw error; + }); +} + +const launcherPath = join(outputDir, 'eis-chat-singleton.cmd'); +const observedLauncherPath = join(outputDir, 'eis-chat-singleton-observed.cmd'); +const observedEnvironment = { + EISCHAT_WINDOWS_SINGLETON: '1', + EISCHAT_ASPIRE_DASHBOARD: '1', + ...windowsSingletonTelemetryEnvironment({ serviceName: 'eis-chat-desktop' }), +}; +const observedEnvironmentScript = Object.entries(observedEnvironment) + .map(([name, value]) => `set "${name}=${value}"\r\n`) + .join(''); +await Deno.writeTextFile( + launcherPath, + '@echo off\r\nset EISCHAT_WINDOWS_SINGLETON=1\r\n"%~dp0eis-chat\\eis-chat.exe" %*\r\n', +); +await Deno.writeTextFile( + observedLauncherPath, + '@echo off\r\n' + + observedEnvironmentScript + + '"%~dp0eis-chat\\eis-chat.exe" %*\r\n', +); + +console.log(`\nwindows-singleton staged at ${outputDir}`); +console.log(`Launch with: ${launcherPath}`); diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers-api.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers-api.ts new file mode 100644 index 000000000..7d04a466c --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers-api.ts @@ -0,0 +1,4 @@ +import { createPluginServiceContext } from '../../../services/_shared/plugin-service-context.ts'; +import createWorkersService from 'jsr:@netscript/plugin-workers@0.0.1-beta.9/services'; + +await createWorkersService(await createPluginServiceContext('workers')); diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers.ts b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers.ts new file mode 100644 index 000000000..98a3cb5ff --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/files/scripts__windows-singleton__entries__workers.ts @@ -0,0 +1,21 @@ +import workersPluginHealthCheck from '@netscript/plugin-workers/health-check'; +import { + startCombinedProcess, + type StaticJobDefinitionRegistry, +} from '@netscript/plugin-workers/runtime'; +import type { StaticJobRegistry } from '@netscript/plugin-workers-core/runtime'; +import { + jobDefinitions, + registry as generatedRegistry, +} from '../../../.netscript/generated/plugin-workers/job-registry.ts'; + +type StaticJobHandler = StaticJobRegistry extends ReadonlyMap ? Handler + : never; + +const registry = new Map(generatedRegistry); +registry.set('workers-plugin-health-check', workersPluginHealthCheck); + +await startCombinedProcess({ + definitions: jobDefinitions as StaticJobDefinitionRegistry, + registry, +}); diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-core.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-core.md new file mode 100644 index 000000000..7b5be3522 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-core.md @@ -0,0 +1,335 @@ +# netscript board corpus digest + +## #820 — RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition +- state: open | milestone: Backlog / Triage | labels: status:research, priority:p1, rfc, area:deploy +- url: https://github.com/rickylabs/netscript/issues/820 + +Owner-mandated RFC (2026-07-17), grounded in the eis-chat POC (rickylabs/eis-chat#150, merge `aeaf2df` — "Prototype full-stack Windows singleton desktop deployment": no-Docker Windows `--singleton` around Deno Desktop, native window directly supervising the adjacent service graph, Garnet + six compiled Deno processes, Aspire sidecar telemetry, shipped as a single `.msi`). + +**The POC proves feasibility. This RFC extracts what SHOULD BE BUILT as foundational layers — we learn from the POC's seams, PRs, issues, and fixes; we do not copy its scripts into NetScript.** + +## Findings that motivate this RFC + +1. **Process manager is the missing foundation (beta.12 / epic #510).** The POC's supervision is launch-only: if a sidecar service dies, the frontend is unaware and the only recovery is re-opening the app. Crash survival, restart policy, health propagation to the UI, and lifecycle guarantees must exist BEFORE any desktop deployment ships on NetScript. Sequencing: PM epic (beta.12) is a hard prerequisite of the desktop deployment work. +2. **Installation layer is a gap in BOTH epics.** The POC ships as a simple .NET AOT host. An enterprise-grade installation layer must handle much more (install/uninstall/repair, per-machine vs per-user, service registration, permissions/elevation, signing, first-run provisioning) and must be integrated WITHIN the Aspire stack, not bolted on outside it. Today this sits in neither the PM epic (#510) nor the desktop packaging issues (e.g. PM-32 #543) — scope it and place it. +3. **Update-management lifecycle is unanswered for the combined output.** Deno Desktop ships an update story for a single desktop output; our artifact is a combined singleton (window + supervised service graph + sidecars). How updates apply atomically/safely across that graph (staged rollout, rollback, partial-update hazards, service downtime windows) needs a designed answer. +4. **Composition with the single-runtime feature.** Prior single-runtime issues describe another packaging approach we intend to KEEP alongside the singleton desktop output. The RFC must define how the two compose (shared contracts? shared PM? divergent installers?) rather than letting them fork. + +## Deliverables + +- Gap analysis of epic #510 (PM) and the desktop packaging scope against the POC learnings, with concrete sub-issue adjustments (add/re-scope/re-milestone proposals for beta.12/beta.13 — proposals, owner ratifies). +- RFC design for the enterprise installation layer inside the Aspire stack. +- RFC design for update lifecycle of the combined singleton output. +- Composition contract between single-runtime and singleton-desktop approaches. + +Run: `.llm/runs/rfc-single-deployment--orchestrator/` (Fable 5 · high generator, adversarial Sol · max). No implementation from this RFC; board changes are drafts until owner ratification. + +Refs #510, #543, #327, #400. + + +## #510 — Epic: NetScript Process Manager — bare-metal supervisor + admin console (pup/pm2 done right) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, area:docs, type:umbrella, area:plugins, wave:v1, area:telemetry, status:plan, priority:p1, rfc, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/510 + +## Epic — NetScript Process Manager + +Part of #327 (Deployment epic, bare-metal lane). **No closing keyword** — this umbrella closes by hand when its children land. + +The bare-metal deployment target of #327: how NetScript apps are run, supervised, and administered on bare metal. The concept of pup + pm2, rebuilt for 2026 as a first-party NetScript plugin (`@netscript/plugin-process-manager(-core)`, CLI group `netscript pm`) at the quality bar of `workers`/`auth`. + +### 1. Problem statement + +Today `--no-aspire` bare-metal supervision is zero automation beyond `deno task --cwd dev` run by hand in N terminals. Production restart/liveness is 100% delegated to systemd/Servy with no NetScript-owned aggregate status/logs, no runtime-mutable process list, no admin console. This epic fills that gap without re-importing pm2's god-daemon failure class. + +### 2. Prior art (verdicts) + +- **pup** (MIT, dormant ~19.5mo): excellent concept — declarative `pup.json`, 3 start policies, one REST control plane consumed by CLI/plugins/UI alike. Aged code: dax-sh over `Deno.Command`, deprecated `@std/io` readLines, god-object `Pup` class, bespoke polling-IPC telemetry, unfixed descendant-kill bug. We keep the concept, not the code. +- **pm2** (v7, Node/Bun): rich restart strategies worth matching; its always-on god-daemon caused repeated unbounded-RSS (150GB+) and daemon-duplication incidents — a structural warning, not a model. +- **Servy / systemd**: NetScript already ships production Servy + systemd adapters behind `OsServicePort`; extend (WatchdogSec/Type=notify/hardening/cgroups), don't replace. +- **process-compose / s6-rc / Quadlet**: the generator-to-native-supervisor precedent and the dependency-ordered graph model we converge on. + +### 3. Architecture (one paragraph) + +Supervision engine as a **library**: dev mode runs it foreground-attached (`netscript pm dev`, no daemon); production compiles the declarative process graph into OS-native units (systemd/Servy via the existing renderers + `OsServicePort`, extracted to **`@netscript/deploy-core`** at PM-20), and the pm's resident piece is a **control-plane service** — itself one more OS-supervised unit hosting the typed oRPC control plane, never a parent of the workload. If it dies, the workload keeps running and the OS restarts the control plane. This structurally eliminates the god-daemon failure mode. + +### 4. Scope / non-scope (binding) + +**In:** typed dependency-ordered process-graph contract; dev foreground engine; compile-to-OS-units; resident control-plane oRPC service; `netscript pm` CLI (pup parity floor); OTEL `netscript.process` domain; `--no-aspire` resolvers; browser-served admin console (desktop packaging deferred, PM-32); `OsServicePort` renderer extensions; `packages/deploy-core` extraction. +**Out:** re-implementing restart/liveness in production (OS owns it); a deployment/rollout system (#327 owns it); a monitoring product (OTEL export only); a production load balancer; milestone-1 N-instance clustering (OF-5 → Backlog, PM-35); macOS/launchd (OF-6). No god-daemon, no SaaS monitoring, no git+SSH deploy inside the pm, no untyped config, no fake cluster mode. + +### 5. Surfaces + +- **A) Admin console** — one Fresh app, three modes (OF-2): browser-served by the control-plane service ships first (PM-29); Deno-Desktop packaging second (PM-32, soft dep #456/#451); embedded `DashboardPanelContribution` panel third (PM-33, gated on CR-DDX-HOSTAGNOSTIC to #400). +- **B) Pure CLI** (`netscript pm `) — pup/pm2 parity floor, leveraging the OTEL/oRPC/deploy seams NetScript ships for free (OF-1, OF-7). + +### 6. Owner forks — RATIFIED 2026-07-06 + +All nine forks ratified by the owner (in-session, Stage H): OF-1..OF-8 = recommendation (a); **OF-5 clustering explicitly re-homed to Backlog / Triage** (PM-35); **OF-9 hard fork resolved: milestone 1 = `0.0.1-beta.8`** (beta.7 already carries 28 open issues). PM-0 rides beta.6 as an independent fix-forward precursor. + +### 7. Cross-epic dependency edges + +- #327 — parent (bare-metal lane placement). +- #400 dev-dashboard — `CommandInvokePort` first-definer (dashboard-defines-first, recorded bidirectional fallback); CR-DDX-HOSTAGNOSTIC change request (gates PM-33 only); Aspire `command` kind consumed, never extended. +- #451 / #456 (desktop Tier-4) — soft deps for PM-32 only. +- #345 — re-scoped to cross-host HA/secrets/signing; per-host multi-instance moved here (PM-35). +- fresh-ui L3 `blocks/` promotion — shared dep for PM-29 (can ship on L2 + local composition if promotion lags). + +### 8. Milestone train (post-ratification) + +- **0.0.1-beta.6:** PM-0 (hard placement — independent fix-forward). +- **0.0.1-beta.8 (M1, per OF-9):** PM-1..PM-31 (`v1-min` cuttable floor = 21 slices) + PM-32/PM-33 (M2, soft-dep #456/#451; PM-33 slips if the #400 CR is unresolved). +- **0.0.1-stable:** PM-34 + re-scoped #345 convergence. +- **Backlog / Triage:** PM-35 (per-host multi-instance / clustering, per owner OF-5 pick). + +### 9. Sub-issues + + +- [ ] **PM-0** #511 +- [ ] **PM-1** #512 +- [ ] **PM-2** #513 +- [ ] **PM-3** #514 +- [ ] **PM-4** #515 +- [ ] **PM-5** #516 +- [ ] **PM-6** #517 +- [ ] **PM-7** #518 +- [ ] **PM-8** #519 +- [ ] **PM-9** #520 +- [ ] **PM-10** #521 +- [ ] **PM-11** #522 +- [ ] **PM-12** #523 +- [ ] **PM-13** #524 +- [ ] **PM-14** #525 +- [ ] **PM-15** #526 +- [ ] **PM-16** #527 +- [ ] **PM-17** #528 +- [ ] **PM-18** #529 +- [ ] **PM-19** #530 +- [ ] **PM-20** #531 +- [ ] **PM-21** #532 +- [ ] **PM-22** #533 +- [ ] **PM-23** #534 +- [ ] **PM-24** #535 +- [ ] **PM-25** #536 +- [ ] **PM-26** #537 +- [ ] **PM-27** #538 +- [ ] **PM-28** #539 +- [ ] **PM-29** #540 +- [ ] **PM-30** #541 +- [ ] **PM-31** #542 +- [ ] **PM-32** #543 +- [ ] **PM-33** #544 +- [ ] **PM-34** #545 +- [ ] **PM-35** #546 + +### 10. Open questions (carried from plan §9) + +1. Telemetry T2 owner sign-off on E15 (mint only `netscript.process`; no `netscript.service.instance`). +2. #400's answer to CR-DDX-HOSTAGNOSTIC — gates PM-33's milestone only. +3. `followLogs` rate-cap numbers (bounded policy required by PM-13 acceptance; exact figures at implementation). +4. fresh-ui L3-blocks sequencing for PM-29. + +### 11. Design source + +`.llm/runs/plan-process-manager--seed/` on PR #504: `plan.md` (Stage E, amended at Stage F, PLAN-EVAL PASS) + `research/design/d1..d5-*.md` + `research.md` §C1–C7. + + + + +## #400 — epic: NetScript Dev Dashboard — the Aspire/Scalar satellite that drives the framework (ships as a plugin, beta.6) +- state: open | milestone: 0.0.1-beta.13 | labels: type:umbrella, area:plugins, area:aspire, wave:v1, area:fresh-ui, area:telemetry, status:plan, priority:p1, epic:dev-dashboard +- url: https://github.com/rickylabs/netscript/issues/400 + +## Summary + +A DX-oriented dev dashboard shipping as `plugins/dashboard` + `packages/plugin-dashboard-core` on `@netscript/fresh-ui`. It is a **satellite of Aspire's control surface, not a rival** — and it is **how you drive the framework**: it renders only NetScript-domain state Aspire and Scalar cannot see, mirrors the CLI's management verbs through the UI, and deep-links back out to Aspire/Scalar for everything they already own. + +**Rescoped 2026-07-06 (owner mandate, amended same day).** The pass-1 direction duplicated Aspire/Scalar surfaces. The rescope keeps three pillars from the original seed research: **Observe** (only-NetScript state), **Manage** (Appwrite-style per-capability console mirroring the CLI), **Follow** (Encore-model live seam-flow, never re-rendered OTLP). + +## DX thesis + +Answer the questions no existing tool can: *"is my NetScript app wired the way I declared it, what is my runtime doing right now at the primitive level, what did this request actually cause, and let me act on it without leaving the browser."* + +- **Aspire owns:** resources, console/structured logs, raw traces, metrics, health, process lifecycle. +- **Scalar owns:** API reference, schemas, try-it, code samples. +- **The dashboard owns:** primitive run-state (executions/attempts, saga instances incl. `compensating`, trigger firings, stream deliveries), the runtime override/config layer **including gated write-back**, plugin-registry wiring + doctor + contribution axes, contract provenance/coverage/duality, route→contract binding, codegen/scaffold state (migrations, drift), **the per-capability management loop (create → configure(tabs) → monitor)**, and **the live request journey across framework seams (S13)**. + +## Authoritative screen set (supersedes the pass-1 DDX panel list) + +- **S1 Shell & Wiring Home** — #415 (v2: + quick-action strip mirroring top CLI verbs) +- **S2 Config Resolution & Topology Hand-off** — #416 (v2: + live-traffic edge overlay, Encore Flow model) +- **S3 Runtime-Config Monitor & Control** ⚑ flagship — #551 (DDX-20, new; v2: write-back gated on #556, beta.7) +- **S4 Service & Contract Catalog** — #417 (provenance/coverage/duality only; no try-it) +- **S5 Plugin Control** (dogfood centerpiece) — #420 (v2: + install/scaffold entry points, marketplace-lite) +- **S6 Run Inspector + NetScript run-overlay** — #419 (run-centric) +- **S7–S10 Workers / Sagas / Triggers / Streams consoles** — #428 #429 #430 #431 (v2: each completes the create→configure→monitor→act management loop) +- **S11 DB Migrations & Drift** — #552 (DDX-21, new; beta.6-if-cheap; migrate/seed actions) +- **S12 Dead-Letter Queues** — #553 (DDX-22, new; wave:defer, gated on thin API slices) +- **S13 Live Flow — request journey** ⚑ flagship #2 — #418 (v2 REWRITE, was pass-1 waterfall: now the seam-event causal chain — request → payload → job → saga → fan-out — with per-node Aspire out-links) + +## Acceptance lines (MANDATORY, gate every slice) + +1. **Non-duplication.** No dashboard screen may render, as an owned surface: an OTLP trace waterfall / span-bar gantt, a structured/console log tail, a metrics chart, a resource start/stop/restart panel, or an OpenAPI operation list / try-it console. Each is Aspire's or Scalar's job and MUST be a deep-link out. Every merged panel must pass **"why can't this just deep-link to Aspire/Scalar?"** with a NetScript-only answer recorded in its issue — only-NetScript *state*, only-NetScript *action* (CLI-mirroring), or framework-*seam semantics* raw OTLP cannot express. +2. **One generator, two callers.** Every dashboard mutation invokes the same contract route / CLI scaffolder the terminal does and renders its CLI-equivalent line (`netscript …` CodeBlock). No dashboard-only write paths, no forked codegen. +3. **Flow ≠ waterfall.** S13 renders a primitive-grouped causal chain with payloads at seams, assembled from NetScript's own seam events; the moment raw timing/span detail is needed it out-links to Aspire `/traces/detail/{id}`. No span bars, no time-proportional gantt, no log tails in S13 — ever. + +## Integration seams (four seams, one URL scheme) + +1. **Aspire → dashboard:** `WithUrl("NetScript Dashboard", /resource/{name})` on every scaffolded resource + two framework `withCommand`s — generator emission on #424, Seam A widening (`command`/`app` kinds) on #411, Seam B interim. +2. **Dashboard → Aspire:** correlation-only `TelemetryQueryPort` (#413) resolves a `traceId`, then out-links to `{aspireBase}/traces/detail/{id}`, `/structuredlogs?resource=`, `/consolelogs/resource/`, `/metrics/resource/`. Never re-renders OTLP. The S13 flow plane does **not** widen this port. +3. **Dashboard → Scalar:** `/api/docs` (+ operation anchor) deep-links only; `externalDocs` optional polish. +4. **Data plane:** owned `/_netscript/*` introspection (#423) over already-shipped oRPC contracts, **plus `/_netscript/flows` (SSE)**: beta.6 joins the shipped per-primitive streams on the stamped `traceparent`; co-req DDX-23 (#557) adds the unified seam-event envelope + HTTP boundary events. + +## Killed / folded surfaces (documented so they don't creep back) + +- Raw OTLP waterfall renderer (pass-1 #418 scope → dead; #418 rescoped to the S13 seam-flow journey, which is not a waterfall — acceptance line 3). +- Logs panel (#421 → closed; correlated strip in S6 deep-links Aspire logs). +- Resource-control panel (#422 → closed; delivered as `withCommand` contributions *inside Aspire*). +- Service `/health` panel (→ Aspire State column via a proper `withHealthCheck()` wiring fix). +- Metrics charts + GenAI conversation view (→ Aspire, link only). +- Scalar-style operation list / try-it (→ Scalar `/api/docs`; the S4 catalog is provenance-only). + +## Slice map / dependencies + +Plumbing: #410 (fresh-ui L3 blocks) → #412 (core scaffold, + `FlowRecord`) → #414 (thin plugin) · #411 (Seam A) · #413 (+#408 telemetry T7) · #423 (introspection + flows join) · #424 (CLI/deep-links/generator) · #427 (panel seam — the Directus-validated contribution axis). +Screens: #415, #416, #417, #418 (S13), #419, #420, #428–#431, DDX-20/21/22 (#551 #552 #553). +Management wave (beta.7): #432 elevated — "Add resource" scaffold-from-UI keystone; DDX-23 seam-event envelope #557; template-gallery create entries in S5/S7–S10. +Design pre-step: #507 (S1–S13 Claude Design prototype; duplication caught at design review). UI quality: #509. +Gate: #426 (E2E join + panel smoke; v2 adds the S13 flow-chain assertion, still no owned-waterfall assertion). +Co-requisites (wave:defer): `TriggerDlqPort` contract route #554, `queue` `DeadLetterStore` CLI/API #555. Co-requisite (beta.7): runtime-config mutation use-cases #556 (S3 write-back — surface check 2026-07-06: the store is read+watch-only today). +Deferred convergences: in-dashboard AI-on-codegen (with #238), in-app plugin marketplace beyond S5 marketplace-lite. + +Refs #301 (road to stable). Co-lands with `epic:telemetry-revamp` (#399) for T4–T7 correlation fidelity. + + +## #327 — epic: NetScript enterprise deployment framework (cloud-agnostic + bare-metal, CLI + Aspire) +- state: open | milestone: 0.0.1-stable | labels: area:cli, type:umbrella, area:aspire, status:plan, priority:p2, area:deploy, epic:deployment +- url: https://github.com/rickylabs/netscript/issues/327 + +## NetScript Enterprise Deployment Framework + +Turn NetScript into an **enterprise-grade, cloud-agnostic AND bare-metal-compatible deployment framework**, with **first-class support through BOTH the CLI and Aspire**. NetScript is Deno-native, so Deno deployment targets (especially the new **Deno Deploy**) are first-class strategic surface. The whole design is grounded on Aspire's publish/deploy model. + +This is a **child epic of the Road-to-0.0.1-stable umbrella** and must not block it — it links in as a child once filed. + +Research corpus (77 cached sources), the full architecture spec, the SERVY assessment, and the decision/gap tracker were produced under the harness run `epic-deployment-aggregation` (branch `research/deployment-aggregation`). This issue embeds the load-bearing conclusions inline. + +--- + +### How NetScript maps onto Aspire's deploy model +- **Two-command spine**: `aspire publish` emits static artifacts (compose/Helm/Bicep) for review/GitOps; `aspire deploy` resolves params + applies. NetScript's CLI wraps both for cloud targets and drives bare-metal directly. +- **Compute-environment (compose / k8s / AKS / ACA / App Service) is orthogonal to Aspire-environment (dev/staging/prod)**. +- **Pipelines are step-graphs** (`AddStep` / `WithPipelineStepFactory`, replacing the deprecated `WithPublishingCallback`). **The TypeScript AppHost drives the full container/cloud lane today** — `addContainer('denoland/deno:2')`/`addDockerfile`, `addDockerComposeEnvironment`/`addKubernetesEnvironment`/`addAzureContainerAppEnvironment`, per-resource `publishAsDockerComposeService`/`publishAsKubernetesService`/`publishAsAzureContainerApp` callbacks, and app-level `pipeline.addStep(...)` are all TS-expressible (verified via the `?aspire-lang=typescript` doc tab). The only genuinely C#-only capability is authoring brand-new custom resource *types*, which NetScript's container lane does not need. +- **Deno app publish shape** is realized with the built-in TS container primitives above (`PublishAsNodeServer` is Node-runtime-specific and won't run Deno). The ada2a5 `AddDenoApp` + `denoland/deno:2` single-stage publish + `OTEL_DENO` is **optional DX sugar on top, not a prerequisite**. +- Deployment state is cached/idempotent (`~/.aspire/deployments/{sha}/{env}.json`); CI/CD is two-layer (outer GH-Actions/AzDO pipeline invokes the inner Aspire step-graph non-interactively). + +### CLI surface (generalized beyond today's Windows-only tree) +- Evolve config `deploy.windows.*` → **`deploy.targets.*`** (multi-target). +- `netscript deploy ` router: cloud targets wrap `aspire publish`/`aspire deploy`; bare-metal targets drive an `OsServicePort` directly. + +### Bare-metal successor (SERVY verdict: MODERNIZE) +SERVY upstream (aelassas/servy, C#/MIT, v8.5) is healthy — the rot is entirely NetScript-side (Windows-locked, doc/code divergence, no rollback/multi-instance, weak secrets, fake-only tests, dead `docker`/`script` config, `deno:2.5` pin). Reuse the sound `ProcessPort`/`WindowsServicePort` seam and **generalize `WindowsServicePort` → `OsServicePort`** with `servy` (Windows) + `systemd` (Linux) adapters, on a `deno compile` single-binary artifact, adding rollback / multi-instance / secrets / OTEL / health-gate. + +--- + +### Per-target readiness & tier proposal + +| Target | Model | Driven via | First-party Deno | Proposed tier | +| --- | --- | --- | --- | --- | +| Deno Deploy (new platform) | deno-native source build | CLI → `deno deploy` / GitHub-push | Yes (first-party) | **1 (beta)** | +| `deno compile` bare-metal (Linux/Windows) | single binary + systemd/servy | CLI → `OsServicePort` | Yes (deno-native) | **1 (beta)** | +| Docker / Compose (self-host) | image + compose | CLI → `aspire publish/deploy` (TS AppHost) | TS `addContainer`/`publishAsDockerComposeService` (ada2a5 = optional DX) | **1 (beta)** | +| Kubernetes | generated manifests/Helm | CLI → `aspire publish` (TS AppHost) | TS `addKubernetesEnvironment`/`publishAsKubernetesService` (ada2a5 = optional DX) | 2 (stable) | +| Azure ACA / App Service / AKS | Aspire compute-env | CLI → `aspire deploy` (TS AppHost) | TS `addAzureContainerAppEnvironment`/`publishAsAzureContainerApp` (ada2a5 = optional DX) | 2 (stable) | +| GCP Cloud Run / Koyeb / DigitalOcean / Render | Docker image / droplet | CLI emits; provider CLI | Docker path (no native) | 2 (stable) | +| Sevalla / Dokploy / Coolify | Docker / self-host compose | CLI emits compose | no native Deno | 3 (track) | +| Vercel / Cloudflare / AWS Lambda | unofficial runtime / isolate / container | RFC-14 Nitro unified-mode | not first-party | 3 (track) | + +### Watch-item verdicts +- **`deno compile` single-binary — ADOPT NOW** (mature 5-triple cross-compile, asset embedding; the bare-metal artifact). +- **`deno desktop` — TRACK** (v2.9 VFS + `Deno.autoUpdate`; but code signing/notarization not automated). +- **Pulumi #3838 (Deno provider, 0.140) — TRACK** (0.140 milestone = intent, not shipped; real blocker is gRPC-server-in-Deno, denoland/deno#23714). +- **Nitro `deno_server` preset — TRACK** (still needs `--unstable`; central to RFC-14 unified-mode). +- **RFC-14 unified-mode — PRODUCT DECISION** (Nitro v3 + oRPC + Fresh 2, mode-parity, sagas excluded, ~3-5 months) — see open decisions. + +### Critical path (corrected 2026-07-03) +**There is no upstream hard dependency on the critical path.** The earlier "the Aspire container/cloud lane is gated on the ada2a5 `AddDenoApp` seam because custom publish steps are C#-only" finding was an artifact of reading only the default C# doc tab and is **substantially false** — re-verifying the `?aspire-lang=typescript` tab shows the TS AppHost drives the whole container lane today (evidence: `sources/aspire/*--ts-tab.md`). **Phases 0-3 (config contract, bare-metal successor, Deno Deploy adapter, AND the Aspire container lane) all have no upstream blocker and can proceed in parallel.** ada2a5 `AddDenoApp` becomes an optional DX enhancement to fold in later (TRACK). The only capability that remains C#-only — authoring brand-new custom resource *types* — is not needed by this lane. + +--- + +### Product decisions — RESOLVED (2026-07-03, delegated to epic supervisor) +The user delegated all six with a prioritize-don't-ship-everything mandate. These are calls, not questions; all reversible. + +| # | Decision | Verdict | Milestone | +|---|----------|---------|-----------| +| D1 | RFC-14 unified-mode (tier-3 serverless via Nitro) | **WATCH / separate track — not v1.** 3-5mo, distinct arch, excludes sagas, `--unstable` Nitro preset; Aspire+Deno Deploy already give a strong cloud story without it. | deferred (watch) | +| D2 | Flagship one-click | **Deno Deploy = beta marquee** (deno-native, no Dockerfile, shortest path, Deno-team play); **Aspire Docker/Compose ships alongside in beta** as the cloud-agnostic proof; k8s/Azure = stable. | 0.0.1-beta | +| D3 | Bare-metal hardening line | **v1 = systemd + `deno compile` + atomic rollback + health-gated activation + `OTEL_DENO` + restricted-perm env-file secrets.** Defer multi-instance/HA + external secret store to stable. | beta / stable split | +| D4 | `deno compile` signing | **Accept manual/documented for v1; do not block.** Cross-platform signing is platform-specific scope; add a pipeline hook now, automate at stable. | beta (doc) / stable (auto) | +| D5 | `deploy.windows.*` migration | **CLEAN BREAK to `deploy.targets.*` — no back-compat alias** (user override 2026-07-03: "we're alpha, breaking changes are allowed, go production-grade directly"). Windows lane re-keyed to `deploy.targets.windows` + one-line migration note. | 0.0.1-beta | +| D6 | Pulumi IaC adapter | **PURE WATCH — not a planned lane.** #3838 is OPEN + `blocked` (gRPC-server-in-Deno `denoland/deno#23714` unshipped); Aspire already covers IaC (Bicep/Helm/compose). | deferred (watch) | + +Strategic plays (informational, not blocking): Deno Deploy first-class support = Deno-team play (D2 marquee); ada2a5 `AddDenoApp` = Aspire-team play (folded into the Aspire lane as optional DX when it lands). **No `NEEDS USER:` items** — all six decided (D5 now a user-overridden clean break); D2 positioning is the most product-facing and cheaply revisitable. + +### Priority ordering +**0.0.1-beta (tier-1):** `deploy.targets.*` contract (clean break, no windows alias) · deployment doctrine archetype · `OsServicePort`+`SystemdAdapter`+`deno compile`+rollback+health-gate+OTEL+basic secrets · **Deno Deploy adapter (marquee)** · Aspire Docker/Compose via TS AppHost · docs/code divergence fix. +**0.0.1-stable (tier-2):** k8s + Azure via TS AppHost · Docker-image providers (Cloud Run/Koyeb/Render/DigitalOcean) · CI/CD template gen + state/secret hardening · bare-metal HA + external secret store + signing automation · one-click convergence + release-skill. +**Watch (deliberately not v1):** RFC-14 unified-mode + Nitro preset (D1) · tier-3 serverless (Vercel/CF/Lambda) · Pulumi #3838 (D6) · exotic self-host (Sevalla/Dokploy/Coolify — generic compose emit) · ada2a5 `AddDenoApp` (optional DX fold-in) · `deno desktop` (reference only). + +--- + +### Sub-issue slices (filed 2026-07-03 — `[Deploy-Sx]`, grouped by phase) + +**0.0.1-beta.1 (tier-1):** +- [x] #337 **[S1]** `deploy.targets.*` config contract — clean break, no windows alias (Phase 0, D5) · `wave:v1-min` +- [x] #338 **[S2]** Deployment target-adapter archetype doctrine entry (Phase 0; coordinate with #305) · `wave:v1-min` +- [x] #344 **[S8]** Fix docs/code divergence (`deploy.md` + `cli-deploy-artifacts-missing`) (Phase 0) · `wave:v1-min` +- [x] #339 **[S3]** `WindowsServicePort` → `OsServicePort` + `SystemdAdapter` (Phase 1) · `wave:v1` +- [x] #340 **[S4]** `deno compile` single-binary bare-metal artifact — manual signing (Phase 1, D4) · `wave:v1` +- [x] #341 **[S5]** Bare-metal hardening (beta): rollback + health-gate + `OTEL_DENO` + basic secrets (Phase 1, D3) · `wave:v1` +- [x] #342 **[S6]** Deno Deploy tier-1 adapter — **MARQUEE** (Phase 2, D2) · `priority:p0` · `wave:v1` +- [x] #343 **[S7]** Aspire Docker/Compose lane via TS AppHost (Phase 3a; not blocked on #320) · `wave:v1` + +**0.0.1-stable (tier-2):** +- [ ] #345 **[S9]** Bare-metal enterprise hardening (stable): HA + external secret store + signing automation (D3/D4) +- [ ] #346 **[S10]** Aspire Kubernetes + Azure + Docker-image providers (Cloud Run/Koyeb/Render/DO) (Phase 3b) +- [x] #347 **[S11]** CI/CD template generation + state/secret hardening (Phase 4) +- [ ] #348 **[S12]** One-click convergence + release-skill integration (Phase 5) + +**Backlog / Triage (watch — deliberately not v1):** +- [ ] #349 **[S13]** WATCH: RFC-14 unified-mode + Nitro `deno_server` preset — tier-3 serverless (D1) +- [ ] #350 **[S14]** WATCH: Pulumi #3838 Deno provider — IaC adapter feasibility (D6) + +--- + +### TIER-4 — Desktop / single-process / offline-first (NEW — milestone `0.0.1-beta.8` core, `0.0.1-stable` hardening; low priority; **ships FULLY as one tier — no single-process-early / desktop-later split**) + +NetScript apps shippable to end-user devices as a 1-click, offline-first desktop package, running the backend **in-process** (true single-process) rather than as separate loopback processes. Grounded in the completed eis-chat `deno desktop` spike (`docs/DESKTOP-SHELL.md`, option (b) shipped in prod → option (c) true single-process target). This reclassifies desktop out of the earlier `deno desktop — TRACK` watch-item posture into a first-class Tier-4. + +**Precursor (must land before beta.8):** +- [ ] #451 **[#E1]** `@netscript/sdk` in-process link-mode adapter (`createInProcessClientLink` + `ServiceClientTransport` switch + in-process registry). Unblocks true single-process; the server-side `ServiceApp.fetch()` mount seam already ships. *(Strikes the mis-referenced "172a-2 service-base-seam" dependency — PR #172 is merged CLI type-soundness, unrelated. See drift E1.)* + +**beta.8 core (ship together):** +- [ ] #452 **[#E2]** desktop app-type in the Aspire generator (folds #375, promoted from Backlog/Triage p3) — option (b) desktop shell as a first-class generator primitive. +- [ ] #453 **[#E3]** tursodb single-writer relocation + in-process composition root — per-user data dir, `build()` in the desktop process, sole lock holder. Avoids the native-addon-in-VFS spike. +- [ ] #454 **[#E4]** true single-process mode — dashboard wired through the link-mode adapter in the packaged binary (option (c)). Deps #451 + #453. +- [ ] #455 **[#E5]** offline-first — Turso Sync (`pull`/`push`, last-push-wins + `transform`) in the single-process host. +- [ ] #456 **[#E6]** 1-click packaging + release/update server — `deno desktop` cross-compile, `latest.json` + bsdiff + Ed25519-signed manifests, Windows stages-not-applies manual-apply fallback. + +**stable (hardening + gate):** +- [ ] #457 **[#E7]** desktop/single-process deploy-e2e — extends #394's bare-metal-first deploy-e2e harness to the desktop target. Foundation: #393 (compose target registration), #394 (deploy-e2e). +- [ ] #458 **[#E8]** signing automation — macOS Developer-ID + `notarytool`; Windows `signtool` (D4: manual/documented for v1, automate at stable). + +**Naming hygiene:** #349 (RFC-14 tier-3 serverless + Nitro `deno_server`) remains a **WATCH sibling** here — it is a *different* "unified" sense (serverless bundling), **not** merged into the desktop single-process scope. See #371/#372 for the KV-layer "unified" sense (already solved). + +--- + +The full phased execution plan (per-phase goals, deliverables, DAG, acceptance gates) is in the pinned **PLAN** comment below. + +--- + +Grounded on 77 cached sources (Aspire deployment suite, Deno Deploy/sandbox, 10 providers, watch items, netscript-start POC). Full spec: `deployment-architecture-spec.md`; SERVY assessment: `servy-assessment.md`; decision/gap tracker: `decision-gap-tracker.md` — harness run `epic-deployment-aggregation`. + + + +# Comments on #820 + diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-pm-subissues.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-pm-subissues.md new file mode 100644 index 000000000..0c5254189 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-pm-subissues.md @@ -0,0 +1,971 @@ +# PM sub-issues #512–#545 + +## #512 — [process-manager PM-1] Process-graph contract v1 (ProcessGraphShape/ProcessSpecShape + state vocabulary + restart policies) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:config, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/512 + +## Summary +The typed foundation of the epic: `ProcessGraphShape`/`ProcessSpecShape` Zod schemas (exported as Standard Schema, JSON Schema derived — E11), the canonical state vocabulary (E2: engine FSM canonical, wire enum a projection with an explicit mapping table), and restart/start-policy sub-schemas with S7 pm2-floor defaults (E3: backoff double-to-cap-15000ms, reset-after-30000ms). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` `contracts/v1` (Archetype 2) +- Part of #510 +- Depends on: — · Blocks: most of the DAG +- **Includes precursor:** re-export `WorkerTaskPermissions` (+ schema) from `@netscript/plugin-workers-core` `mod.ts` (today internal-only at `src/executor/executor-types.ts:33-41`; doctrine 02 bars internal-path imports, 09 bars duplication) + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §1 + `d1-supervision-engine-core.md` (state machine) · `plan.md` §4 PM-1, E2/E3/E11 + +## Acceptance criteria +- [ ] gate: schemas Zod-authored, Standard Schema exported, JSON Schema derived (not hand-maintained) +- [ ] gate: one state vocabulary — wire `ProcessState` defined once in `contracts/v1` as a projection of the engine FSM with a mapping table +- [ ] gate: restart defaults are D1 controller constants (15000/30000), not D5's stale 30000/10000 +- [ ] gate: `WorkerTaskPermissions` re-exported from workers-core `mod.ts`; pm imports it from the public surface +- [ ] gate: `deno doc --lint` clean on the full export map; public surface ≤ 20 per mod.ts +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- No `instances > 1` semantics (E9 hard-errors — PM-35 owns clustering); no deploy-facing target schema (PM-21). + +## Drift / Debt +- none + + + +## #513 — [process-manager PM-2] Telemetry: netscript.process domain + ProcessInstrumentationLike facade +- state: open | milestone: 0.0.1-beta.12 | labels: type:feat, area:telemetry, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/513 + +## Summary +Mint the `PROCESS: 'netscript.process'` telemetry domain and the `ProcessInstrumentationLike` facade (+ no-op) in `packages/telemetry`, per the T1/T2 conventions. E15: reuse OTEL semconv identity keys verbatim; no `netscript.service.instance` (confirm with telemetry T2 owner during implementation — carried note, not a blocker). + +## Scope +- Archetype / area: `packages/telemetry` +- Part of #510 +- Depends on: — · Blocks: PM-14 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S10) + `d2-control-plane-contract.md` §7.1 · `plan.md` §4 PM-2, E15 + +## Acceptance criteria +- [ ] gate: `netscript.process` domain constant + facade + no-op land in `packages/telemetry` following the T1 convention +- [ ] gate: no new attribute keys where OTEL semconv already defines them +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Span/metric catalog wiring is PM-14; no engine code here. + +## Drift / Debt +- none + + + +## #514 — [process-manager PM-3] Core package scaffold: ports + KV registry adapter +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:kv, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/514 + +## Summary +Scaffold `packages/plugin-process-manager-core` (Archetype 2, workers-core analog): `ProcessRegistryPort` + runner port definitions, and the KV registry adapter on Deno 2.9 per-app-name persistent KV (`['pm', …]` key space). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` ports + adapters +- Part of #510 +- Depends on: #512 · Blocks: PM-6, PM-17, PM-18 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S2 + D1-S6) · `plan.md` §4 PM-3 + +## Acceptance criteria +- [ ] gate: package scaffolded per doctrine (mod.ts export map, README, JSR-ready deno.json) +- [ ] gate: KV adapter uses `@netscript/kv` conventions; keys under `['pm', …]` +- [ ] gate: ports are real contracts (no phantom typing — type-soundness law, only the 2 accepted casts) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- No supervisor loop (PM-6); no OS-service ports (PM-17). + +## Drift / Debt +- none + + + +## #515 — [process-manager PM-4] Restart controller: pure nextDelay(state, policy, clock) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/515 + +## Summary +Pure restart-decision function `nextDelay(state, policy, clock)`: S7 numbers locked (E3 — exp backoff double-to-cap-15000ms, reset-after-30000ms stable), windowed restart budget, skip-exit-codes, and poll-based memory threshold with **default `pollIntervalMs: 5000`, configurable per policy** (latency explicit). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` engine +- Part of #510 +- Depends on: #512 · Blocks: PM-6 + +## Design source +- `research/design/d1-supervision-engine-core.md` (restart controller) · `plan.md` §4 PM-4, E3 + +## Acceptance criteria +- [ ] gate: pure function — deterministic under injected clock; unit tests cover backoff/reset/budget/skip-exit-codes +- [ ] gate: memory threshold is poll-based with configurable `pollIntervalMs` (default 5000) — never marketed as a watchdog (R10) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Process spawning (PM-5); OS watchdogs (systemd `WatchdogSec` is PM-15/16). + +## Drift / Debt +- none + + + +## #516 — [process-manager PM-5] Process runner: Deno.Command-native spawn + descendant-tree kill +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/516 + +## Summary +Lean `Deno.Command`-native process runner (no dax): `RuntimeCommandSpec` + argv builders, `buildEnvironment()` trace injection (TRACEPARENT), `TextLineStream` output handling, and a correct descendant-tree kill (POSIX process-tree walk / Windows `taskkill /T`) — fixing pup's unfixed descendant-kill bug class. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` engine +- Part of #510 +- Depends on: #512 · Blocks: PM-6, PM-7 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S4 + D1-S5) · `plan.md` §4 PM-5 + +## Acceptance criteria +- [ ] gate: spawn/stream/kill covered by tests incl. a descendant-tree kill test on both platforms' code paths +- [ ] gate: no dax / no `@std/io` deprecated APIs — Web Platform + `Deno.*` only +- [ ] gate: TRACEPARENT env injection present and tested +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Restart policy (PM-4); log persistence (PM-7). + +## Drift / Debt +- none + + + +## #517 — [process-manager PM-6] Supervisor loop + composable start policies (autostart/cron/watch) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/517 + +## Summary +The supervision engine loop composing PM-3/4/5, with the three start policies: autostart, cron via `@netscript/cron` `createScheduler()`, and watch via `Deno.watchFs`. Dependency-ordered graph startup. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` engine +- Part of #510 +- Depends on: #514, #515, #516 · Blocks: PM-8, PM-10, PM-35 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S7) · `plan.md` §4 PM-6 + +## Acceptance criteria +- [ ] gate: start policies composable per process; cron reuses `@netscript/cron` (wrap-don't-reinvent) +- [ ] gate: dependency-ordered startup with readiness gating (E14 grace-window default; `sd_notify`/HTTP probe opt-in) +- [ ] gate: engine is a library — zero daemon assumptions (C1) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Control plane (PM-10); dev CLI (PM-27). + +## Drift / Debt +- none + + + +## #518 — [process-manager PM-7] Log multiplexer + persistent sink (rotation) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, wave:v1, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/518 + +## Summary +Log multiplexer over runner output streams + persistent sink with rotation; journald/Servy interplay documented (who owns persistence per mode). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` engine +- Part of #510 +- Depends on: #516 · Blocks: PM-13 (follow-logs source) + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S8) · `plan.md` §4 PM-7 + +## Acceptance criteria +- [ ] gate: rotation policy tested (size/count bounds); no unbounded growth +- [ ] gate: docs state the journald/Servy interplay per mode (dev vs OS-supervised) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Log streaming over the wire (PM-13). + +## Drift / Debt +- none + + + +## #519 — [process-manager PM-8] Dev loop + ShutdownManager integration (engine side of pm dev) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/519 + +## Summary +The foreground dev loop (engine side of `netscript pm dev`): `ShutdownManager` integration, ordered teardown, Windows signal caveat (denoland/deno#28081 — listener suppresses default action; re-invoke exit/teardown explicitly). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` engine +- Part of #510 +- Depends on: #517 · Blocks: PM-27 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S9) · `plan.md` §4 PM-8, R5 + +## Acceptance criteria +- [ ] gate: Ctrl+C teardown kills the whole graph in dependency order on POSIX and Windows code paths +- [ ] gate: Windows 6-signal caveat handled and tested (explicit exit re-invocation) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- CLI UX/multiplexed output rendering (PM-27). + +## Drift / Debt +- none + + + +## #520 — [process-manager PM-9] ProcessManagerContract v1: the 18-route table +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/520 + +## Summary +The typed oRPC contract: exactly the normative 18-route table (E4/F-2) — `describe · listProcesses · getProcess · status · health · getState · logs · followLogs · start · stop · restart · block · unblock · terminate · applyGraph · subscribeEvents · mintToken · revokeToken` — with Zod schemas, spreading `BASE_PLUGIN_CONTRACT_ROUTES`, `satisfies`, no erasure cast. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` `contracts/v1` +- Part of #510 +- Depends on: #512 · Blocks: PM-10, PM-13, PM-25, PM-29 + +## Design source +- `research/design/d2-control-plane-contract.md` §1.3 (normative) · `plan.md` §4 PM-9, E4 + +## Acceptance criteria +- [ ] gate: exactly the 18 routes — no hidden routes minted; CLI-only verbs (`reload`, `enable-service`, `disable-service`) map in PM-26, never here +- [ ] gate: extends the base plugin contract seam (`BASE_PLUGIN_CONTRACT_ROUTES` spread + `satisfies`; only the 2 accepted casts) +- [ ] gate: lifecycle actions are accepted-style async (`ActionResult {id, action, accepted, state, correlationId}`) +- [ ] gate: `deno doc --lint` clean on the full export map +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Handlers (PM-10); transport (PM-11); auth (PM-12). + +## Drift / Debt +- none + + + +## #521 — [process-manager PM-10] Control-plane oRPC service (PluginServiceContribution) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/521 + +## Summary +The resident control-plane service: `PluginServiceContribution` (`axis:'service'`) hosting the PM-9 contract over the engine, with async `accepted`-style lifecycle handlers. One more OS-supervised sibling unit — never a parent of the workload (C1). + +## Scope +- Archetype / area: `plugins/process-manager` service contribution + core service impl +- Part of #510 +- Depends on: #520, #517 · Blocks: PM-11, PM-12, PM-13, PM-14 + +## Design source +- `research/design/d2-control-plane-contract.md` §2 (D2-S3) · `plan.md` §4 PM-10 + +## Acceptance criteria +- [ ] gate: service extends the base service seam (contract/service base — no phantom typing) +- [ ] gate: lifecycle handlers return `accepted` immediately; state transitions observable via `getState`/events +- [ ] gate: control-plane death does not touch workload processes (sibling-unit invariant asserted in tests) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Transport/discovery (PM-11); token auth (PM-12). + +## Drift / Debt +- none + + + +## #522 — [process-manager PM-11] Loopback transport + address-descriptor discovery + CLI degraded mode +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/522 + +## Summary +Loopback TCP oRPC transport (single canonical transport, E6 unix-socket deferred) + address-descriptor discovery (KV + file) + the CLI degraded-mode fallback seam (OS-layer reads when the control plane is down). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` transport/discovery +- Part of #510 +- Depends on: #521 · Blocks: PM-25 +- **Acceptance documents that the control plane is network-reachable on 127.0.0.1** (TCP-only until E6's unix-socket upgrade) so token auth (PM-12) is understood as load-bearing, not defense-in-depth (F-5) + +## Design source +- `research/design/d2-control-plane-contract.md` §4 (D2-S4) · `plan.md` §4 PM-11, E6, R4 + +## Acceptance criteria +- [ ] gate: address descriptor written to KV + file with 0o600 perms; discovery precedence tested +- [ ] gate: docs/README state the 127.0.0.1 reachability + token-auth-is-load-bearing posture explicitly +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Unix sockets (deferred, E6); remote/non-loopback bind (deny-remote default is PM-12). + +## Drift / Debt +- none + + + +## #523 — [process-manager PM-12] Token auth: opaque bearer + 0o600 secrets + deny-remote default +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/523 + +## Summary +Control-plane auth per E7: opaque high-entropy bearer tokens (Web Crypto), hashed at rest, KV revocation set, secrets-convention 0o600 storage, deny-remote default. Zero-dep — no JWT unless cross-host federation (a non-goal) ever lands. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` auth +- Part of #510 +- Depends on: #521 · Blocks: PM-26 + +## Design source +- `research/design/d2-control-plane-contract.md` §3.1(a) (D2-S5) · `plan.md` §4 PM-12, E7 + +## Acceptance criteria +- [ ] gate: tokens hashed at rest; revocation via KV set; `mintToken`/`revokeToken` routes wired +- [ ] gate: token file 0o600 via the secrets convention; deny-remote default asserted in tests +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- JWT/federation; UI auth flows (console reuses the same bearer). + +## Drift / Debt +- none + + + +## #524 — [process-manager PM-13] Event stream + follow-logs (eventIterator, live-only v1) +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, wave:v1, type:feat, status:plan, priority:p2, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/524 + +## Summary +`subscribeEvents` + `followLogs` over oRPC `eventIterator`; KV-watch stays server-internal; live-only in v1 (E8) — reconnecting clients re-sync via `status`/`getState`. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` streaming +- Part of #510 +- Depends on: #520, #521 · Blocks: PM-28 + +## Design source +- `research/design/d2-control-plane-contract.md` §5 (D2-S6) · `plan.md` §4 PM-13, E8 + +## Acceptance criteria +- [ ] gate: `followLogs` carries a bounded rate-cap policy (exact figures at implementation — plan §9 residual 3) +- [ ] gate: live-only semantics documented; reconnect re-sync path tested +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Replayable KV event cursor (deferred, E8). + +## Drift / Debt +- none + + + +## #525 — [process-manager PM-14] Telemetry wiring: span/metric catalog + 14-point checklist +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, wave:v1, type:feat, area:telemetry, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/525 + +## Summary +Wire the `netscript.process` span/metric catalog through engine + control plane, including the `netscript.process.control_plane.rss.bytes` NFR gauge (the anti-god-daemon self-watch). All 14 telemetry-checklist points asserted. + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` + `plugins/process-manager` +- Part of #510 +- Depends on: #513, #521 · Blocks: — + +## Design source +- `research/design/d2-control-plane-contract.md` §7 (D2-S7) · `plan.md` §4 PM-14, R3 + +## Acceptance criteria +- [ ] gate: 14-point telemetry checklist green (D2 §7.5 mapping) +- [ ] gate: pm authors its own subprocess spans (OTEL_DENO has zero subprocess coverage — R3); TRACEPARENT reuse verified +- [ ] gate: no-op fallback (TC-12) when telemetry is off +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- New telemetry domains (PM-2 owns the mint). + +## Drift / Debt +- none + + + +## #526 — [process-manager PM-15] systemd renderer knobs: Type=notify, WatchdogSec, hardening, cgroups v2 +- state: open | milestone: 0.0.1-beta.12 | labels: wave:v1, type:feat, status:plan, priority:p2, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/526 + +## Summary +Extend the shipped systemd renderer: `Type=notify`/`WatchdogSec`, `HARDENING_BASELINE` profile, `DynamicUser`, cgroups v2 resource limits — with **byte-identical rendering when the new knobs are unset** (no regression for shipped users). + +## Scope +- Archetype / area: systemd renderer (today `packages/cli`; moves to `packages/deploy-core` at PM-20) +- Part of #510 +- Depends on: #512 · Blocks: PM-16, PM-19 + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.3 (D3-S2) · `plan.md` §4 PM-15 + +## Acceptance criteria +- [ ] gate: byte-identical render check — unset config renders today's unit byte-for-byte +- [ ] gate: each knob covered by a render test; hardening profile opt-in +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- sd_notify client helper (PM-16); Servy parity where no equivalent exists (warn-and-omit via PM-17). + +## Drift / Debt +- none + + + +## #527 — [process-manager PM-16] Pure-Deno sd_notify helper (+ abstract-namespace spike) +- state: open | milestone: 0.0.1-beta.12 | labels: wave:v1, type:feat, status:plan, priority:p2, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/527 + +## Summary +Pure-Deno `sd_notify` client: `notifyReady`/`notifyWatchdog`/`watchdogIntervalMs`, no-op outside systemd. Includes a **bounded spike sub-task**: `@`-abstract-namespace `NOTIFY_SOCKET` support in Deno `unixpacket` (R6 — the path-based happy path never blocks on it). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` (runtime helper consumed by supervised apps) +- Part of #510 +- Depends on: #526 · Blocks: — + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.3a (D3-S3) · `plan.md` §4 PM-16, R6 + +## Acceptance criteria +- [ ] gate: path-based `NOTIFY_SOCKET` happy path tested; no-op outside systemd +- [ ] gate: spike outcome recorded (abstract-namespace supported / not) — either way the slice ships +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Watchdog re-implementation (systemd owns it). + +## Drift / Debt +- none + + + +## #528 — [process-manager PM-17] OsServicePort capability descriptor + warn-and-omit +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, wave:v1, type:feat, status:plan, priority:p2, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/528 + +## Summary +Capability descriptor on `OsServicePort` (systemd advertises watchdog/cgroups/hardening; Servy advertises heartbeat/recoveryAction) feeding config-layer **warn-and-omit**: a knob the target can't honor warns and is omitted, never silently dropped. Windows cgroups warning names the manual alternatives (Job Objects, processor affinity) with a Microsoft-docs link (R1/F-11). + +## Scope +- Archetype / area: `OsServicePort` + adapters (moves to `packages/deploy-core` at PM-20) +- Part of #510 +- Depends on: #514 · Blocks: PM-18 + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.4 (D3-S4) · `plan.md` §4 PM-17, R1 + +## Acceptance criteria +- [ ] gate: capability sets accurate per adapter; warn-and-omit tested for an unsupported knob on each platform +- [ ] gate: Windows resource-limit warning text names Job Objects/processor affinity + MS-docs link +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- New OS backends (launchd out — OF-6). + +## Drift / Debt +- none + + + +## #529 — [process-manager PM-18] Conventions wiring: ServiceDeployTargetPorts → wired 8-op adapters +- state: open | milestone: 0.0.1-beta.12 | labels: type:feat, wave:v1-min, status:plan, priority:p1, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/529 + +## Summary +The pm supplies `ServiceDeployTargetPorts` (activation/health/secrets/observability), promoting the bare `linux-service`/`windows-service` descriptors to wired 8-op adapters; health-gated `up` = zero-downtime restart. + +## Scope +- Archetype / area: deploy conventions + target adapters +- Part of #510 +- Depends on: #511, #514 · Blocks: PM-20, PM-26 + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.6 (D3-S5) · `plan.md` §4 PM-18 + +## Acceptance criteria +- [ ] gate: both targets advertise the full 8-op set with ports injected (`service-deploy-target.ts` seam) +- [ ] gate: health-gated `up` demonstrated (unit restart waits on readiness before old instance teardown) +- [ ] gate: `deno task arch:check` green +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- F-DEPLOY gate promotion (PM-20 — needs the real package boundary). + +## Drift / Debt +- none + + + +## #530 — [process-manager PM-19] Compile adapters: ProcessSpec → systemd/Servy unit configs +- state: open | milestone: 0.0.1-beta.12 | labels: area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/530 + +## Summary +Compile `ProcessSpec` graphs into systemd/Servy unit configs in the core — **calls the existing renderers, never a parallel renderer** (wrap-don't-reinvent). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` compile layer +- Part of #510 +- Depends on: #512, #526 · Blocks: PM-20 + +## Design source +- `research/design/d1-supervision-engine-core.md` (D1-S11) · `plan.md` §4 PM-19 + +## Acceptance criteria +- [ ] gate: one renderer code path — compile adapters delegate to the shipped renderers (import-graph asserted) +- [ ] gate: round-trip test: graph → units → the OS layer can start/stop them (mocked adapters) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Renderer feature work (PM-15). + +## Drift / Debt +- none + + + +## #531 — [process-manager PM-20] Extract packages/deploy-core (@netscript/deploy-core) + promote F-DEPLOY gates +- state: open | milestone: 0.0.1-beta.12 | labels: wave:v1, type:refactor, status:plan, priority:p2, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/531 + +## Summary +The largest structural move in the epic (E5 as amended at Stage-F triage F-3): create **`packages/deploy-core`** (`@netscript/deploy-core`) — the package ARCHETYPE-7 anticipates ("the core is extracted in a later wave") — and move the OS-service layer into it: `OsServicePort` + systemd/Servy adapters + renderers + the four conventions + the target registry. `plugin-process-manager-core` **depends on** deploy-core; `packages/cli` re-exports so existing imports stay stable. The future deploy wave inherits — never imports from — pm. + +## Scope +- Archetype / area: new `packages/deploy-core` (Archetype 7 core) + `packages/cli` re-exports +- Part of #510 +- Depends on: #529, #530 · Blocks: PM-31 (publish set) +- **Acceptance includes** promoting `F-DEPLOY-1`/`F-DEPLOY-2` `reviewed`→`gated` in arch:check **in this slice** — the real package boundary the promotion has been waiting on now exists (F-3/F-14) + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.8 · `plan.md` §4 PM-20, E5 (amended), R9 + +## Acceptance criteria +- [ ] gate: `packages/deploy-core` JSR-ready (doc-lint clean, export map, README); pm-core + cli import from it +- [ ] gate: `packages/cli` re-exports keep all existing imports compiling (no downstream churn) +- [ ] gate: `F-DEPLOY-1`/`-2` flipped `reviewed`→`gated`; `deno task arch:check` green with the new boundary scanned +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- New deploy features — pure extraction + re-export. Escape hatch (R9/F-12): if unwieldy mid-slice, split — `OsServicePort` + renderers first; conventions + registry in a sibling slice. + +## Drift / Debt +- none + + + +## #532 — [process-manager PM-21] Deploy-facing schema: process-graph knobs on deploy.targets.linux/.windows +- state: open | milestone: 0.0.1-beta.12 | labels: type:feat, wave:v1-min, status:plan, priority:p1, area:config, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/532 + +## Summary +Per E1 (**no new deploy-target key**): add process-graph knobs to the existing `deploy.targets.linux`/`.windows` members (+ a shared pm sub-shape), spreading `deployTargetBaseShape` — no re-declares. Includes the `graph` pointer to `pm.config.ts` and control-plane placement config. + +## Scope +- Archetype / area: `packages/config` deploy section +- Part of #510 +- Depends on: #512, #511 · Blocks: PM-22, PM-25 + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §1.4 as amended by E1 (D3 §D3.1.1 authoritative) · `plan.md` §4 PM-21, E1/E10 + +## Acceptance criteria +- [ ] gate: no new target key — knobs land on the existing members (`config-section-types.ts` `windows`/`linux`) +- [ ] gate: `deployTargetBaseShape` spread (no field re-declares); schema round-trips through config load +- [ ] gate: `deno task arch:check` green +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- `pm.config.ts` authoring surface (PM-24 scaffolds it; contract is PM-1's). + +## Drift / Debt +- none + + + +## #533 — [process-manager PM-22] --no-aspire resolvers + pm explain provenance +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, area:plugins, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/533 + +## Summary +Resolvers that seed a process graph for `--no-aspire` scaffolds: `scaffold.plugin` `officialSource` + workspace `deno.json` task graph (concrete argv per S6), with `pm explain` provenance (every resolved process says where it came from). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` resolvers + CLI surface +- Part of #510 +- Depends on: #512 · Blocks: PM-24, PM-27 + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §3 (D5-3) · `plan.md` §4 PM-22 + +## Acceptance criteria +- [ ] gate: resolver precedence tested (explicit config > manifest > task graph) +- [ ] gate: `pm explain` prints provenance per process +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Aspire-mode resolution (PM-23). + +## Drift / Debt +- none + + + +## #534 — [process-manager PM-23] AspireResource[] resolver (manifest-wins precedence) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, area:aspire, wave:v1, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/534 + +## Summary +Resolver over `AspireResource[]`: manifest-wins precedence; the Aspire `command`-kind edge is **consumed, not owned** (the kind belongs to the dashboard/Aspire seam). + +## Scope +- Archetype / area: `packages/plugin-process-manager-core` resolvers +- Part of #510 +- Depends on: #512 · Blocks: — + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §2 (D5-4) · `plan.md` §4 PM-23 + +## Acceptance criteria +- [ ] gate: manifest-wins precedence tested against a live-shaped `AspireResource[]` fixture +- [ ] gate: no `AspireResourceKind` extension (consumed only) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Owning/extending Aspire kinds. + +## Drift / Debt +- none + + + +## #535 — [process-manager PM-24] pm scaffold.plugin.json + plugin add typed glue (pm.config.ts) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, area:plugins, wave:v1, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/535 + +## Summary +The pm plugin's `scaffold.plugin.json` + `plugin add process-manager` typed glue: emits `pm.config.ts` via `defineProcessGraph(...)` (E10), pre-seeded by the PM-22 resolvers. **Typesafe codegen only — no vendored source** (#157 law). + +## Scope +- Archetype / area: `plugins/process-manager` scaffold manifest + CLI glue +- Part of #510 +- Depends on: #512, #533 · Blocks: — + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §4 (D5-5) · `plan.md` §4 PM-24, E10 + +## Acceptance criteria +- [ ] gate: `plugin add` emits only typesafe userland glue (factory/AST — never string templates/copies) +- [ ] gate: `scaffold.plugins` e2e green with the pm plugin added +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- JSR publish of `plugins/process-manager` (workspace-only per doctrine 05 — installs via `plugin add`). + +## Drift / Debt +- none + + + +## #536 — [process-manager PM-25] netscript pm CLI router + read verbs (+ degraded-local reads) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/536 + +## Summary +The `netscript pm` CLI group (OF-1): router + read verbs — `status`/`logs`/`doctor`/`init`/`add`/`remove`/`explain` — human + `--json` output equal to the contract schemas. **Degraded-local reads defined (F-9):** control plane unreachable → read verbs fall back to `OsServicePort` status/journal reads + KV registry snapshot, clearly marked `source: os-layer (degraded)`; mutations refuse with a pointer at `pm dev`/service start — never silently stale. + +## Scope +- Archetype / area: `packages/cli` pm command group (Archetype 6) +- Part of #510 +- Depends on: #520, #522 · Blocks: PM-26, PM-28, PM-30 + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §1 (PMS-1) · `plan.md` §4 PM-25 + +## Acceptance criteria +- [ ] gate: `--json` output validates against the contract schemas (same shapes, no CLI-only dialect) +- [ ] gate: degraded mode tested: reads work marked `source: os-layer (degraded)`; mutations refuse with guidance +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Lifecycle verbs (PM-26); monitor (PM-28). + +## Drift / Debt +- none + + + +## #537 — [process-manager PM-26] Lifecycle verbs via the shared CommandInvokePort shape +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/537 + +## Summary +Lifecycle verbs — `start`/`stop`/`restart`/`reload`/`block`/`unblock`/`terminate`/`token`/`enable-service`/`disable-service` — via the shared `CommandInvokePort` shape (E4). Verbs that are not contract routes (`reload`, `enable-service`, `disable-service`) map onto contract routes or `OsServicePort` ops — **never mint hidden routes**. + +## Scope +- Archetype / area: `packages/cli` pm command group +- Part of #510 +- Depends on: #536, #523, #529 · Blocks: PM-30 + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §1.2 + §5.3 (PMS-2) · `plan.md` §4 PM-26, E4 + +## Acceptance criteria +- [ ] gate: verb→route/OsServicePort mapping table implemented exactly as E4 records it +- [ ] gate: mutations require the bearer token (PM-12) — anonymous mutation refused in tests +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Dashboard `CommandInvokePort` first-definition (#400 owns it by default — bidirectional edge recorded). + +## Drift / Debt +- none + + + +## #538 — [process-manager PM-27] pm dev: foreground multiplexer over the engine dev loop +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, type:feat, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/538 + +## Summary +`netscript pm dev`: foreground multiplexer over the PM-8 engine dev loop — prefixed logs, dependency-order startup, in-loop restart, Ctrl+C teardown. The `--no-aspire` dev fallback story. + +## Scope +- Archetype / area: `packages/cli` pm command group +- Part of #510 +- Depends on: #519, #533 · Blocks: PM-30 + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §1.3 (PMS-3) · `plan.md` §4 PM-27, E13 + +## Acceptance criteria +- [ ] gate: `pm run` (one-shot single spec) and `pm dev` (supervised graph) both ship (E13) +- [ ] gate: prefixed multiplexed output; Ctrl+C tears the graph down in order on both platforms +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Daemonization (dev is foreground by design — C1). + +## Drift / Debt +- none + + + +## #539 — [process-manager PM-28] pm monitor: live status + follow stream (no TUI lib) +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, wave:v1, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/539 + +## Summary +`netscript pm monitor`: live scrolling status + log stream over PM-13's event stream. No terminal-TUI library dependency (E12 — near-zero-dep; the rich live view belongs to the web console). NDJSON under `--json`. + +## Scope +- Archetype / area: `packages/cli` pm command group +- Part of #510 +- Depends on: #536, #524 · Blocks: — + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §1.4 (PMS-4) · `plan.md` §4 PM-28, E12 + +## Acceptance criteria +- [ ] gate: live stream renders without a TUI dependency; NDJSON mode validates against contract event schemas +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Charts/dashboards (PM-29). + +## Drift / Debt +- none + + + +## #540 — [process-manager PM-29] Admin console: Fresh app, browser-served by the control plane +- state: open | milestone: 0.0.1-beta.12 | labels: wave:v1, area:fresh-ui, type:feat, status:plan, priority:p2, area:service, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/540 + +## Summary +The admin console as a Fresh app served by the control-plane service (`@netscript/fresh-ui`), contract-first over the PM-9 routes — **no new routes minted for the UI**. Browser-served mode is the always-ships path (OF-2); desktop packaging (PM-32) and dashboard panel (PM-33) layer on top. + +## Scope +- Archetype / area: console app under `plugins/process-manager` (SCOPE-frontend) +- Part of #510 +- Depends on: #520, #521, #522, #523, #524 · Blocks: PM-32, PM-33 + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §3 (PMS-5) · `plan.md` §4 PM-29 + +## Acceptance criteria +- [ ] gate: console consumes only the 18 contract routes via the typed client (no bespoke endpoints) +- [ ] gate: auth = the same bearer token (PM-12); no separate UI auth +- [ ] gate: ships on fresh-ui L2 + local composition if the L3 `blocks/` promotion lags (plan §9 residual 4) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Desktop packaging (PM-32); `DashboardPanelContribution` (PM-33). + +## Drift / Debt +- none + + + +## #541 — [process-manager PM-30] Docs wave: 7 pages + cli-reference staleness fix +- state: open | milestone: 0.0.1-beta.12 | labels: area:docs, type:docs, wave:v1-min, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/541 + +## Summary +The pm docs wave (D5 §5): 7 pages (concept, quickstart dev, production bare-metal guide, config reference, CLI reference, console guide, troubleshooting) including the **same-wave `cli-reference.md` staleness fix** + the `pm` verb table. + +## Scope +- Archetype / area: docs site (SCOPE-docs) +- Part of #510 +- Depends on: #536, #537, #538 · Blocks: PM-31 (merge-readiness) + +## Design source +- `research/design/d5-config-scaffold-docs-rfc.md` §5 (D5-6 + PMS-8) · `plan.md` §4 PM-30 + +## Acceptance criteria +- [ ] gate: docs link-check + Lume build green; no compounding of the cli-reference staleness +- [ ] gate: Windows/Linux capability asymmetry stated plainly (R1) +- [ ] gate: journald/Servy log-ownership interplay documented (PM-7) + +## Non-scope +- Marketing/positioning pages (docs-cut epic owns those). + +## Drift / Debt +- none + + + +## #542 — [process-manager PM-31] Merge-readiness e2e: scaffold suites + JSR-scoped publish dry-run +- state: open | milestone: 0.0.1-beta.12 | labels: area:cli, gate:e2e, wave:v1-min, type:test, status:plan, priority:p1, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/542 + +## Summary +The epic's merge-readiness gate: `scaffold.plugins` + `scaffold.runtime` e2e + publish dry-run scoped to the **JSR-published packages only** — `@netscript/deploy-core` + `@netscript/plugin-process-manager-core` (`plugins/process-manager` is workspace-only per doctrine 05; installs via `plugin add`, not JSR — F-8). + +## Scope +- Archetype / area: e2e suites + publish surface +- Part of #510 +- Depends on: all v1-min slices (PM-0..6, 8–12, 18–19, 21–22, 25–27, 30) · Blocks: epic close +- Run once per epic branch wave, not per slice (expensive gate) + +## Design source +- `plan.md` §4 PM-31 + §7 gate matrix + +## Acceptance criteria +- [ ] gate: `deno task e2e:cli run scaffold.runtime --cleanup --format pretty` green with the pm plugin in the add set +- [ ] gate: `scaffold.plugins` green +- [ ] gate: publish dry-run green for deploy-core + plugin-process-manager-core (JSR set only) + +## Non-scope +- Publishing `plugins/process-manager` to JSR (doctrine 05). + +## Drift / Debt +- none + + + +## #543 — [process-manager PM-32] Desktop packaging of the console (deno desktop, 5-target cross-compile) +- state: open | milestone: 0.0.1-beta.12 | labels: wave:defer, area:fresh-ui, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/543 + +## Summary +Package the PM-29 console as a Deno 2.9 Desktop app via the #456 mechanics: `--backend cef` (bare-metal admin boxes can't assume WebView2), 5-target cross-compile, per-app-name persistent KV. **Documented gap inherited verbatim:** Windows auto-update stages-but-does-not-apply. Optional #451 in-process oRPC link as a soft optimization. + +## Scope +- Archetype / area: console packaging (SCOPE-frontend) +- Part of #510 +- Depends on: #540 · Soft deps: #456 (packaging), #451 (in-process link) — never M1 blockers +- Slips to a later milestone if #456 slips (R8); browser-served mode is the always-ships path + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §3.2–3.4 (PMS-6) · `plan.md` §4 PM-32, R2 + +## Acceptance criteria +- [ ] gate: packaged binary serves the console with the loopback (or in-process) client on all 5 targets +- [ ] gate: Windows auto-update caveat documented in the console guide +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- New console features — packaging only. + +## Drift / Debt +- none + + + +## #544 — [process-manager PM-33] DashboardPanelContribution "Process Control" panel +- state: open | milestone: 0.0.1-beta.12 | labels: wave:defer, area:fresh-ui, type:feat, status:plan, priority:p2, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/544 + +## Summary +The embedded "Process Control" panel via `DashboardPanelContribution` — **gated on CR-DDX-HOSTAGNOSTIC** (the change request to #400 asking that panel contributions be host-agnostic: descriptor host-neutral, `setup()` receives a host-provided context). Authored as an *adapter* over the pm's own console components, so the standalone path never blocks on #400. + +## Scope +- Archetype / area: dashboard panel contribution (SCOPE-frontend) +- Part of #510 +- Depends on: #540 + #400 CR resolution · **Slips if the CR is declined/unresolved** (R8) + +## Design source +- `research/design/d4-cli-admin-console-surfaces.md` §4 (PMS-7) · `plan.md` §4 PM-33 + +## Acceptance criteria +- [ ] gate: one contribution renders in two host shells (dashboard + pm console) per the CR acceptance +- [ ] gate: panel consumes the `ProcessManagerContract` client as its data source via the host context +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Redefining DDX-17 (#400 owns the contract change). + +## Drift / Debt +- none + + + +## #545 — [process-manager PM-34] systemd --user + linger non-root install mode +- state: open | milestone: 0.0.1-stable | labels: wave:defer, type:feat, status:plan, priority:p3, area:deploy, epic:process-manager +- url: https://github.com/rickylabs/netscript/issues/545 + +## Summary +Non-root install mode: systemd `--user` units + `loginctl enable-linger` — the unprivileged bare-metal story. + +## Scope +- Archetype / area: deploy-core systemd adapter +- Part of #510 +- Depends on: #529, #531 + +## Design source +- `research/design/d3-deploy-integration-os-adapters.md` §D3.5 · `plan.md` §4 PM-34 + +## Acceptance criteria +- [ ] gate: `--user` + linger install path tested end-to-end on a systemd host +- [ ] gate: capability descriptor reflects user-mode limitations (no `DynamicUser`, etc.) +- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`) + +## Non-scope +- Windows equivalent (Servy already runs per-user). + +## Drift / Debt +- none + + diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-search.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-search.md new file mode 100644 index 000000000..bb6487722 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/board-search.md @@ -0,0 +1,94 @@ +# single-runtime search results + +## query: single-runtime +- #820 [open] (issue) RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition — labels: status:research,priority:p1,rfc,area:deploy — ms: Backlog / Triage +- #409 [closed] (issue) [telemetry T8] Real (non-mocked) grouped-trace e2e — Flow B (epic merge-gate) — labels: area:cli,wave:v1,gate:e2e,area:telemetry,type:test,status:plan,priority:p1,epic:telemetry-revamp — ms: 0.0.1-beta.6 +- #580 [closed] (issue) Codex remote control: enforce single-sender ownership and safe daemon recovery — labels: area:tooling,wave:v1,type:feat,priority:p1,epic:harness-v3 — ms: 0.0.1-beta.1 +- #312 [closed] (PR) E3 — Agent loop + owned ChatClientPort seam (closes #242) — labels: status:ready-merge,area:ai-core,type:feat,wave:v1-min,epic:ai-stack — ms: 0.0.1-beta.1 +- #7 [closed] (PR) Wave 1 — Contracts & schemas — labels: — ms: - +- #248 [open] (issue) [AI-stack E9] @netscript/ai: OTel GenAI/MCP semconv telemetry adapter (./otel) — labels: wave:defer,area:ai-core,type:feat,area:telemetry,epic:ai-stack,gate:jsr,status:plan,priority:p2,epic:telemetry-revamp — ms: 0.0.1-stable +- #770 [closed] (PR) fix(cli): pin plugin CLI JSR specifiers — unpinned specs cannot resolve on a prerelease line — labels: type:fix,area:cli,wave:v1,priority:p1,status:shipped,area:ai — ms: 0.0.1-beta.10 +- #581 [closed] (issue) harness policy: migrate canonical routing to GPT-5.6, Gemini, and opposite-family review — labels: area:docs,area:tooling,wave:v1,type:feat,priority:p1,epic:harness-v3 — ms: 0.0.1-beta.1 +- #29 [closed] (PR) Wave 5b (sdk): research + proposed plan & design [PLAN-EVAL pending] — labels: — ms: - +- #399 [closed] (issue) epic: telemetry-revamp — framework telemetry convention + ports/adapters + dashboard query surface (Spine-1 enabler) — labels: type:umbrella,area:telemetry,status:plan,priority:p1,epic:telemetry-revamp — ms: 0.0.1-beta.6 +- #486 [closed] (PR) docs(harness): [S5] harness + skills revamp — release-gates single source + arch-debt reconcile (#306 remainder) — labels: status:impl,area:tooling,type:chore,priority:high,epic:road-to-stable — ms: 0.0.1-beta.5 +- #364 [closed] (PR) [Deploy-S3+S4] Bare-metal deploy targets (OsServicePort + SystemdAdapter + deno compile) — PLAN — labels: area:cli,wave:v1,type:feat,status:plan-eval,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.1 +- #114 [closed] (PR) PR-C: alpha-1 legacy/deprecated purge + hygiene (breaking) — labels: — ms: - +- #260 [closed] (issue) [AI-stack P2] @netscript/plugin-ai manifest + connector + scaffold + in-process emitters — labels: type:feat,gate:e2e,wave:v1-min,epic:ai-stack,gate:jsr,area:plugin-ai — ms: 0.0.1-beta.2 +- #12 [closed] (PR) Wave 2b — data adapters (kv · database · prisma-adapter-mysql) — labels: — ms: - +- #238 [open] (issue) epic: NetScript AI Stack — first-class AI runtime, chat & plugin seams (anchor #219) — labels: type:umbrella,area:plugins,area:ai-core,epic:ai-stack,area:plugin-ai,status:plan,priority:p1 — ms: 0.0.1-stable +- #601 [closed] (issue) agentic pilot eval: beta-6 shipping orchestrator run (epic #574 system, overnight 2026-07-11) — labels: type:docs,priority:p2,area:agentic,status:shipped — ms: 0.0.1-beta.7 +- #13 [closed] (PR) Wave 2c — messaging (queue · cron) [package-quality] — labels: — ms: - +- #21 [closed] (PR) [Wave 4 · 4d] triggers — package quality (LAST · PLAN-EVAL PASS · Implementation next) — labels: — ms: - +- #43 [closed] (PR) [Wave 6] @netscript/cli — PLAN phase (A6-v2 promotion, closes AP-1) — labels: — ms: - +- #25 [closed] (PR) Wave 5a (service): research + proposed plan & design [PLAN-EVAL pending] — labels: — ms: - +- #32 [closed] (PR) Run 5c2: Official design system — labels: — ms: - +- #172 [closed] (PR) Re-architect plugin scaffold surface (#157): thin, typesafe, no plugin-source copy — labels: — ms: - + +## query: deno-compile +- #327 [open] (issue) epic: NetScript enterprise deployment framework (cloud-agnostic + bare-metal, CLI + Aspire) — labels: area:cli,type:umbrella,area:aspire,status:plan,priority:p2,area:deploy,epic:deployment — ms: 0.0.1-stable +- #345 [open] (issue) [Deploy-S9] Bare-metal enterprise hardening (stable): cross-host HA + external secret store + signing — labels: wave:v1,type:feat,status:plan,priority:p2,area:deploy,epic:deployment — ms: 0.0.1-stable +- #340 [closed] (issue) [Deploy-S4] deno compile single-binary bare-metal artifact — labels: area:cli,wave:v1,type:feat,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.3 +- #364 [closed] (PR) [Deploy-S3+S4] Bare-metal deploy targets (OsServicePort + SystemdAdapter + deno compile) — PLAN — labels: area:cli,wave:v1,type:feat,status:plan-eval,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.1 +- #341 [closed] (issue) [Deploy-S5] Bare-metal hardening (beta): rollback + health-gate + OTEL + secrets — labels: wave:v1,type:feat,area:telemetry,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.3 +- #456 [open] (issue) feat(desktop): 1-click packaging + release/update server — labels: area:cli,type:feat,status:research,priority:p2,epic:deployment — ms: 0.0.1-beta.11 +- #394 [closed] (issue) test(deploy): no deploy target has any e2e coverage (add deploy e2e gate) — labels: area:cli,wave:v1,gate:e2e,type:test,status:plan,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.3 +- #308 [closed] (issue) [S7] Deployment (tracking pointer → dedicated Deployment epic) — labels: type:umbrella,status:triage,priority:p2 — ms: 0.0.1-stable +- #543 [open] (issue) [process-manager PM-32] Desktop packaging of the console (deno desktop, 5-target cross-compile) — labels: wave:defer,area:fresh-ui,type:feat,status:plan,priority:p2,epic:process-manager — ms: 0.0.1-beta.12 +- #301 [open] (issue) epic: Road to 0.0.1-stable — labels: type:umbrella,area:tooling,status:plan,priority:p1 — ms: 0.0.1-stable +- #386 [closed] (PR) chore(release): cut 0.0.1-beta.2 — labels: area:tooling,type:chore,priority:p1 — ms: 0.0.1-beta.2 +- #517 [open] (issue) [process-manager PM-6] Supervisor loop + composable start policies (autostart/cron/watch) — labels: area:plugins,type:feat,wave:v1-min,status:plan,priority:p1,epic:process-manager — ms: 0.0.1-beta.12 +- #820 [open] (issue) RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition — labels: status:research,priority:p1,rfc,area:deploy — ms: Backlog / Triage +- #485 [closed] (PR) chore(stale): #307 Wave 2 verified deletes + Wave 4 .llm/tmp purge — labels: area:cli,status:impl,area:plugins,area:telemetry,type:chore,area:sdk,priority:high,epic:road-to-stable — ms: 0.0.1-beta.5 +- #392 [closed] (PR) chore(roadmap): beta.3->stable roadmap re-forecast (V3 dogfood) — labels: status:impl-eval,area:tooling,type:chore,priority:p1,epic:roadmap-reforecast — ms: - +- #347 [closed] (issue) [Deploy-S11] CI/CD template generation + state/secret hardening — labels: area:tooling,wave:v1,type:feat,status:plan,priority:p2,area:deploy,epic:deployment — ms: 0.0.1-beta.5 +- #198 [closed] (PR) fix(plugin-quality): clear IMPL-EVAL caveats AP-23 + A3 (#193) — labels: — ms: - +- #487 [closed] (PR) ci: docs-only + label-gated skip lanes for expensive CI — labels: status:impl,area:tooling,type:chore,priority:p1 — ms: 0.0.1-beta.5 +- #493 [closed] (PR) feat(telemetry): #403 T2 ports/adapters restructure — labels: status:impl,wave:v1,area:telemetry,gate:jsr,type:refactor,priority:p1,epic:telemetry-revamp — ms: 0.0.1-beta.5 +- #703 [closed] (issue) feat(cli): streams end-to-end CLI — implement the five stubbed runtime verbs and add schema/producer/consumer scaffolders — labels: area:cli,wave:v1,type:feat,priority:p1,status:shipped,area:streams — ms: 0.0.1-beta.9 +- #92 [closed] (PR) S1: typed auth contract seam (plugin-auth-core) - zero-cast + JSR S5 — labels: — ms: - +- #504 [closed] (PR) plan: process-manager plugin seed run (pup/pm2-class, deploy bare-metal target) — labels: — ms: - +- #44 [closed] (PR) [Toolchain] Deno 2.8.x + Aspire 13.4.x upgrade — IMPL (Phase T, type foundation green) — labels: — ms: - +- #179 [closed] (PR) fix(route): use {} for static-segment path inference (closes #178) — labels: — ms: - +- #351 [closed] (PR) refactor(contracts): migrate CRUD generator + health routers onto sound aliases (172a-2-SOUND slice 3/4) — labels: type:refactor,priority:p1 — ms: 0.0.1-beta.1 +- #117 [closed] (PR) docs(readme-revamp): package + framework README revamp (PR2) — labels: — ms: - +- #135 [closed] (PR) fix(cli): JSR-safe bundled-asset embedding — prod CLI scaffold usable from JSR (alpha.5) — labels: — ms: - +- #492 [closed] (PR) docs(ai): #479 AI-stack reference pages + cross-links — labels: status:impl,area:docs,type:docs,priority:high,epic:road-to-stable — ms: 0.0.1-beta.5 +- #22 [closed] (PR) Add OpenHands agent handoff workflow — labels: — ms: - +- #183 [closed] (PR) feat(fresh): restore inline .withRouteContract shorthand + codegen page-module route binding (WI-12) — labels: — ms: - +- #3 [closed] (PR) Migrate shared Zod datetime codecs to Temporal — labels: — ms: - +- #55 [closed] (PR) chore/deps-hygiene — dependency-shape tooling (Group 2 of release/jsr-readiness) — labels: — ms: - +- #114 [closed] (PR) PR-C: alpha-1 legacy/deprecated purge + hygiene (breaking) — labels: — ms: - +- #77 [closed] (PR) [prime-time] Service auth seam — labels: — ms: - +- #86 [closed] (PR) Auth-as-plugin umbrella: pure backends + @netscript/plugin-auth-core + plugins/auth — labels: type:umbrella,area:plugins,area:auth — ms: - +- #170 [closed] (PR) chore(plugin): #167 scaffolder hardening — schema + plugins:check + version-coherence + dead-code (pre-alpha.13) — labels: — ms: - +- #32 [closed] (PR) Run 5c2: Official design system — labels: — ms: - +- #25 [closed] (PR) Wave 5a (service): research + proposed plan & design [PLAN-EVAL pending] — labels: — ms: - + +## query: single-binary +- #340 [closed] (issue) [Deploy-S4] deno compile single-binary bare-metal artifact — labels: area:cli,wave:v1,type:feat,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.3 +- #327 [open] (issue) epic: NetScript enterprise deployment framework (cloud-agnostic + bare-metal, CLI + Aspire) — labels: area:cli,type:umbrella,area:aspire,status:plan,priority:p2,area:deploy,epic:deployment — ms: 0.0.1-stable +- #364 [closed] (PR) [Deploy-S3+S4] Bare-metal deploy targets (OsServicePort + SystemdAdapter + deno compile) — PLAN — labels: area:cli,wave:v1,type:feat,status:plan-eval,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.1 +- #17 [closed] (PR) [Wave 5] Package Quality — Apps Layer (sdk · service · fresh · fresh-ui) — 5a–5d ✅ MERGED · Structural Consolidation A–E ✅ · 3× IMPL-EVAL APPROVED — labels: — ms: - +- #34 [closed] (PR) [5d1] fresh support spine — error · utils · vite config · interactive · mod skeleton (PLAN pending) — labels: — ms: - + +## query: single-deployment +- #820 [open] (issue) RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition — labels: status:research,priority:p1,rfc,area:deploy — ms: Backlog / Triage +- #349 [open] (issue) [Deploy-S13] WATCH: RFC-14 unified-mode + Nitro deno_server (tier-3 serverless) — labels: wave:defer,type:chore,status:triage,priority:p3,area:deploy,epic:deployment — ms: Backlog / Triage +- #397 [closed] (PR) plan(roadmap): roadmap-expansion — Fable 5 planning run (5 backlog features → Road-to-0.0.1-stable) — labels: — ms: - +- #340 [closed] (issue) [Deploy-S4] deno compile single-binary bare-metal artifact — labels: area:cli,wave:v1,type:feat,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.3 +- #392 [closed] (PR) chore(roadmap): beta.3->stable roadmap re-forecast (V3 dogfood) — labels: status:impl-eval,area:tooling,type:chore,priority:p1,epic:roadmap-reforecast — ms: - +- #371 [closed] (issue) feat(aspire): restore shared Deno KV Connect cache/queue resource in the generator (multi-process backend) — labels: area:deploy,epic:deployment — ms: - +- #364 [closed] (PR) [Deploy-S3+S4] Bare-metal deploy targets (OsServicePort + SystemdAdapter + deno compile) — PLAN — labels: area:cli,wave:v1,type:feat,status:plan-eval,priority:p1,area:deploy,epic:deployment — ms: 0.0.1-beta.1 +- #238 [open] (issue) epic: NetScript AI Stack — first-class AI runtime, chat & plugin seams (anchor #219) — labels: type:umbrella,area:plugins,area:ai-core,epic:ai-stack,area:plugin-ai,status:plan,priority:p1 — ms: 0.0.1-stable + +## query: desktop +- #543 [open] (issue) [process-manager PM-32] Desktop packaging of the console (deno desktop, 5-target cross-compile) — labels: wave:defer,area:fresh-ui,type:feat,status:plan,priority:p2,epic:process-manager — ms: 0.0.1-beta.12 +- #457 [open] (issue) test(deploy): desktop/single-process deploy-e2e — labels: area:cli,gate:e2e,type:test,status:research,priority:p2,epic:deployment — ms: 0.0.1-beta.11 +- #456 [open] (issue) feat(desktop): 1-click packaging + release/update server — labels: area:cli,type:feat,status:research,priority:p2,epic:deployment — ms: 0.0.1-beta.11 +- #454 [open] (issue) feat(desktop): true single-process mode (option c) — labels: area:cli,type:feat,status:research,priority:p2,area:sdk,epic:deployment — ms: 0.0.1-beta.11 +- #458 [open] (issue) feat(desktop): code-signing automation (macOS notarize / Windows signtool) — labels: area:cli,type:feat,status:research,priority:p3,epic:deployment — ms: 0.0.1-beta.11 +- #453 [open] (issue) feat(desktop): tursodb single-writer relocation + in-process composition root — labels: area:cli,type:feat,status:research,priority:p2,area:database,epic:deployment — ms: 0.0.1-beta.11 +- #455 [open] (issue) feat(desktop): offline-first via Turso Sync in the single-process host — labels: type:feat,status:research,priority:p3,area:database,epic:deployment — ms: 0.0.1-beta.11 +- #452 [open] (issue) feat(aspire): first-party deno desktop app type in the generator (folds #375) — labels: area:cli,area:aspire,type:feat,status:research,priority:p2,epic:deployment — ms: 0.0.1-beta.11 +- #375 [closed] (issue) feat(aspire): first-party `deno desktop` app support in the generator (native window as a dev-stack resource) — labels: area:aspire,type:feat,priority:p3 — ms: Backlog / Triage diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-fix-lineage.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-fix-lineage.md new file mode 100644 index 000000000..5c5fcc798 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-fix-lineage.md @@ -0,0 +1,161 @@ +# eis-chat fix lineage (#135 #136 #137 #147 #149) + +## #135 — fix(kb): shared Garnet queue fixes multi-process split-brain Deno KV (#133) + desktop perms (#118) +- state: closed (closed 2026-07-03T10:43:13Z) | milestone: none | labels: none +- url: https://github.com/rickylabs/eis-chat/pull/135 + +Closes the mechanism half of #133. Live-verified via the Aspire CLI/MCP. + +## Problem +The Aspire generator no-ops the `DenoKv` cache engine, so in **multi-process** mode workers-api (enqueue) and the workers processor (listen) each open their OWN per-process Deno KV → the `embed-document` job is enqueued in one KV and listened on another, so it never runs (KB doc pins `pending`). This is the real root cause of the stalled KB ingestion (deeper than the previously-suspected release blocker). + +## Fix (Docker-less Windows bare metal) +Shared Deno KV Connect (`denokv`) needs Docker, which this host lacks, so run **Garnet** (RESP-compatible, .NET-native) as an Aspire **executable** and point the workers at it. The SDK's `@netscript/kv/redis` + `@netscript/queue` `RedisAdapter` then give a real cross-process queue (`LPUSH`/`BRPOPLPUSH`). + +- `aspire/.helpers/register-infrastructure.mts` — `addExecutable('garnet','garnet-server', …)` (hand-edit, keep on regen). +- `aspire/.helpers/register-plugins.mts` + `register-background.mts` — inject `GARNET_URI`/`REDIS_URI`/`CACHE_PROVIDER=garnet` + `waitFor(garnet)` into workers-api + the workers processor. +- `workers/runtime.ts` — `import jsr:@netscript/kv/redis` to self-register the KV adapter before `getKv()`. +- `apps/dashboard/deno.json` — `--allow-all` on `desktop:dev`/`desktop:build` so the deno-desktop runtime can read env (was crashing on `PORT`). (Partial #118; full desktop render is a follow-up PR.) + +## Verification (Aspire CLI/MCP only — shared stack never hacked) +garnet Running/Healthy; workers-api + workers both `WaitFor(garnet)` + carry `GARNET_URI`; a job triggered on **workers-api** was **executed by the separate workers processor** (cross-process delivery over Garnet). See #133 for logs. + +## Requires / upstream +`dotnet tool install -g garnet-server`. Proper generator fix + self-provisioning: rickylabs/netscript#372 (Garnet executable) + #371 (Deno KV Connect). + +## Reconciliation +Overlaps #134 (NetScript beta.1 bump) on `register-plugins.mts` (different hunks) and `deno.lock`, and this branch's `workers/runtime.ts` redis import is pinned to `alpha.19`. To be rebased onto master after #134 merges, with the redis import bumped to `beta.1`. + +## #136 — fix(desktop): render the deno desktop window (blank WebView2) +- state: closed (closed 2026-07-03T10:46:54Z) | milestone: none | labels: none +- url: https://github.com/rickylabs/eis-chat/pull/136 + +## Problem +The `deno desktop` app opens a window frame but the webview surface is BLANK. + +**Verified diagnosis so far:** the internal Fresh server is fine (returns the full 23KB eis-chat HTML after the `--allow-all` permission fix on the base branch). WebView2 Runtime v149 is installed. The remaining failure is `Failed to create WebView2 environment` at webview creation time. + +> **Stacked on `fix/garnet-kb-queue`** (contains the prerequisite desktop `--allow-all` fix + Garnet wiring). Diff includes that branch until it merges. + +## Plan +- **Phase A - standalone:** get `deno task desktop:dev` (apps/dashboard) to actually render in an interactive session. Investigate WebView2 environment creation (user-data folder, desktop config block, launch context). +- **Phase B - within Aspire:** fix the desktop resource PORT collision with `dashboard` (:8010) in `aspire/.helpers/register-apps.mts`, and determine the launch mode (interactive `aspire run` vs detached `aspire start`) that allows WebView2 env creation. + +## Status +- [ ] Phase A: standalone render + evidence +- [ ] Phase B: Aspire resource render + evidence +- [ ] Root-cause writeup + +Generated with [Claude Code](https://claude.com/claude-code) + +## #137 — fix(desktop): stop CEF bundle crashing at launch on MCP stdio require('./windows.js') +- state: closed (closed 2026-07-03T23:18:03Z) | milestone: none | labels: none +- url: https://github.com/rickylabs/eis-chat/pull/137 + +## Problem +The `deno desktop` CEF window died at launch with: +``` +Error: Cannot find module './windows.js' + ...\_fresh\server\mcp.mjs:18635 code: MODULE_NOT_FOUND +``` +`@tanstack/ai-mcp/stdio` pulls in `cross-spawn -> which -> isexe`, whose top-level `require("./windows.js")` the desktop bundler flattens to **eager module-init** but never emits the sibling file. So merely LOADING the embedded Fresh server bundle crashed the window — before any chat/tool call. + +## Fix +1. **`lib/mcp.ts`** — lazy `await import('@tanstack/ai-mcp/stdio')` inside the stdio branch of `transportFor`, replacing the static top-level import. Deno code-splits the isexe chain into a deferred `_fresh/server/stdio.mjs` chunk that only loads when a real stdio child is actually spawned (bare `deno task dev`), keeping it out of the eager module graph the desktop bundle evaluates on load. `transportFor`/`mcpTransportFor` become async; `mcpPool` + `mcp-status.ts` updated to await. +2. **`aspire/.helpers/register-apps.mts`** — the desktop resource now sets `LEGACY_ARCHEO_MCP_URL` / `EXCALIDRAW_MCP_URL` (the envs `mcp.ts` actually reads), mirroring the dashboard block. Previously it set only the `services__...` discovery vars, so under Aspire the window fell into the broken stdio path instead of the HTTP transport. + +## Verification +Rebuilt `_fresh`: `mcp.mjs` (eager, loaded at launch) now has **0** `windows.js` references (was the crash site); the reference lives only in the deferred `stdio.mjs` chunk, which the Aspire path never imports. + +## Follow-up (not in this PR) +Switch the desktop resource from build-mode (`desktop:predev`) to a true dev/watch flow for easier debugging — tracked separately. + +Generated with [Claude Code](https://claude.com/claude-code) + +## #147 — Add local model and vision provider support +- state: closed (closed 2026-07-14T09:24:04Z) | milestone: none | labels: none +- url: https://github.com/rickylabs/eis-chat/pull/147 + +## Summary + +- add configurable local and cloud OCR providers, including offline Tesseract support +- add local embedding and model discovery configuration +- move OpenAI chat to the native Responses adapter and update provider reasoning/output options +- extend contracts, workers, settings UI, documentation, and tests + +## Validation + +- `deno task check` +- `deno task test` (135 passed) + +## #149 — Harden local inference, dependency catalogs, and desktop runtime +- state: closed (closed 2026-07-15T13:55:48Z) | milestone: none | labels: none +- url: https://github.com/rickylabs/eis-chat/pull/149 + +## Summary + +This change set completes the local and air-gapped inference work and folds in the related dependency, rendering, desktop, and repository cleanup discovered during validation. + +### Local OCR and embeddings + +- supports offline screenshot OCR through Tesseract.js and configurable local vision providers +- supports keyless OpenAI-compatible local embedding endpoints such as LM Studio +- isolates the embedding query cache by provider/model configuration +- allows embeddings to be explicitly disabled without issuing network requests +- avoids sending air-gapped sessions to OpenAI when a local provider is selected + +### Vector compatibility + +- prevents Turso cosine-distance failures after changing embedding models +- filters knowledge chunks, memories, and skill vectors by query-vector dimension +- preserves keyword-only degradation when no compatible vector is available +- adds regression coverage for mixed-dimension data in all three stores + +### Chat, screenshots, and analytics + +- serves persisted screenshot attachments back through the dashboard +- renders attachment previews with an accessible native-dialog lightbox +- improves attachment ingestion sequencing so chat messages reference persisted documents +- adds estimated output cost grouped by model and serving router to usage analytics +- retains OpenAI Responses API behavior for reasoning models with function tools + +### Dependency and schema stability + +- moves npm dependency ownership into the root package catalog with member package manifests +- updates and aligns TanStack AI adapters, Prisma, Preact, Tailwind, and supporting packages +- anchors the Zod 4 peer while leaving dependencies that legitimately require Zod 3 isolated +- replaces affected TanStack tool schemas with raw JSON Schema at the provider boundary +- pins and aliases Preact Signals to one SSR module identity, fixing the server-side `Cycle detected` failure + +### Desktop and Aspire + +- uses CEF for reliable Windows rendering +- keeps Fresh/Vite HMR enabled for desktop development +- merges Vite output and disables terminal decoration so Deno Desktop can discover the dev-server URL +- removes the unnecessary production prebuild before desktop HMR +- wires the Aspire desktop resource directly to `desktop:dev` + +### Cleanup + +- removes stale design-sync previews and obsolete scaffold coverage +- updates lockfiles and Deno workspace configuration for Deno 2.9 +- includes the remaining UI polish and package-manifest cleanup from the working tree + +## Root causes addressed + +1. OCR and embedding selection were independent; choosing offline OCR did not stop embeddings from using OpenAI. +2. Turso vector functions reject comparisons between vectors with different dimensions. +3. TanStack's Standard Schema converter observed an incompatible Zod runtime at the tool boundary. +4. Fresh/NetScript and the app loaded Preact Signals under different Vite module identities, installing nested render hooks. +5. Deno Desktop 2.9.2 scans only child stdout for an undecorated Vite `Local:` URL. +6. The generated Aspire helper still invoked the removed `desktop:predev` task. + +## Validation + +- `deno check` +- dashboard production Vite build (client and SSR) +- 34 focused tests covering embeddings, vector stores, skills, OpenAI, OpenRouter, and the chat route +- Aspire desktop resource reports `Running / Healthy` +- Fresh HMR handshake succeeds at `http://localhost:5173/` +- CEF runtime loads and starts successfully + diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-pr150.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-pr150.md new file mode 100644 index 000000000..59b3828e3 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-pr150.md @@ -0,0 +1,156 @@ +# eis-chat POC lineage digest + +## PR #150 — Prototype full-stack Windows singleton desktop deployment +- state: closed, merged: 2026-07-16T12:14:42Z, base: master, head: 8cdedd307a646cfb217e9e2b1928fac8467dc405 +- url: https://github.com/rickylabs/eis-chat/pull/150 + +## Outcome + +This draft proves a complete no-Docker Windows `--singleton` deployment around Deno Desktop. The native window directly supervises the adjacent service graph—no PowerShell trampoline—and the packaged app has been exercised through chat streaming, persistence, knowledge ingestion, offline image OCR, and Aspire telemetry. + +The experiment is intended as an executable companion to the NetScript deployment work: it identifies which behavior belongs in a future `deploy.targets.windows.singleton` implementation and which remaining fixes belong in Fresh/NetScript. + +## Current status + +| Area | Status | +| --- | --- | +| Deno Desktop window | Working on Deno 2.9.3+ | +| Direct sidecar launch | Working; no PowerShell and no Docker | +| Full service graph | Working; Garnet plus six compiled Deno processes | +| Browser/server service discovery | Working; runtime and `VITE_*` values derive from one map | +| Persistent storage | Working under `%LOCALAPPDATA%\eis-chat` | +| Chat stream/hydration | Working after Markdown and Preact identity fixes | +| Text KB ingestion | Working | +| Offline Tesseract image OCR | Working; semantic retrieval still requires an embedding provider | +| Aspire logs/traces/metrics | Working over OTLP HTTP/protobuf | +| Timestamped output | Working through Temporal | +| MSI containing adjacent sidecars | Not implemented; requires a Desktop packaging hook or second installer pass | +| Crash restart / Windows Job Objects | Follow-up | + +## Packaged graph + +| Resource | Endpoint | Packaging/readiness | +| --- | --- | --- | +| Deno Desktop dashboard | dynamic loopback port | CEF desktop output | +| Garnet | `127.0.0.1:6379` | pinned `garnet-server` tool, TCP probe | +| streams | `127.0.0.1:4437` | compiled Deno sidecar, HTTP readiness | +| workers API | `127.0.0.1:8091` | compiled Deno sidecar, HTTP readiness | +| workers | background process | compiled Deno sidecar, process readiness | +| eischat | `127.0.0.1:3001` | compiled Deno sidecar, HTTP readiness | +| legacy-archeology MCP | `127.0.0.1:8095` | compiled Deno sidecar, HTTP readiness | +| Excalidraw MCP | `127.0.0.1:8096` | compiled Deno sidecar, HTTP readiness | +| optional Aspire dashboard | `127.0.0.1:18888` | bundled Aspire CLI 13.4.6; OTLP on 4317/4318 | + +The supervisor strips inherited Desktop-only `DENO_*` process state, writes per-resource stdout/stderr plus a non-secret environment audit, waits for readiness, and terminates children in reverse order. + +## Packaging, discovery, and storage + +- `deno task deploy:windows-singleton` creates `dist/windows/eis-chat-singleton-YYYYMMDDTHHMMSSZ`; Temporal supplies the UTC timestamp. +- `EISCHAT_WINDOWS_SINGLETON_OUTPUT_DIR` may select an explicit child of `dist/windows` for automation. +- Runtime `services____http__0` values and browser `VITE_services__...` / `VITE__URL` values come from one service map. Build-time injection is required because `import.meta.env` cannot be repaired at launch. +- SQLite is the persistent catalog and per-channel data store. Deno Desktop uses its stable app identity for `Deno.openKv()` provider settings. Garnet is the Redis-compatible cache/runtime dependency; it is not the primary database and does not hold provider keys. +- All mutable data and logs live below `%LOCALAPPDATA%\eis-chat`; timestamped application directories remain read-only and replaceable. + +## Aspire telemetry + +`eis-chat-singleton-observed.cmd` starts the bundled NativeAOT Aspire CLI 13.4.6 dashboard with its documented frontend, OTLP/gRPC, OTLP/HTTP, anonymous-local, config-path, and browser-CORS variables. The package needs neither Docker, an installed .NET runtime, nor a system Aspire installation. + +Deno telemetry activation is supplied during both `deno compile` / `deno desktop` and launch. This matters because compiled executables serialize `OTEL_DENO`, tracing, metrics, console capture, and propagator activation into runtime metadata. Each process receives its own `OTEL_SERVICE_NAME` and exports to `http://127.0.0.1:4318` using `http/protobuf`. Logs, metrics, and correlated traces were observed from the desktop and every Deno sidecar without a JavaScript OTel SDK. + +This is Aspire standalone mode. It provides logs, traces, and metrics but intentionally has no AppHost resource service, so the Resources graph and AppHost console surfaces are unavailable. The singleton supervisor remains the process authority and records the graph in `desktop-supervisor.log`. + +## Markdown improvement + +The chat renderer no longer uses `react-markdown`. It drives the existing unified/remark/rehype pipeline directly and renders with `rehype-react` configured for Preact's JSX runtime. + +- preserves streaming, GFM, math/KaTeX, highlighting, citations, URL filtering, and sanitization +- removes the React wrapper and compat boundary +- reduced the client Markdown chunk from 200,151 to 176,118 raw bytes (24,033 bytes, about 12%) + +Framework follow-up: https://github.com/rickylabs/netscript/issues/783 + +## Fresh/Vite production identity finding + +Fresh 2.3.3 / `@fresh/plugin-vite` 1.1.2 already owns React-compat aliases and disables dependency discovery, so the Fresh 2.3 pre-bundling fix is active. A clean Windows production build still resolves the same installed `preact/hooks` and Signals files through both `C:/...` and `C:\...` final IDs. Rollup then emits two hook runtimes and hydration fails with `TypeError: options.__ is not a function`. + +Configuration-only variants were retested: `resolve.dedupe`, import-map pins, browser conditions, and declarative aliases did not merge the final slash variants. The working build therefore retains one narrow temporary resolver that delegates normal resolution and applies Vite `normalizePath()` only to Preact IDs. There are no custom Babel/CJS passes or Markdown bundle transforms. The clean failure and the removable framework-level fix are tracked in: + +- https://github.com/rickylabs/netscript/issues/782 +- related Vite path report: https://github.com/vitejs/vite/issues/22264 + +The generic versioned-`npm:` aliases are a separate cold Deno-resolution compatibility requirement found by Linux CI. + +## Runtime/upstream findings + +- Deno 2.9.3+ contains the merged Windows GUI child-process fix required for direct sidecars: https://github.com/denoland/deno/issues/35994 +- sidecars use `--node-modules-dir=none --exclude-unused-npm`; experimental bundling cannot currently resolve the dynamically selected libSQL native package +- Garnet is staged from `garnet-server` 1.1.10; Docker Desktop is not required +- producing one MSI containing the adjacent sidecars remains installer work +- NetScript aggregate health currently includes an unused MySQL adapter for this SQLite app, so listener readiness is used pending an upstream health fix + +## Verification + +- full `deno task test`: **144 passed, 0 failed** +- targeted `deno check apps/dashboard/vite.config.ts`: passed +- local aggregate `deno task check`: blocked on Windows by command-line length (`os error 206`); the same repository check runs in Linux CI +- clean Fresh/Vite client + SSR production build: passed (1,380 client and 3,212 SSR modules) +- emitted client graph: exactly one `hooks.module.mjs` and one `signals.module.mjs` +- timestamped packaged output: `eis-chat-singleton-20260716T105913Z` +- packaged service health: Garnet listening; all six HTTP endpoints returned 200 +- packaged browser smoke: chat streamed without hard refresh; KB page and image OCR completed; zero console errors +- Aspire smoke: dashboard HTTP 200 and telemetry present for `eis-chat-desktop`, `streams`, `workers-api`, `workers`, `eischat`, and both MCP services +- head CI: **all gates passed** on Deno 2.9.3, including formatting, dashboard/workspace type checks, 144 tests, and the cold Linux Vite client+SSR build ([run 29496352343](https://github.com/rickylabs/eis-chat/actions/runs/29496352343)) + +## References + +- [Fresh 2.3 Vite changes](https://deno.com/blog/fresh-2.3) +- [Deno OpenTelemetry configuration](https://docs.deno.com/runtime/fundamentals/open_telemetry/#configuration) +- [Aspire standalone dashboard](https://aspire.dev/dashboard/standalone/) +- [Aspire dashboard configuration](https://aspire.dev/dashboard/configuration) +- [Aspire standalone limitations](https://aspire.dev/dashboard/standalone/#unavailable-features-when-standalone) +- [Aspire 13.4](https://aspire.dev/whats-new/aspire-13-4/) + +## PR #150 commits + +- faf85e9b prototype windows singleton desktop deployment +- c46f8b69 work around desktop sidecar spawn handles +- 0c363915 document deno 2.9.3 sidecar retest +- 0d7ddcd0 capture windows singleton diagnostics +- 232a13f6 run windows singleton without powershell +- fa23bf0e complete windows singleton stack and fix markdown hydration +- 11f0125a fix singleton discovery and bundle Aspire dashboard +- 4853b0e9 fix compiled singleton telemetry and CI +- 92ced5ad normalize Deno npm specifiers in Vite +- f325a1d7 resolve durable streams export in cold Vite builds +- bc44f266 cover versioned durable streams imports +- cf8887a4 normalize versioned Deno npm imports +- 8cdedd30 document verified singleton integration limits + +## PR #150 files + +- modified .github/workflows/ci.yml (+1/-1) +- modified apps/dashboard/components/ui/markdown.tsx (+40/-25) +- added apps/dashboard/lib/windows-singleton.test.ts (+66/-0) +- added apps/dashboard/lib/windows-singleton.ts (+389/-0) +- modified apps/dashboard/main.ts (+5/-0) +- modified apps/dashboard/package.json (+3/-1) +- modified apps/dashboard/vite.config.ts (+34/-11) +- added database/sqlite/mod.test.ts (+34/-0) +- modified database/sqlite/mod.ts (+24/-0) +- modified deno.json (+1/-0) +- modified deno.lock (+20/-24) +- modified docs/DESKTOP-SHELL.md (+138/-7) +- modified package.json (+6/-2) +- added scripts/windows-singleton/assets/ASPIRE-LICENSE.TXT (+23/-0) +- added scripts/windows-singleton/assets/aspire-dashboard.json (+13/-0) +- added scripts/windows-singleton/build.ts (+193/-0) +- added scripts/windows-singleton/entries/workers-api.ts (+4/-0) +- added scripts/windows-singleton/entries/workers.ts (+21/-0) +- modified services/eischat/src/main.ts (+3/-1) + +## PR #150 issue comments + + + +## PR #150 review comments + diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-tree.md b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-tree.md new file mode 100644 index 000000000..77deed1d5 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/md/ec-tree.md @@ -0,0 +1,1260 @@ +# eis-chat tree @ aeaf2df + +.agents/skills/aspire-deployment/SKILL.md (15942b) +.agents/skills/aspire-deployment/references/aws.md (8637b) +.agents/skills/aspire-deployment/references/azure.md (19545b) +.agents/skills/aspire-deployment/references/cicd.md (14761b) +.agents/skills/aspire-deployment/references/docker-compose.md (6917b) +.agents/skills/aspire-deployment/references/github-actions-azure-csharp.yml (1594b) +.agents/skills/aspire-deployment/references/github-actions-azure-typescript.yml (1559b) +.agents/skills/aspire-deployment/references/javascript.md (8136b) +.agents/skills/aspire-deployment/references/kubernetes.md (13720b) +.agents/skills/aspire-deployment/references/preflight.md (9843b) +.agents/skills/aspire-init/SKILL.md (7726b) +.agents/skills/aspire-init/references/init-workflow.md (5975b) +.agents/skills/aspire-init/references/templates.md (3909b) +.agents/skills/aspire-monitoring/SKILL.md (12522b) +.agents/skills/aspire-monitoring/references/diagnostics-bridge.md (11418b) +.agents/skills/aspire-monitoring/references/monitoring.md (8577b) +.agents/skills/aspire-monitoring/references/playwright-handoff.md (963b) +.agents/skills/aspire-orchestration/SKILL.md (13217b) +.agents/skills/aspire-orchestration/references/agent-workflows.md (6019b) +.agents/skills/aspire-orchestration/references/app-commands.md (6273b) +.agents/skills/aspire-orchestration/references/detection.md (5214b) +.agents/skills/aspire-orchestration/references/resource-management.md (1934b) +.agents/skills/aspire-orchestration/references/safety-guardrails.md (10553b) +.agents/skills/aspire/SKILL.md (10764b) +.agents/skills/aspire/references/aspire-13-3-breaking-changes.md (6932b) +.agents/skills/aspireify/SKILL.md (18296b) +.agents/skills/aspireify/references/apphost-wiring.md (18159b) +.agents/skills/aspireify/references/csharp-authoring.md (6360b) +.agents/skills/aspireify/references/docker-compose.md (9835b) +.agents/skills/aspireify/references/full-solution-apphosts.md (16014b) +.agents/skills/aspireify/references/javascript-apps.md (7081b) +.agents/skills/aspireify/references/opentelemetry.md (3873b) +.agents/skills/aspireify/references/scan-and-propose.md (6545b) +.agents/skills/aspireify/references/service-defaults.md (3548b) +.agents/skills/aspireify/references/typescript-authoring.md (8616b) +.agents/skills/aspireify/references/validation.md (3580b) +.agents/skills/playwright-cli/SKILL.md (11903b) +.agents/skills/playwright-cli/references/element-attributes.md (665b) +.agents/skills/playwright-cli/references/playwright-tests.md (1690b) +.agents/skills/playwright-cli/references/request-mocking.md (2182b) +.agents/skills/playwright-cli/references/running-code.md (5642b) +.agents/skills/playwright-cli/references/session-management.md (5671b) +.agents/skills/playwright-cli/references/spec-driven-testing.md (11578b) +.agents/skills/playwright-cli/references/storage-state.md (5198b) +.agents/skills/playwright-cli/references/test-generation.md (4585b) +.agents/skills/playwright-cli/references/tracing.md (3440b) +.agents/skills/playwright-cli/references/video-recording.md (5387b) +.env.example (2354b) +.gitattributes (411b) +.github/workflows/ci.yml (1677b) +.gitignore (961b) +.mcp.json (151b) +.netscript/generated/plugin-workers/job-registry.ts (1869b) +NOTICE (1244b) +README.md (4707b) +apps/dashboard/.generated/manifest.ts (2121b) +apps/dashboard/.generated/routes.ts (4685b) +apps/dashboard/.gitignore (196b) +apps/dashboard/README.md (386b) +apps/dashboard/assets/blocks/app-shell.css (30318b) +apps/dashboard/assets/blocks/blocks.css (4045b) +apps/dashboard/assets/blocks/breadcrumbs.css (771b) +apps/dashboard/assets/blocks/channel.css (2903b) +apps/dashboard/assets/blocks/insights.css (6800b) +apps/dashboard/assets/blocks/knowledge.css (5039b) +apps/dashboard/assets/blocks/mcp.css (3352b) +apps/dashboard/assets/blocks/nav-progress.css (986b) +apps/dashboard/assets/blocks/session-actions.css (2864b) +apps/dashboard/assets/blocks/session.css (8878b) +apps/dashboard/assets/blocks/skills.css (7419b) +apps/dashboard/assets/design.css (16693b) +apps/dashboard/assets/layouts.css (16965b) +apps/dashboard/assets/styles.css (2543b) +apps/dashboard/assets/theme-bridge.css (3728b) +apps/dashboard/assets/tokens.css (8234b) +apps/dashboard/assets/tokens.json (33922b) +apps/dashboard/assets/ui/alert-styles.css (1962b) +apps/dashboard/assets/ui/alert.css (162b) +apps/dashboard/assets/ui/attach-strip.css (1211b) +apps/dashboard/assets/ui/avatar.css (1458b) +apps/dashboard/assets/ui/badge.css (1222b) +apps/dashboard/assets/ui/button.css (3980b) +apps/dashboard/assets/ui/card.css (694b) +apps/dashboard/assets/ui/chart-block.css (4444b) +apps/dashboard/assets/ui/checkbox.css (764b) +apps/dashboard/assets/ui/choice-styles.css (868b) +apps/dashboard/assets/ui/citation-chip.css (1012b) +apps/dashboard/assets/ui/code-block.css (2853b) +apps/dashboard/assets/ui/command-palette.css (3610b) +apps/dashboard/assets/ui/donut.css (1751b) +apps/dashboard/assets/ui/dropzone.css (1240b) +apps/dashboard/assets/ui/floating.css (1056b) +apps/dashboard/assets/ui/form-control-styles.css (1026b) +apps/dashboard/assets/ui/form-field.css (411b) +apps/dashboard/assets/ui/html-block.css (1067b) +apps/dashboard/assets/ui/inline-notice.css (178b) +apps/dashboard/assets/ui/label.css (224b) +apps/dashboard/assets/ui/markdown.css (6111b) +apps/dashboard/assets/ui/mcp-widget.css (1533b) +apps/dashboard/assets/ui/message.css (5337b) +apps/dashboard/assets/ui/model-combobox.css (1488b) +apps/dashboard/assets/ui/model-selector.css (2618b) +apps/dashboard/assets/ui/panel.css (672b) +apps/dashboard/assets/ui/progress.css (1463b) +apps/dashboard/assets/ui/prompt-input.css (3694b) +apps/dashboard/assets/ui/responsive-table.css (3298b) +apps/dashboard/assets/ui/search.css (1387b) +apps/dashboard/assets/ui/separator.css (213b) +apps/dashboard/assets/ui/sheet.css (3558b) +apps/dashboard/assets/ui/skeleton.css (1170b) +apps/dashboard/assets/ui/spinner.css (628b) +apps/dashboard/assets/ui/surface-styles.css (481b) +apps/dashboard/assets/ui/switch.css (1026b) +apps/dashboard/assets/ui/textarea.css (57b) +apps/dashboard/assets/ui/toast.css (6236b) +apps/dashboard/assets/ui/tool-call-card.css (2244b) +apps/dashboard/assets/ui/ui-block.css (38133b) +apps/dashboard/client.ts (119b) +apps/dashboard/components/blocks/activity-feed.tsx (5683b) +apps/dashboard/components/blocks/breadcrumbs.tsx (3002b) +apps/dashboard/components/blocks/channel-tree.tsx (3208b) +apps/dashboard/components/blocks/chat-empty.tsx (2878b) +apps/dashboard/components/blocks/connector.tsx (2384b) +apps/dashboard/components/blocks/context-rail.tsx (9195b) +apps/dashboard/components/blocks/data-grid.tsx (4607b) +apps/dashboard/components/blocks/member-rail.tsx (1859b) +apps/dashboard/components/blocks/mod.ts (1035b) +apps/dashboard/components/blocks/plugin-gated-view.tsx (1071b) +apps/dashboard/components/ui/alert.tsx (1518b) +apps/dashboard/components/ui/avatar.tsx (2069b) +apps/dashboard/components/ui/badge.tsx (1196b) +apps/dashboard/components/ui/breadcrumb.tsx (2047b) +apps/dashboard/components/ui/button.tsx (3855b) +apps/dashboard/components/ui/card.tsx (2332b) +apps/dashboard/components/ui/chart-block.tsx (5337b) +apps/dashboard/components/ui/checkbox.tsx (1222b) +apps/dashboard/components/ui/citation-chip.tsx (1266b) +apps/dashboard/components/ui/code-block.tsx (1754b) +apps/dashboard/components/ui/command-palette.tsx (6283b) +apps/dashboard/components/ui/control-props.ts (5030b) +apps/dashboard/components/ui/data-table.tsx (2581b) +apps/dashboard/components/ui/detail-layout.tsx (1367b) +apps/dashboard/components/ui/donut.tsx (2924b) +apps/dashboard/components/ui/dropzone.tsx (1459b) +apps/dashboard/components/ui/empty-state.tsx (853b) +apps/dashboard/components/ui/filter-form.tsx (1431b) +apps/dashboard/components/ui/form-field.tsx (1331b) +apps/dashboard/components/ui/html-block.tsx (6750b) +apps/dashboard/components/ui/icon-button.tsx (1409b) +apps/dashboard/components/ui/icon.tsx (5217b) +apps/dashboard/components/ui/inline-notice.tsx (1533b) +apps/dashboard/components/ui/input.tsx (758b) +apps/dashboard/components/ui/label.tsx (907b) +apps/dashboard/components/ui/markdown.tsx (14160b) +apps/dashboard/components/ui/mcp-widget.tsx (8689b) +apps/dashboard/components/ui/message.tsx (13794b) +apps/dashboard/components/ui/mod.ts (3018b) +apps/dashboard/components/ui/model-selector.tsx (2449b) +apps/dashboard/components/ui/page-header.tsx (2739b) +apps/dashboard/components/ui/pagination.tsx (1316b) +apps/dashboard/components/ui/panel.tsx (2487b) +apps/dashboard/components/ui/progress.tsx (2051b) +apps/dashboard/components/ui/prompt-input.tsx (7463b) +apps/dashboard/components/ui/responsive-table.tsx (3437b) +apps/dashboard/components/ui/search.tsx (1361b) +apps/dashboard/components/ui/section-divider.tsx (780b) +apps/dashboard/components/ui/select.tsx (2245b) +apps/dashboard/components/ui/separator.tsx (823b) +apps/dashboard/components/ui/sidebar-shell.tsx (4181b) +apps/dashboard/components/ui/skeleton.tsx (4646b) +apps/dashboard/components/ui/spinner.tsx (1191b) +apps/dashboard/components/ui/stats-grid.tsx (1967b) +apps/dashboard/components/ui/switch.tsx (1268b) +apps/dashboard/components/ui/textarea.tsx (647b) +apps/dashboard/components/ui/tool-call-card.tsx (2383b) +apps/dashboard/components/ui/ui-block.tsx (42659b) +apps/dashboard/deno.json (2298b) +apps/dashboard/islands/ChannelInstructions.tsx (3224b) +apps/dashboard/islands/ChannelShareActions.tsx (3380b) +apps/dashboard/islands/ChannelTreeIsland.tsx (1954b) +apps/dashboard/islands/ChatPane.tsx (36133b) +apps/dashboard/islands/CommandBar.tsx (4736b) +apps/dashboard/islands/CustomModelsPanel.tsx (9357b) +apps/dashboard/islands/FeedbackControl.tsx (2924b) +apps/dashboard/islands/KnowledgePanel.tsx (25860b) +apps/dashboard/islands/McpPanel.tsx (6931b) +apps/dashboard/islands/ProvidersPanel.tsx (21966b) +apps/dashboard/islands/SessionActions.tsx (7166b) +apps/dashboard/islands/SessionRail.tsx (6256b) +apps/dashboard/islands/SessionScratch.tsx (10934b) +apps/dashboard/islands/SessionShareActions.tsx (4023b) +apps/dashboard/islands/SettingsPanel.tsx (4594b) +apps/dashboard/islands/SharingPanel.tsx (6896b) +apps/dashboard/islands/SkillsPanel.tsx (24520b) +apps/dashboard/islands/session-signals.ts (1748b) +apps/dashboard/islands/ui/ActionToasts.tsx (4384b) +apps/dashboard/islands/ui/NavProfile.tsx (2243b) +apps/dashboard/islands/ui/NavProgress.tsx (3549b) +apps/dashboard/islands/ui/NewSessionButton.tsx (2958b) +apps/dashboard/islands/ui/SidebarToggle.tsx (2631b) +apps/dashboard/islands/ui/ThemeToggle.tsx (2955b) +apps/dashboard/islands/ui/Toast.tsx (5281b) +apps/dashboard/lib/active-channel.ts (3591b) +apps/dashboard/lib/active-theme.ts (1349b) +apps/dashboard/lib/channel-service.ts (859b) +apps/dashboard/lib/chat-agent-loop.test.ts (12093b) +apps/dashboard/lib/chat-orchestration.test.ts (6171b) +apps/dashboard/lib/chat-orchestration.ts (18472b) +apps/dashboard/lib/chat-render.test.ts (1865b) +apps/dashboard/lib/chat-render.ts (16471b) +apps/dashboard/lib/chat-render_test.ts (11502b) +apps/dashboard/lib/chat-route.test.ts (5272b) +apps/dashboard/lib/chat-stream.ts (897b) +apps/dashboard/lib/cn.ts (365b) +apps/dashboard/lib/desktop-chrome.ts (2981b) +apps/dashboard/lib/guest-tokens.ts (3045b) +apps/dashboard/lib/insights-data.ts (5864b) +apps/dashboard/lib/kb-executions-stream.test.ts (4444b) +apps/dashboard/lib/kb-executions-stream.ts (7335b) +apps/dashboard/lib/kb-ingest.ts (3008b) +apps/dashboard/lib/kb-ingest_test.ts (1960b) +apps/dashboard/lib/kb-status.ts (2516b) +apps/dashboard/lib/llm-openai.test.ts (2933b) +apps/dashboard/lib/llm-openrouter.test.ts (5738b) +apps/dashboard/lib/llm.ts (12201b) +apps/dashboard/lib/mcp-connectors.ts (1690b) +apps/dashboard/lib/mcp-status.ts (6010b) +apps/dashboard/lib/mcp.ts (9425b) +apps/dashboard/lib/model-discovery.ts (7963b) +apps/dashboard/lib/models.defaults.test.ts (2643b) +apps/dashboard/lib/models.test.ts (3526b) +apps/dashboard/lib/models.ts (10651b) +apps/dashboard/lib/ollama-integration.test.ts (5254b) +apps/dashboard/lib/otel.ts (4339b) +apps/dashboard/lib/paced-reveal.ts (4006b) +apps/dashboard/lib/provider-settings.ts (7956b) +apps/dashboard/lib/public-types.ts (391b) +apps/dashboard/lib/registry-stream.ts (1733b) +apps/dashboard/lib/route-guards.ts (2455b) +apps/dashboard/lib/session-data.ts (10891b) +apps/dashboard/lib/share-conflict.ts (800b) +apps/dashboard/lib/skill-activations.ts (3273b) +apps/dashboard/lib/skills.ts (12227b) +apps/dashboard/lib/stream-loaders.ts (5117b) +apps/dashboard/lib/ui-spec.ts (7715b) +apps/dashboard/lib/ui-spec_test.ts (10626b) +apps/dashboard/lib/ui/client-toast.ts (1641b) +apps/dashboard/lib/ui/preferences.ts (2772b) +apps/dashboard/lib/ui/toast.ts (2174b) +apps/dashboard/lib/usage-data.ts (8624b) +apps/dashboard/lib/windows-singleton.test.ts (3100b) +apps/dashboard/lib/windows-singleton.ts (13622b) +apps/dashboard/lib/workspace-nav.ts (3159b) +apps/dashboard/main.ts (1418b) +apps/dashboard/package.json (1226b) +apps/dashboard/router.ts (2763b) +apps/dashboard/routes/(_components)/home-view.tsx (4006b) +apps/dashboard/routes/(design)/design/(_components)/components-view.tsx (23165b) +apps/dashboard/routes/(design)/design/(_components)/composition-view.tsx (14317b) +apps/dashboard/routes/(design)/design/(_components)/tokens-view.tsx (11612b) +apps/dashboard/routes/(design)/design/(_islands)/FloatingSurfaceDemo.tsx (4564b) +apps/dashboard/routes/(design)/design/(_islands)/GenerativeUiDemo.tsx (7380b) +apps/dashboard/routes/(design)/design/(_islands)/TokenClipboard.tsx (985b) +apps/dashboard/routes/(design)/design/(_shared)/registry.ts (7996b) +apps/dashboard/routes/(design)/design/(_shared)/tokens.ts (3789b) +apps/dashboard/routes/(design)/design/_layout.tsx (2099b) +apps/dashboard/routes/(design)/design/components.tsx (641b) +apps/dashboard/routes/(design)/design/composition.tsx (658b) +apps/dashboard/routes/(design)/design/generative.tsx (2051b) +apps/dashboard/routes/(design)/design/index.tsx (204b) +apps/dashboard/routes/(design)/design/tokens.tsx (599b) +apps/dashboard/routes/_app.tsx (1425b) +apps/dashboard/routes/_layout.tsx (8513b) +apps/dashboard/routes/api/chat-stream.ts (5136b) +apps/dashboard/routes/api/chat.ts (21826b) +apps/dashboard/routes/api/feedback.ts (1485b) +apps/dashboard/routes/api/knowledge-image.ts (2212b) +apps/dashboard/routes/api/knowledge.ts (1478b) +apps/dashboard/routes/api/local-models.ts (431b) +apps/dashboard/routes/api/mcp-apps/call.ts (6283b) +apps/dashboard/routes/api/models.ts (3254b) +apps/dashboard/routes/api/provider-settings.ts (7213b) +apps/dashboard/routes/api/share.ts (2671b) +apps/dashboard/routes/api/streams/[...path].ts (5604b) +apps/dashboard/routes/channels/new/(_components)/create-channel-form.tsx (2741b) +apps/dashboard/routes/channels/new/index.tsx (2989b) +apps/dashboard/routes/index.tsx (1273b) +apps/dashboard/routes/mcp-sandbox.html.ts (13586b) +apps/dashboard/routes/mcp/(_components)/mcp-view.tsx (2407b) +apps/dashboard/routes/mcp/index.tsx (1850b) +apps/dashboard/routes/project/[project]/(_components)/project-view.tsx (3256b) +apps/dashboard/routes/project/[project]/_middleware.ts (252b) +apps/dashboard/routes/project/[project]/channel/[channel]/(_components)/channel-view.tsx (10853b) +apps/dashboard/routes/project/[project]/channel/[channel]/(_components)/create-session-form.tsx (2718b) +apps/dashboard/routes/project/[project]/channel/[channel]/(_islands)/SessionsGrid.tsx (4181b) +apps/dashboard/routes/project/[project]/channel/[channel]/_middleware.ts (863b) +apps/dashboard/routes/project/[project]/channel/[channel]/index.tsx (10956b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/kb-types.ts (866b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/knowledge-doc-view.tsx (5545b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/(_components)/knowledge-view.tsx (2574b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/[doc].tsx (3183b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/_middleware.ts (457b) +apps/dashboard/routes/project/[project]/channel/[channel]/knowledge/index.tsx (2126b) +apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-context.tsx (1623b) +apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-header.tsx (2430b) +apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/(_components)/session-view.tsx (2734b) +apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/_middleware.ts (317b) +apps/dashboard/routes/project/[project]/channel/[channel]/session/[session]/index.tsx (11085b) +apps/dashboard/routes/project/[project]/channel/[channel]/settings/(_components)/settings-view.tsx (5230b) +apps/dashboard/routes/project/[project]/channel/[channel]/settings/index.tsx (1867b) +apps/dashboard/routes/project/[project]/index.tsx (2083b) +apps/dashboard/routes/settings/(_components)/settings-view.tsx (3564b) +apps/dashboard/routes/settings/index.tsx (1997b) +apps/dashboard/routes/skills/(_components)/skills-types.ts (376b) +apps/dashboard/routes/skills/(_components)/skills-view.tsx (1963b) +apps/dashboard/routes/skills/index.tsx (2582b) +apps/dashboard/routes/team/(_components)/team-view.tsx (4020b) +apps/dashboard/routes/team/index.tsx (1723b) +apps/dashboard/routes/usage/(_components)/usage-view.tsx (6958b) +apps/dashboard/routes/usage/index.tsx (1915b) +apps/dashboard/static/favicon.ico (22382b) +apps/dashboard/utils.ts (274b) +apps/dashboard/vite.config.ts (6591b) +appsettings.json (4423b) +aspire/.helpers/_aspire-compat.mts (15766b) +aspire/.helpers/config-schema.mts (1448b) +aspire/.helpers/configure-dashboard.mts (823b) +aspire/.helpers/db-cli-mode.mts (4821b) +aspire/.helpers/index.mts (3272b) +aspire/.helpers/register-apps.mts (7215b) +aspire/.helpers/register-background.mts (6194b) +aspire/.helpers/register-infrastructure.mts (4656b) +aspire/.helpers/register-plugins.mts (6923b) +aspire/.helpers/register-services.mts (11538b) +aspire/.helpers/register-tools.mts (4659b) +aspire/PROPOSED-desktop-resource.md (6209b) +aspire/apphost.mts (454b) +aspire/aspire.config.json (546b) +aspire/deno.lock (8449b) +aspire/package-lock.json (18064b) +aspire/package.json (255b) +aspire/tsconfig.apphost.json (469b) +contracts/deno.json (233b) +contracts/mod.ts (160b) +contracts/package.json (205b) +contracts/versions/v1/channel.contract.ts (18193b) +contracts/versions/v1/eischat.contract.ts (3371b) +contracts/versions/v1/mod.ts (1162b) +contracts/versions/v1/skills.contract.ts (6570b) +database/mod.ts (158b) +database/sqlite/deno.json (3338b) +database/sqlite/migrations/20260629124714_init/migration.sql (475b) +database/sqlite/migrations/migration_lock.toml (124b) +database/sqlite/mod.test.ts (1302b) +database/sqlite/mod.ts (7225b) +database/sqlite/prisma.config.ts (4760b) +database/sqlite/schema/.generated/browser.ts (1069b) +database/sqlite/schema/.generated/client.server.ts (2050b) +database/sqlite/schema/.generated/client.ts (137b) +database/sqlite/schema/.generated/commonInputTypes.ts (6187b) +database/sqlite/schema/.generated/enums.ts (336b) +database/sqlite/schema/.generated/internal/class.ts (12545b) +database/sqlite/schema/.generated/internal/prismaNamespace.ts (23426b) +database/sqlite/schema/.generated/internal/prismaNamespaceBrowser.ts (3026b) +database/sqlite/schema/.generated/models.ts (404b) +database/sqlite/schema/.generated/models/Channel.ts (38105b) +database/sqlite/schema/.generated/models/ExampleRecord.ts (40973b) +database/sqlite/schema/.generated/zod/.prisma-zod-generator-manifest.json (2854b) +database/sqlite/schema/.generated/zod/schemas/enums/ChannelScalarFieldEnum.schema.ts (201b) +database/sqlite/schema/.generated/zod/schemas/enums/ExampleRecordScalarFieldEnum.schema.ts (224b) +database/sqlite/schema/.generated/zod/schemas/enums/SortOrder.schema.ts (142b) +database/sqlite/schema/.generated/zod/schemas/enums/TransactionIsolationLevel.schema.ts (191b) +database/sqlite/schema/.generated/zod/schemas/index.ts (2209b) +database/sqlite/schema/.generated/zod/schemas/models/Channel.schema.ts (213b) +database/sqlite/schema/.generated/zod/schemas/models/ExampleRecord.schema.ts (234b) +database/sqlite/schema/.generated/zod/schemas/models/index.ts (190b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelCreateManyInput.schema.ts (467b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelOrderByWithRelationInput.schema.ts (602b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedCreateInput.schema.ts (487b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedUpdateInput.schema.ts (1057b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelUncheckedUpdateManyInput.schema.ts (1073b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelUpdateInput.schema.ts (1021b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelWhereInput.schema.ts (1227b) +database/sqlite/schema/.generated/zod/schemas/objects/ChannelWhereUniqueInput.schema.ts (421b) +database/sqlite/schema/.generated/zod/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts (440b) +database/sqlite/schema/.generated/zod/schemas/objects/DateTimeFilter.schema.ts (805b) +database/sqlite/schema/.generated/zod/schemas/objects/DateTimeWithAggregatesFilter.schema.ts (1345b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordCreateManyInput.schema.ts (512b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordOrderByWithRelationInput.schema.ts (631b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedCreateInput.schema.ts (491b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedUpdateInput.schema.ts (1093b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUncheckedUpdateManyInput.schema.ts (1109b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordUpdateInput.schema.ts (1057b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordWhereInput.schema.ts (1293b) +database/sqlite/schema/.generated/zod/schemas/objects/ExampleRecordWhereUniqueInput.schema.ts (414b) +database/sqlite/schema/.generated/zod/schemas/objects/NestedDateTimeFilter.schema.ts (738b) +database/sqlite/schema/.generated/zod/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts (1234b) +database/sqlite/schema/.generated/zod/schemas/objects/NestedIntFilter.schema.ts (703b) +database/sqlite/schema/.generated/zod/schemas/objects/NestedStringFilter.schema.ts (777b) +database/sqlite/schema/.generated/zod/schemas/objects/NestedStringWithAggregatesFilter.schema.ts (1263b) +database/sqlite/schema/.generated/zod/schemas/objects/StringFieldUpdateOperationsInput.schema.ts (427b) +database/sqlite/schema/.generated/zod/schemas/objects/StringFilter.schema.ts (838b) +database/sqlite/schema/.generated/zod/schemas/objects/StringWithAggregatesFilter.schema.ts (1368b) +database/sqlite/schema/.generated/zod/schemas/variants/index.ts (177b) +database/sqlite/schema/.generated/zod/schemas/variants/input/Channel.input.ts (217b) +database/sqlite/schema/.generated/zod/schemas/variants/input/ExampleRecord.input.ts (213b) +database/sqlite/schema/.generated/zod/schemas/variants/input/index.ts (201b) +database/sqlite/schema/.generated/zod/schemas/variants/pure/Channel.pure.ts (261b) +database/sqlite/schema/.generated/zod/schemas/variants/pure/ExampleRecord.pure.ts (282b) +database/sqlite/schema/.generated/zod/schemas/variants/pure/index.ts (198b) +database/sqlite/schema/.generated/zod/schemas/variants/result/Channel.result.ts (265b) +database/sqlite/schema/.generated/zod/schemas/variants/result/ExampleRecord.result.ts (286b) +database/sqlite/schema/.generated/zod/schemas/variants/result/index.ts (206b) +database/sqlite/schema/schema.prisma (796b) +database/sqlite/schema/zod-generator.config.json (230b) +database/sqlite/scripts/clear-seeded-client.ts (286b) +database/sqlite/scripts/fix-zod-imports.ts (574b) +database/sqlite/scripts/generate-zod.ts (362b) +database/sqlite/scripts/migrate.ts (232b) +database/sqlite/scripts/patch-prisma-client.ts (344b) +database/sqlite/scripts/seed.ts (544b) +database/sqlite/zod-generator.config.json (230b) +deno.json (6323b) +deno.lock (213984b) +docs/ARCHITECTURE.md (12146b) +docs/BUILD-PLAN.md (5450b) +docs/DESKTOP-SHELL.md (26882b) +docs/HANDOVER.md (7941b) +docs/INDEX.md (4223b) +docs/NETSCRIPT-BETA9-NON-AI-MIGRATION.md (13373b) +docs/PHASE-1-FOUNDATION.md (5095b) +docs/PHASE-2-CHAT.md (4491b) +docs/PHASE-3-MCP.md (4151b) +docs/PHASE-4-RAG.md (6517b) +docs/PHASE-5-CONTEXT.md (3767b) +docs/PHASE-5-NOTES.md (7984b) +docs/PHASE-6-SHARING.md (5668b) +docs/PHASE-7-MCP-UI.md (3915b) +docs/PRODUCT.md (5889b) +docs/ROADMAP-DONE-AND-MIGRATION.md (14073b) +docs/SKILL.md (5210b) +docs/adapter-audit-120.md (9261b) +docs/assets/01-home.png (91999b) +docs/assets/02-channels.png (50712b) +docs/assets/03-channel-context.png (40276b) +docs/assets/04-session-chat.png (68484b) +docs/assets/05-mcp-grounding.png (76518b) +docs/assets/06-channel-rag.png (62049b) +docs/assets/07-screenshot-to-context.png (62993b) +docs/assets/08-mcp-ui-chart.png (76512b) +docs/assets/09-channel-sharing.png (65000b) +docs/assets/README.md (1784b) +docs/assets/example-error-input.png (11143b) +docs/design/BUILD-CONTRACT.md (6225b) +docs/design/CLAUDE-DESIGN-BRIEF.md (6390b) +docs/design/CLAUDE-DESIGN-PROMPT.md (3592b) +docs/design/DECISIONS.md (6524b) +docs/design/PROPOSED-COMPONENTS.md (4651b) +docs/design/inspiration/00-videoframe.png (604185b) +docs/design/inspiration/01-dribbble.png (265851b) +docs/design/inspiration/02-dribbble.png (210581b) +docs/design/inspiration/03-dribbble.png (369448b) +docs/design/inspiration/04-dribbble.png (432746b) +docs/design/inspiration/05-dribbble.png (209951b) +docs/design/inspiration/06-dribbble.png (180612b) +docs/design/inspiration/07-dribbble.png (273261b) +docs/design/inspiration/08-dribbble.png (198081b) +netscript.config.ts (491b) +package.json (3293b) +packages/channel/channel_test.ts (12440b) +packages/channel/deno.json (143b) +packages/channel/kb-image.test.ts (2813b) +packages/channel/mod.ts (38538b) +packages/skills/deno.json (188b) +packages/skills/mod.ts (15135b) +packages/skills/skills_test.ts (9730b) +plugins/channel-sync/_fs.ts (5626b) +plugins/channel-sync/_lock.ts (7195b) +plugins/channel-sync/deno.json (86b) +plugins/channel-sync/mod.ts (2891b) +plugins/channel-sync/smb.ts (14362b) +plugins/channel-sync/smb_test.ts (15080b) +plugins/deno.json (81b) +plugins/mod.ts (224b) +resources/README.md (2281b) +resources/deno-desktop/auto_update.md (10668b) +resources/deno-desktop/backends.md (4033b) +resources/deno-desktop/bindings.md (6639b) +resources/deno-desktop/comparison.md (8025b) +resources/deno-desktop/configuration.md (6850b) +resources/deno-desktop/desktop.md (3751b) +resources/deno-desktop/devtools.md (6158b) +resources/deno-desktop/dialogs.md (3695b) +resources/deno-desktop/distribution.md (9303b) +resources/deno-desktop/error_reporting.md (6721b) +resources/deno-desktop/frameworks.md (5945b) +resources/deno-desktop/hmr.md (5124b) +resources/deno-desktop/index.md (4838b) +resources/deno-desktop/menus.md (6688b) +resources/deno-desktop/notifications.md (6018b) +resources/deno-desktop/serving.md (4429b) +resources/deno-desktop/tray_and_dock.md (8699b) +resources/deno-desktop/windows.md (10109b) +resources/design/CLAUDE-DESIGN-BRIEF.md (6392b) +resources/design/Capture d'écran 2026-06-30 095055.png (265851b) +resources/design/Capture d'écran 2026-06-30 095132.png (210581b) +resources/design/Capture d'écran 2026-06-30 095237.png (369448b) +resources/design/Capture d'écran 2026-06-30 095252.png (432746b) +resources/design/Capture d'écran 2026-06-30 095351.png (209951b) +resources/design/Capture d'écran 2026-06-30 095526.png (180612b) +resources/design/Capture d'écran 2026-06-30 095617.png (273261b) +resources/design/Capture d'écran 2026-06-30 095632.png (198081b) +resources/design/NS-ONE-ADDITIONS.md (23056b) +resources/design/PROPOSED-COMPONENTS.md (4651b) +resources/design/evidence/69-7/7a-after-skill-enabled.png (276844b) +resources/design/evidence/69-7/7a-before-no-skill.png (285313b) +resources/design/evidence/69-7/7b-after-skill-enabled.png (270242b) +resources/design/evidence/69-7/7b-before-no-skill.png (293571b) +resources/design/evidence/69-7/skills-surface-builtins.png (77268b) +resources/design/prototype-shots/_myapp-3.png (60051b) +resources/design/prototype-shots/_myapp-4.png (60769b) +resources/design/prototype-shots/_myapp-5.png (60865b) +resources/design/prototype-shots/_myapp-cmdk.png (103769b) +resources/design/prototype-shots/_myapp-cmdk2.png (131305b) +resources/design/prototype-shots/_myapp-session-light.png (60144b) +resources/design/prototype-shots/_myapp-session-light2.png (60120b) +resources/design/prototype-shots/_navfull.png (65062b) +resources/design/prototype-shots/_userchip.png (3417b) +resources/design/prototype-shots/_userchip2.png (3417b) +resources/design/prototype-shots/_userchip3.png (3366b) +resources/design/prototype-shots/activity-dark.png (160323b) +resources/design/prototype-shots/activity-light.png (158286b) +resources/design/prototype-shots/channel-dark.png (187073b) +resources/design/prototype-shots/channel-light.png (184150b) +resources/design/prototype-shots/knowledge-dark.png (144956b) +resources/design/prototype-shots/knowledge-light.png (142345b) +resources/design/prototype-shots/proto-cmdk.png (267260b) +resources/design/prototype-shots/session-dark.png (170490b) +resources/design/prototype-shots/session-light.png (173675b) +resources/design/prototype-shots/usage-dark.png (149714b) +resources/design/prototype-shots/usage-light.png (146398b) +resources/design/videoframe_8640.png (604185b) +resources/desktop-evidence/phase-a-render.png (32498b) +resources/desktop-evidence/phase-b-render.png (32960b) +resources/mcp-ui/RENDER-POLICY.md (12787b) +resources/mcp-ui/THEMING.md (16537b) +resources/mcp-ui/mcp-ui.md (6330b) +resources/netscript/README.md (851b) +resources/netscript/architecture/DOCS-STRUCTURE.md (10106b) +resources/netscript/architecture/PUBLIC-SURFACE-PATTERNS.md (17625b) +resources/netscript/architecture/STANDARDS.md (18569b) +resources/netscript/architecture/doctrine/01-thesis-and-axioms.md (6589b) +resources/netscript/architecture/doctrine/02-public-surface.md (8703b) +resources/netscript/architecture/doctrine/03-base-and-derived-classes.md (15281b) +resources/netscript/architecture/doctrine/04-modules-and-helpers.md (11116b) +resources/netscript/architecture/doctrine/05-folder-structure.md (14759b) +resources/netscript/architecture/doctrine/06-archetypes.md (9875b) +resources/netscript/architecture/doctrine/07-composition-and-extension.md (14607b) +resources/netscript/architecture/doctrine/08-runtime-state-failure.md (10529b) +resources/netscript/architecture/doctrine/09-anti-patterns-and-fitness-functions.md (17405b) +resources/netscript/architecture/doctrine/10-codebase-verdict-and-handoff.md (10729b) +resources/netscript/site/_diagrams/README.md (1602b) +resources/netscript/site/_includes/readme-template.md (1298b) +resources/netscript/site/ai/chat-ui.md (6981b) +resources/netscript/site/ai/durable-chat.md (12474b) +resources/netscript/site/ai/engine.md (14528b) +resources/netscript/site/ai/index.md (9892b) +resources/netscript/site/ai/mcp.md (8888b) +resources/netscript/site/background-processing/index.md (2528b) +resources/netscript/site/background-processing/polyglot-tasks.md (16084b) +resources/netscript/site/background-processing/workers.md (31931b) +resources/netscript/site/capabilities/ai.md (54b) +resources/netscript/site/capabilities/auth.md (72b) +resources/netscript/site/capabilities/background-jobs.md (81b) +resources/netscript/site/capabilities/database.md (77b) +resources/netscript/site/capabilities/durable-sagas.md (75b) +resources/netscript/site/capabilities/fresh-framework.md (61b) +resources/netscript/site/capabilities/fresh-ui.md (70b) +resources/netscript/site/capabilities/index.md (51b) +resources/netscript/site/capabilities/kv-queues-cron.md (83b) +resources/netscript/site/capabilities/polyglot-tasks.md (88b) +resources/netscript/site/capabilities/runtime-config.md (88b) +resources/netscript/site/capabilities/sdk.md (68b) +resources/netscript/site/capabilities/services.md (73b) +resources/netscript/site/capabilities/streams.md (77b) +resources/netscript/site/capabilities/telemetry.md (75b) +resources/netscript/site/capabilities/triggers.md (78b) +resources/netscript/site/cli-reference.md (28454b) +resources/netscript/site/data-persistence/database.md (29316b) +resources/netscript/site/data-persistence/index.md (2391b) +resources/netscript/site/data-persistence/kv-queues-cron.md (27316b) +resources/netscript/site/durable-workflows/index.md (3484b) +resources/netscript/site/durable-workflows/sagas.md (39529b) +resources/netscript/site/durable-workflows/streams.md (28078b) +resources/netscript/site/durable-workflows/triggers.md (31247b) +resources/netscript/site/explanation/architecture.md (23449b) +resources/netscript/site/explanation/aspire.md (36290b) +resources/netscript/site/explanation/auth-model.md (18934b) +resources/netscript/site/explanation/contracts.md (19398b) +resources/netscript/site/explanation/durability-model.md (26489b) +resources/netscript/site/explanation/index.md (7073b) +resources/netscript/site/explanation/observability.md (19551b) +resources/netscript/site/explanation/plugin-system.md (19503b) +resources/netscript/site/glossary.md (26117b) +resources/netscript/site/how-to/add-a-plugin.md (13844b) +resources/netscript/site/how-to/add-a-service.md (15428b) +resources/netscript/site/how-to/add-a-task-runtime-adapter.md (6125b) +resources/netscript/site/how-to/add-authentication.md (21504b) +resources/netscript/site/how-to/add-opentelemetry.md (19926b) +resources/netscript/site/how-to/author-a-plugin.md (27463b) +resources/netscript/site/how-to/build-a-durable-chat.md (12218b) +resources/netscript/site/how-to/build-a-server-validated-form.md (3579b) +resources/netscript/site/how-to/build-a-validated-ingestion-queue.md (3177b) +resources/netscript/site/how-to/choose-a-queue-provider.md (13427b) +resources/netscript/site/how-to/customize-fresh-ui.md (24367b) +resources/netscript/site/how-to/database-migration.md (16356b) +resources/netscript/site/how-to/deno-lsp-code-intelligence.md (6434b) +resources/netscript/site/how-to/deploy-deno-deploy.md (13954b) +resources/netscript/site/how-to/deploy-local-aspire.md (12799b) +resources/netscript/site/how-to/deploy.md (28713b) +resources/netscript/site/how-to/discover-services.md (15473b) +resources/netscript/site/how-to/expose-openapi-scalar.md (10242b) +resources/netscript/site/how-to/graceful-shutdown.md (13284b) +resources/netscript/site/how-to/index.md (7598b) +resources/netscript/site/how-to/publish-a-durable-stream.md (3413b) +resources/netscript/site/how-to/queue-kv-cron.md (15570b) +resources/netscript/site/how-to/restrict-worker-task-permissions.md (3412b) +resources/netscript/site/how-to/roll-out-runtime-overrides.md (3837b) +resources/netscript/site/how-to/run-a-polyglot-task.md (10091b) +resources/netscript/site/how-to/tune-worker-runtime.md (15481b) +resources/netscript/site/how-to/use-a-second-database.md (18919b) +resources/netscript/site/identity-access/auth.md (27874b) +resources/netscript/site/identity-access/better-auth-plugins.md (7043b) +resources/netscript/site/identity-access/index.md (2475b) +resources/netscript/site/observability/index.md (3214b) +resources/netscript/site/observability/telemetry.md (39891b) +resources/netscript/site/orchestration-runtime/cli-scaffold.md (9322b) +resources/netscript/site/orchestration-runtime/index.md (4000b) +resources/netscript/site/orchestration-runtime/runtime-config.md (17219b) +resources/netscript/site/reference/ai/index.md (25923b) +resources/netscript/site/reference/aspire/index.md (17040b) +resources/netscript/site/reference/auth-better-auth/index.md (2306b) +resources/netscript/site/reference/auth-kv-oauth/index.md (3209b) +resources/netscript/site/reference/auth-workos/index.md (2087b) +resources/netscript/site/reference/auth/index.md (1886b) +resources/netscript/site/reference/cli/index.md (10090b) +resources/netscript/site/reference/config/index.md (12109b) +resources/netscript/site/reference/contracts/index.md (19287b) +resources/netscript/site/reference/cron/index.md (5546b) +resources/netscript/site/reference/database/index.md (15104b) +resources/netscript/site/reference/fresh-ui/index.md (14289b) +resources/netscript/site/reference/fresh/index.md (70129b) +resources/netscript/site/reference/index.md (495b) +resources/netscript/site/reference/kv/index.md (9103b) +resources/netscript/site/reference/logger/index.md (4412b) +resources/netscript/site/reference/plugin-ai-core/index.md (14286b) +resources/netscript/site/reference/plugin-ai/index.md (17844b) +resources/netscript/site/reference/plugin-auth-core/index.md (4970b) +resources/netscript/site/reference/plugin-auth/index.md (1571b) +resources/netscript/site/reference/plugin/index.md (14468b) +resources/netscript/site/reference/prisma-adapter-mysql/index.md (3457b) +resources/netscript/site/reference/queue/index.md (7809b) +resources/netscript/site/reference/runtime-config/index.md (4082b) +resources/netscript/site/reference/sagas/index.md (15724b) +resources/netscript/site/reference/sdk/index.md (19687b) +resources/netscript/site/reference/service/index.md (7611b) +resources/netscript/site/reference/streams/index.md (12898b) +resources/netscript/site/reference/telemetry/convention.md (3809b) +resources/netscript/site/reference/telemetry/index.md (32681b) +resources/netscript/site/reference/triggers/index.md (17132b) +resources/netscript/site/reference/watchers/index.md (6778b) +resources/netscript/site/reference/workers/index.md (58051b) +resources/netscript/site/services-sdk/index.md (3121b) +resources/netscript/site/services-sdk/sdk.md (15851b) +resources/netscript/site/services-sdk/services.md (31936b) +resources/netscript/site/tutorials/chat/01-scaffold.md (6048b) +resources/netscript/site/tutorials/chat/02-durable-chat-route.md (10678b) +resources/netscript/site/tutorials/chat/03-chat-ui.md (11776b) +resources/netscript/site/tutorials/chat/04-tool-call.md (8989b) +resources/netscript/site/tutorials/chat/05-mcp.md (11348b) +resources/netscript/site/tutorials/chat/06-live-streaming.md (10383b) +resources/netscript/site/tutorials/chat/index.md (6867b) +resources/netscript/site/tutorials/eis-chat/01-scaffold.md (78b) +resources/netscript/site/tutorials/eis-chat/02-message-contract.md (88b) +resources/netscript/site/tutorials/eis-chat/03-deliver-worker.md (88b) +resources/netscript/site/tutorials/eis-chat/04-live-stream.md (84b) +resources/netscript/site/tutorials/eis-chat/index.md (66b) +resources/netscript/site/tutorials/erp-sync/01-scaffold.md (9703b) +resources/netscript/site/tutorials/erp-sync/02-import-job.md (12647b) +resources/netscript/site/tutorials/erp-sync/03-polyglot-transform.md (16906b) +resources/netscript/site/tutorials/erp-sync/04-queue-and-cron.md (12782b) +resources/netscript/site/tutorials/erp-sync/05-deploy.md (12148b) +resources/netscript/site/tutorials/erp-sync/index.md (7126b) +resources/netscript/site/tutorials/index.md (6873b) +resources/netscript/site/tutorials/live-dashboard/01-scaffold.md (10778b) +resources/netscript/site/tutorials/live-dashboard/02-contract-to-service.md (11173b) +resources/netscript/site/tutorials/live-dashboard/03-sdk-cache-first-query.md (8187b) +resources/netscript/site/tutorials/live-dashboard/04-definePage-QueryIsland.md (14972b) +resources/netscript/site/tutorials/live-dashboard/05-live-stream.md (13956b) +resources/netscript/site/tutorials/live-dashboard/06-deploy.md (10851b) +resources/netscript/site/tutorials/live-dashboard/index.md (6670b) +resources/netscript/site/tutorials/storefront/01-scaffold.md (12777b) +resources/netscript/site/tutorials/storefront/02-catalog-service.md (18213b) +resources/netscript/site/tutorials/storefront/03-cart-contracts.md (12508b) +resources/netscript/site/tutorials/storefront/04-checkout-saga.md (19075b) +resources/netscript/site/tutorials/storefront/05-shipping-webhook.md (15189b) +resources/netscript/site/tutorials/storefront/06-storefront-ui.md (17272b) +resources/netscript/site/tutorials/storefront/07-deploy.md (12529b) +resources/netscript/site/tutorials/storefront/index.md (7158b) +resources/netscript/site/tutorials/workspace/01-scaffold.md (10063b) +resources/netscript/site/tutorials/workspace/02-auth.md (15250b) +resources/netscript/site/tutorials/workspace/03-workspace-data.md (12881b) +resources/netscript/site/tutorials/workspace/04-provision-job.md (12090b) +resources/netscript/site/tutorials/workspace/05-route-authz.md (17229b) +resources/netscript/site/tutorials/workspace/06-deploy.md (11160b) +resources/netscript/site/tutorials/workspace/index.md (7851b) +resources/netscript/site/web-layer/builders.md (10737b) +resources/netscript/site/web-layer/defer-streaming-ui.md (10485b) +resources/netscript/site/web-layer/error.md (9873b) +resources/netscript/site/web-layer/examples.md (6375b) +resources/netscript/site/web-layer/form.md (13735b) +resources/netscript/site/web-layer/fresh-ui.md (21921b) +resources/netscript/site/web-layer/index.md (5752b) +resources/netscript/site/web-layer/interactive.md (6626b) +resources/netscript/site/web-layer/query.md (20497b) +resources/netscript/site/web-layer/route.md (9250b) +resources/netscript/site/web-layer/server.md (9414b) +resources/netscript/site/web-layer/testing.md (9728b) +resources/netscript/site/web-layer/vite.md (7864b) +resources/tanstack-ai/adapters/anthropic.md (13684b) +resources/tanstack-ai/adapters/elevenlabs.md (13145b) +resources/tanstack-ai/adapters/fal.md (17063b) +resources/tanstack-ai/adapters/gemini.md (26069b) +resources/tanstack-ai/adapters/grok.md (12573b) +resources/tanstack-ai/adapters/groq.md (6308b) +resources/tanstack-ai/adapters/ollama.md (7499b) +resources/tanstack-ai/adapters/openai-compatible.md (9614b) +resources/tanstack-ai/adapters/openai.md (21065b) +resources/tanstack-ai/adapters/openrouter.md (10901b) +resources/tanstack-ai/advanced/built-in-middleware.md (11006b) +resources/tanstack-ai/advanced/debug-logging.md (7022b) +resources/tanstack-ai/advanced/extend-adapter.md (6564b) +resources/tanstack-ai/advanced/middleware.md (38727b) +resources/tanstack-ai/advanced/multimodal-content.md (13506b) +resources/tanstack-ai/advanced/otel.md (11766b) +resources/tanstack-ai/advanced/per-model-type-safety.md (3043b) +resources/tanstack-ai/advanced/runtime-adapter-switching.md (6837b) +resources/tanstack-ai/advanced/runtime-context.md (10292b) +resources/tanstack-ai/advanced/tree-shaking.md (9390b) +resources/tanstack-ai/advanced/typed-options.md (7726b) +resources/tanstack-ai/api/ai-angular.md (18760b) +resources/tanstack-ai/api/ai-client.md (13460b) +resources/tanstack-ai/api/ai-preact.md (10155b) +resources/tanstack-ai/api/ai-react.md (11516b) +resources/tanstack-ai/api/ai-solid.md (10928b) +resources/tanstack-ai/api/ai-svelte.md (12442b) +resources/tanstack-ai/api/ai-vue.md (12588b) +resources/tanstack-ai/api/ai.md (16406b) +resources/tanstack-ai/architecture/approval-flow-processing.md (15695b) +resources/tanstack-ai/chat/agentic-cycle.md (6928b) +resources/tanstack-ai/chat/connection-adapters.md (23172b) +resources/tanstack-ai/chat/persistence.md (5556b) +resources/tanstack-ai/chat/streaming.md (6995b) +resources/tanstack-ai/chat/structured-outputs.md (1528b) +resources/tanstack-ai/chat/thinking-content.md (6135b) +resources/tanstack-ai/code-mode/client-integration.md (8907b) +resources/tanstack-ai/code-mode/code-mode-isolates.md (8691b) +resources/tanstack-ai/code-mode/code-mode-with-skills.md (16176b) +resources/tanstack-ai/code-mode/code-mode.md (13255b) +resources/tanstack-ai/code-mode/lazy-tools.md (8515b) +resources/tanstack-ai/community-adapters/cencori.md (5921b) +resources/tanstack-ai/community-adapters/cloudflare.md (8851b) +resources/tanstack-ai/community-adapters/decart.md (6755b) +resources/tanstack-ai/community-adapters/guide.md (7144b) +resources/tanstack-ai/community-adapters/mynth.md (10255b) +resources/tanstack-ai/community-adapters/soniox.md (8149b) +resources/tanstack-ai/comparison/vercel-ai-sdk.md (39120b) +resources/tanstack-ai/getting-started/agent-skills.md (5649b) +resources/tanstack-ai/getting-started/devtools.md (6054b) +resources/tanstack-ai/getting-started/overview.md (4809b) +resources/tanstack-ai/getting-started/quick-start-angular.md (6790b) +resources/tanstack-ai/getting-started/quick-start-react-native.md (9746b) +resources/tanstack-ai/getting-started/quick-start-server.md (5185b) +resources/tanstack-ai/getting-started/quick-start-svelte.md (4960b) +resources/tanstack-ai/getting-started/quick-start-vue.md (5390b) +resources/tanstack-ai/getting-started/quick-start.md (8058b) +resources/tanstack-ai/mcp/apps.md (19390b) +resources/tanstack-ai/media/audio-generation.md (7622b) +resources/tanstack-ai/media/audio-recording.md (10914b) +resources/tanstack-ai/media/generation-hooks.md (15372b) +resources/tanstack-ai/media/generations.md (9647b) +resources/tanstack-ai/media/image-generation.md (24165b) +resources/tanstack-ai/media/realtime-chat.md (17087b) +resources/tanstack-ai/media/text-to-speech.md (16709b) +resources/tanstack-ai/media/transcription.md (17087b) +resources/tanstack-ai/media/video-generation.md (28299b) +resources/tanstack-ai/migration/ag-ui-compliance.md (18429b) +resources/tanstack-ai/migration/migration-from-vercel-ai.md (53424b) +resources/tanstack-ai/migration/migration.md (14005b) +resources/tanstack-ai/migration/sampling-options-to-model-options.md (8732b) +resources/tanstack-ai/reference/classes/BatchStrategy.md (1713b) +resources/tanstack-ai/reference/classes/CompositeStrategy.md (1848b) +resources/tanstack-ai/reference/classes/ConsoleLogger.md (2881b) +resources/tanstack-ai/reference/classes/ImmediateStrategy.md (1069b) +resources/tanstack-ai/reference/classes/MCPDuplicateToolNameError.md (915b) +resources/tanstack-ai/reference/classes/PartialJSONParser.md (1124b) +resources/tanstack-ai/reference/classes/PunctuationStrategy.md (1144b) +resources/tanstack-ai/reference/classes/StandardSchemaValidationError.md (1567b) +resources/tanstack-ai/reference/classes/StreamProcessor.md (10462b) +resources/tanstack-ai/reference/classes/ToolCallManager.md (5493b) +resources/tanstack-ai/reference/classes/WordBoundaryStrategy.md (1135b) +resources/tanstack-ai/reference/functions/brandProviderTool.md (832b) +resources/tanstack-ai/reference/functions/buildBaseUsage.md (943b) +resources/tanstack-ai/reference/functions/chat.md (3067b) +resources/tanstack-ai/reference/functions/chatParamsFromRequest.md (2191b) +resources/tanstack-ai/reference/functions/chatParamsFromRequestBody.md (1752b) +resources/tanstack-ai/reference/functions/combineStrategies.md (976b) +resources/tanstack-ai/reference/functions/convertMessagesToModelMessages.md (991b) +resources/tanstack-ai/reference/functions/convertSchemaToJsonSchema.md (2327b) +resources/tanstack-ai/reference/functions/createAudioOptions.md (786b) +resources/tanstack-ai/reference/functions/createCapability.md (1833b) +resources/tanstack-ai/reference/functions/createChatMiddleware.md (462b) +resources/tanstack-ai/reference/functions/createChatOptions.md (2020b) +resources/tanstack-ai/reference/functions/createFrozenRegistry.md (809b) +resources/tanstack-ai/reference/functions/createImageOptions.md (848b) +resources/tanstack-ai/reference/functions/createModel.md (3862b) +resources/tanstack-ai/reference/functions/createReplayStream.md (542b) +resources/tanstack-ai/reference/functions/createSpeechOptions.md (781b) +resources/tanstack-ai/reference/functions/createSummarizeOptions.md (782b) +resources/tanstack-ai/reference/functions/createToolRegistry.md (1046b) +resources/tanstack-ai/reference/functions/createTranscriptionOptions.md (890b) +resources/tanstack-ai/reference/functions/createVideoOptions.md (874b) +resources/tanstack-ai/reference/functions/defineChatMiddleware.md (1157b) +resources/tanstack-ai/reference/functions/detectImageMimeType.md (956b) +resources/tanstack-ai/reference/functions/extendAdapter.md (1989b) +resources/tanstack-ai/reference/functions/firstSentence.md (540b) +resources/tanstack-ai/reference/functions/generateAudio.md (1124b) +resources/tanstack-ai/reference/functions/generateImage.md (1615b) +resources/tanstack-ai/reference/functions/generateMessageId.md (343b) +resources/tanstack-ai/reference/functions/generateSpeech.md (1258b) +resources/tanstack-ai/reference/functions/generateTranscription.md (1639b) +resources/tanstack-ai/reference/functions/generateVideo.md (2090b) +resources/tanstack-ai/reference/functions/getVideoJobStatus.md (1712b) +resources/tanstack-ai/reference/functions/isContentPart.md (545b) +resources/tanstack-ai/reference/functions/isContentPartArray.md (623b) +resources/tanstack-ai/reference/functions/isStandardSchema.md (626b) +resources/tanstack-ai/reference/functions/maxIterations.md (783b) +resources/tanstack-ai/reference/functions/mergeAgentTools.md (1767b) +resources/tanstack-ai/reference/functions/modelMessageToUIMessage.md (821b) +resources/tanstack-ai/reference/functions/modelMessagesToUIMessages.md (839b) +resources/tanstack-ai/reference/functions/normalizeSystemPrompts.md (1218b) +resources/tanstack-ai/reference/functions/normalizeToUIMessage.md (927b) +resources/tanstack-ai/reference/functions/normalizeToolResult.md (627b) +resources/tanstack-ai/reference/functions/parsePartialJSON.md (518b) +resources/tanstack-ai/reference/functions/parseWithStandardSchema.md (853b) +resources/tanstack-ai/reference/functions/realtimeToken.md (1078b) +resources/tanstack-ai/reference/functions/renderLazyCatalogEntry.md (832b) +resources/tanstack-ai/reference/functions/resolveMediaPrompt.md (739b) +resources/tanstack-ai/reference/functions/streamToText.md (961b) +resources/tanstack-ai/reference/functions/summarize.md (1570b) +resources/tanstack-ai/reference/functions/toHttpResponse.md (1102b) +resources/tanstack-ai/reference/functions/toHttpStream.md (1335b) +resources/tanstack-ai/reference/functions/toServerSentEventsResponse.md (1120b) +resources/tanstack-ai/reference/functions/toServerSentEventsStream.md (1031b) +resources/tanstack-ai/reference/functions/toolDefinition.md (2498b) +resources/tanstack-ai/reference/functions/uiMessageToModelMessages.md (1360b) +resources/tanstack-ai/reference/functions/uiMessagesToWire.md (871b) +resources/tanstack-ai/reference/functions/untilFinishReason.md (838b) +resources/tanstack-ai/reference/index.md (14856b) +resources/tanstack-ai/reference/interfaces/AbortInfo.md (794b) +resources/tanstack-ai/reference/interfaces/AfterToolCallInfo.md (2340b) +resources/tanstack-ai/reference/interfaces/AgentLoopState.md (988b) +resources/tanstack-ai/reference/interfaces/ApprovalRequestedEvent.md (1684b) +resources/tanstack-ai/reference/interfaces/AudioAdapter.md (2446b) +resources/tanstack-ai/reference/interfaces/AudioGenerationOptions.md (1630b) +resources/tanstack-ai/reference/interfaces/AudioGenerationResult.md (1059b) +resources/tanstack-ai/reference/interfaces/AudioPart.md (930b) +resources/tanstack-ai/reference/interfaces/AudioVisualization.md (3161b) +resources/tanstack-ai/reference/interfaces/BaseAGUIEvent.md (660b) +resources/tanstack-ai/reference/interfaces/BaseUsageInput.md (1004b) +resources/tanstack-ai/reference/interfaces/CapabilityContext.md (728b) +resources/tanstack-ai/reference/interfaces/CapabilityGetter.md (1314b) +resources/tanstack-ai/reference/interfaces/ChatMCPOptions.md (1989b) +resources/tanstack-ai/reference/interfaces/ChatMiddleware.md (11948b) +resources/tanstack-ai/reference/interfaces/ChatMiddlewareConfig.md (1738b) +resources/tanstack-ai/reference/interfaces/ChatMiddlewareContext.md (10847b) +resources/tanstack-ai/reference/interfaces/ChunkRecording.md (1698b) +resources/tanstack-ai/reference/interfaces/ChunkStrategy.md (1071b) +resources/tanstack-ai/reference/interfaces/ClientTool.md (2868b) +resources/tanstack-ai/reference/interfaces/ContentPartDataSource.md (1045b) +resources/tanstack-ai/reference/interfaces/ContentPartUrlSource.md (1010b) +resources/tanstack-ai/reference/interfaces/CustomEvent.md (890b) +resources/tanstack-ai/reference/interfaces/DebugCategories.md (2919b) +resources/tanstack-ai/reference/interfaces/DebugConfig.md (3926b) +resources/tanstack-ai/reference/interfaces/DefaultMessageMetadataByModality.md (1173b) +resources/tanstack-ai/reference/interfaces/DocumentPart.md (992b) +resources/tanstack-ai/reference/interfaces/ErrorInfo.md (779b) +resources/tanstack-ai/reference/interfaces/ExtendedModelDef.md (2177b) +resources/tanstack-ai/reference/interfaces/FinishInfo.md (1402b) +resources/tanstack-ai/reference/interfaces/GenerationAbortInfo.md (864b) +resources/tanstack-ai/reference/interfaces/GenerationErrorInfo.md (861b) +resources/tanstack-ai/reference/interfaces/GenerationFinishInfo.md (903b) +resources/tanstack-ai/reference/interfaces/GenerationMiddleware.md (4179b) +resources/tanstack-ai/reference/interfaces/GenerationMiddlewareContext.md (3202b) +resources/tanstack-ai/reference/interfaces/GenerationUsageInfo.md (476b) +resources/tanstack-ai/reference/interfaces/ImageAdapter.md (3614b) +resources/tanstack-ai/reference/interfaces/ImageGenerationOptions.md (2372b) +resources/tanstack-ai/reference/interfaces/ImageGenerationResult.md (1069b) +resources/tanstack-ai/reference/interfaces/ImagePart.md (981b) +resources/tanstack-ai/reference/interfaces/InternalToolCallState.md (2027b) +resources/tanstack-ai/reference/interfaces/IterationInfo.md (851b) +resources/tanstack-ai/reference/interfaces/JSONParser.md (734b) +resources/tanstack-ai/reference/interfaces/JSONSchema.md (7020b) +resources/tanstack-ai/reference/interfaces/LazyToolsConfig.md (937b) +resources/tanstack-ai/reference/interfaces/Logger.md (3423b) +resources/tanstack-ai/reference/interfaces/MCPToolSource.md (1888b) +resources/tanstack-ai/reference/interfaces/MediaInputMetadata.md (1220b) +resources/tanstack-ai/reference/interfaces/MessagesSnapshotEvent.md (939b) +resources/tanstack-ai/reference/interfaces/ModelCapabilities.md (1491b) +resources/tanstack-ai/reference/interfaces/ModelMessage.md (1562b) +resources/tanstack-ai/reference/interfaces/NormalizedSystemPrompt.md (931b) +resources/tanstack-ai/reference/interfaces/ProcessorResult.md (1174b) +resources/tanstack-ai/reference/interfaces/ProcessorState.md (1576b) +resources/tanstack-ai/reference/interfaces/ProviderTool.md (6973b) +resources/tanstack-ai/reference/interfaces/RealtimeAdapter.md (1526b) +resources/tanstack-ai/reference/interfaces/RealtimeAudioPart.md (1134b) +resources/tanstack-ai/reference/interfaces/RealtimeConnection.md (3619b) +resources/tanstack-ai/reference/interfaces/RealtimeError.md (861b) +resources/tanstack-ai/reference/interfaces/RealtimeEventPayloads.md (2379b) +resources/tanstack-ai/reference/interfaces/RealtimeImagePart.md (898b) +resources/tanstack-ai/reference/interfaces/RealtimeMessage.md (1806b) +resources/tanstack-ai/reference/interfaces/RealtimeSessionConfig.md (2961b) +resources/tanstack-ai/reference/interfaces/RealtimeTextPart.md (617b) +resources/tanstack-ai/reference/interfaces/RealtimeToken.md (1138b) +resources/tanstack-ai/reference/interfaces/RealtimeTokenAdapter.md (820b) +resources/tanstack-ai/reference/interfaces/RealtimeTokenOptions.md (496b) +resources/tanstack-ai/reference/interfaces/RealtimeToolCallPart.md (1361b) +resources/tanstack-ai/reference/interfaces/RealtimeToolResultPart.md (833b) +resources/tanstack-ai/reference/interfaces/ReasoningEncryptedValueEvent.md (683b) +resources/tanstack-ai/reference/interfaces/ReasoningEndEvent.md (614b) +resources/tanstack-ai/reference/interfaces/ReasoningMessageContentEvent.md (677b) +resources/tanstack-ai/reference/interfaces/ReasoningMessageEndEvent.md (638b) +resources/tanstack-ai/reference/interfaces/ReasoningMessageStartEvent.md (670b) +resources/tanstack-ai/reference/interfaces/ReasoningStartEvent.md (624b) +resources/tanstack-ai/reference/interfaces/ResolvedMediaPrompt.md (2133b) +resources/tanstack-ai/reference/interfaces/ResponseFormat.md (3275b) +resources/tanstack-ai/reference/interfaces/RunErrorEvent.md (1012b) +resources/tanstack-ai/reference/interfaces/RunFinishedEvent.md (1202b) +resources/tanstack-ai/reference/interfaces/RunStartedEvent.md (673b) +resources/tanstack-ai/reference/interfaces/ServerTool.md (6396b) +resources/tanstack-ai/reference/interfaces/StateDeltaEvent.md (637b) +resources/tanstack-ai/reference/interfaces/StateSnapshotEvent.md (954b) +resources/tanstack-ai/reference/interfaces/StepFinishedEvent.md (1622b) +resources/tanstack-ai/reference/interfaces/StepStartedEvent.md (1152b) +resources/tanstack-ai/reference/interfaces/StreamProcessorEvents.md (4589b) +resources/tanstack-ai/reference/interfaces/StreamProcessorOptions.md (1740b) +resources/tanstack-ai/reference/interfaces/StructuredOutputCompleteEvent.md (1962b) +resources/tanstack-ai/reference/interfaces/StructuredOutputMiddlewareConfig.md (2644b) +resources/tanstack-ai/reference/interfaces/StructuredOutputPart.md (2230b) +resources/tanstack-ai/reference/interfaces/StructuredOutputStartEvent.md (1504b) +resources/tanstack-ai/reference/interfaces/SummarizationOptions.md (1815b) +resources/tanstack-ai/reference/interfaces/SummarizationResult.md (863b) +resources/tanstack-ai/reference/interfaces/SummarizeAdapter.md (3004b) +resources/tanstack-ai/reference/interfaces/TTSAdapter.md (2359b) +resources/tanstack-ai/reference/interfaces/TTSOptions.md (2013b) +resources/tanstack-ai/reference/interfaces/TTSResult.md (1697b) +resources/tanstack-ai/reference/interfaces/TextAdapter.md (7404b) +resources/tanstack-ai/reference/interfaces/TextCompletionChunk.md (1289b) +resources/tanstack-ai/reference/interfaces/TextMessageContentEvent.md (934b) +resources/tanstack-ai/reference/interfaces/TextMessageEndEvent.md (618b) +resources/tanstack-ai/reference/interfaces/TextMessageStartEvent.md (641b) +resources/tanstack-ai/reference/interfaces/TextOptions.md (7667b) +resources/tanstack-ai/reference/interfaces/TextPart.md (800b) +resources/tanstack-ai/reference/interfaces/ThinkingPart.md (866b) +resources/tanstack-ai/reference/interfaces/Tool.md (6083b) +resources/tanstack-ai/reference/interfaces/ToolCall.md (1188b) +resources/tanstack-ai/reference/interfaces/ToolCallArgsEvent.md (878b) +resources/tanstack-ai/reference/interfaces/ToolCallEndEvent.md (1885b) +resources/tanstack-ai/reference/interfaces/ToolCallHookContext.md (1634b) +resources/tanstack-ai/reference/interfaces/ToolCallPart.md (1949b) +resources/tanstack-ai/reference/interfaces/ToolCallResultEvent.md (890b) +resources/tanstack-ai/reference/interfaces/ToolCallStartEvent.md (1604b) +resources/tanstack-ai/reference/interfaces/ToolConfig.md (270b) +resources/tanstack-ai/reference/interfaces/ToolDefinition.md (8644b) +resources/tanstack-ai/reference/interfaces/ToolDefinitionConfig.md (2352b) +resources/tanstack-ai/reference/interfaces/ToolDefinitionInstance.md (6535b) +resources/tanstack-ai/reference/interfaces/ToolInputAvailableEvent.md (1470b) +resources/tanstack-ai/reference/interfaces/ToolPhaseCompleteInfo.md (1962b) +resources/tanstack-ai/reference/interfaces/ToolRegistry.md (2622b) +resources/tanstack-ai/reference/interfaces/ToolResultPart.md (1100b) +resources/tanstack-ai/reference/interfaces/TranscriptionAdapter.md (2538b) +resources/tanstack-ai/reference/interfaces/TranscriptionOptions.md (2183b) +resources/tanstack-ai/reference/interfaces/TranscriptionResult.md (1948b) +resources/tanstack-ai/reference/interfaces/TranscriptionSegment.md (1499b) +resources/tanstack-ai/reference/interfaces/TranscriptionWord.md (795b) +resources/tanstack-ai/reference/interfaces/UIMessage.md (1258b) +resources/tanstack-ai/reference/interfaces/UIResourceEvent.md (1628b) +resources/tanstack-ai/reference/interfaces/UIResourcePart.md (1993b) +resources/tanstack-ai/reference/interfaces/UsageInfo.md (564b) +resources/tanstack-ai/reference/interfaces/VADConfig.md (964b) +resources/tanstack-ai/reference/interfaces/VideoAdapter.md (6295b) +resources/tanstack-ai/reference/interfaces/VideoGenerationOptions.md (2749b) +resources/tanstack-ai/reference/interfaces/VideoJobResult.md (761b) +resources/tanstack-ai/reference/interfaces/VideoPart.md (931b) +resources/tanstack-ai/reference/interfaces/VideoStatusResult.md (1246b) +resources/tanstack-ai/reference/interfaces/VideoUrlResult.md (1401b) +resources/tanstack-ai/reference/type-aliases/AGUIEvent.md (767b) +resources/tanstack-ai/reference/type-aliases/AGUIEventType.md (478b) +resources/tanstack-ai/reference/type-aliases/AIAdapter.md (438b) +resources/tanstack-ai/reference/type-aliases/AgentLoopStrategy.md (658b) +resources/tanstack-ai/reference/type-aliases/AnyAudioAdapter.md (419b) +resources/tanstack-ai/reference/type-aliases/AnyClientTool.md (501b) +resources/tanstack-ai/reference/type-aliases/AnyGenerationMiddleware.md (416b) +resources/tanstack-ai/reference/type-aliases/AnyImageAdapter.md (434b) +resources/tanstack-ai/reference/type-aliases/AnySummarizeAdapter.md (434b) +resources/tanstack-ai/reference/type-aliases/AnyTTSAdapter.md (408b) +resources/tanstack-ai/reference/type-aliases/AnyTextAdapter.md (421b) +resources/tanstack-ai/reference/type-aliases/AnyTool.md (423b) +resources/tanstack-ai/reference/type-aliases/AnyTranscriptionAdapter.md (482b) +resources/tanstack-ai/reference/type-aliases/AnyVideoAdapter.md (440b) +resources/tanstack-ai/reference/type-aliases/BeforeToolCallDecision.md (762b) +resources/tanstack-ai/reference/type-aliases/Capability.md (1173b) +resources/tanstack-ai/reference/type-aliases/CapabilityHandle.md (605b) +resources/tanstack-ai/reference/type-aliases/CapabilityProvider.md (561b) +resources/tanstack-ai/reference/type-aliases/ChatMiddlewarePhase.md (869b) +resources/tanstack-ai/reference/type-aliases/ConstrainedContent.md (665b) +resources/tanstack-ai/reference/type-aliases/ConstrainedModelMessage.md (691b) +resources/tanstack-ai/reference/type-aliases/ContentPart.md (915b) +resources/tanstack-ai/reference/type-aliases/ContentPartForInputModalitiesTypes.md (1021b) +resources/tanstack-ai/reference/type-aliases/ContentPartSource.md (504b) +resources/tanstack-ai/reference/type-aliases/DebugOption.md (477b) +resources/tanstack-ai/reference/type-aliases/DeepPartial.md (695b) +resources/tanstack-ai/reference/type-aliases/GeneratedAudio.md (531b) +resources/tanstack-ai/reference/type-aliases/GeneratedImage.md (421b) +resources/tanstack-ai/reference/type-aliases/GeneratedMediaSource.md (976b) +resources/tanstack-ai/reference/type-aliases/GenerationActivity.md (711b) +resources/tanstack-ai/reference/type-aliases/InferSchemaType.md (743b) +resources/tanstack-ai/reference/type-aliases/InferToolInput.md (590b) +resources/tanstack-ai/reference/type-aliases/InferToolName.md (397b) +resources/tanstack-ai/reference/type-aliases/InferToolOutput.md (597b) +resources/tanstack-ai/reference/type-aliases/InputModalitiesTypes.md (689b) +resources/tanstack-ai/reference/type-aliases/MCPConnectionPolicy.md (697b) +resources/tanstack-ai/reference/type-aliases/MediaInputRole.md (675b) +resources/tanstack-ai/reference/type-aliases/MediaPrompt.md (903b) +resources/tanstack-ai/reference/type-aliases/MediaPromptFor.md (790b) +resources/tanstack-ai/reference/type-aliases/MediaPromptModality.md (351b) +resources/tanstack-ai/reference/type-aliases/MediaPromptPart.md (615b) +resources/tanstack-ai/reference/type-aliases/MessagePart.md (462b) +resources/tanstack-ai/reference/type-aliases/ModalitiesArrayToUnion.md (491b) +resources/tanstack-ai/reference/type-aliases/Modality.md (520b) +resources/tanstack-ai/reference/type-aliases/ModelInputModalitiesByName.md (554b) +resources/tanstack-ai/reference/type-aliases/RealtimeErrorCode.md (396b) +resources/tanstack-ai/reference/type-aliases/RealtimeEvent.md (429b) +resources/tanstack-ai/reference/type-aliases/RealtimeEventHandler.md (558b) +resources/tanstack-ai/reference/type-aliases/RealtimeMessagePart.md (422b) +resources/tanstack-ai/reference/type-aliases/RealtimeMode.md (324b) +resources/tanstack-ai/reference/type-aliases/RealtimeStatus.md (352b) +resources/tanstack-ai/reference/type-aliases/SchemaInput.md (1112b) +resources/tanstack-ai/reference/type-aliases/StreamChunk.md (329b) +resources/tanstack-ai/reference/type-aliases/StreamChunkType.md (341b) +resources/tanstack-ai/reference/type-aliases/StructuredOutputStream.md (1817b) +resources/tanstack-ai/reference/type-aliases/SystemPrompt.md (1845b) +resources/tanstack-ai/reference/type-aliases/ToolCallState.md (420b) +resources/tanstack-ai/reference/type-aliases/ToolExecuteFunction.md (765b) +resources/tanstack-ai/reference/type-aliases/ToolExecutionContext.md (1504b) +resources/tanstack-ai/reference/type-aliases/ToolOutputState.md (267b) +resources/tanstack-ai/reference/type-aliases/ToolResultState.md (325b) +resources/tanstack-ai/reference/type-aliases/UsageTotals.md (392b) +resources/tanstack-ai/reference/type-aliases/WireMessage.md (304b) +resources/tanstack-ai/reference/variables/DISCOVERY_TOOL_NAME.md (650b) +resources/tanstack-ai/reference/variables/defaultJSONParser.md (338b) +resources/tanstack-ai/structured-outputs/multi-turn.md (11768b) +resources/tanstack-ai/structured-outputs/one-shot.md (11179b) +resources/tanstack-ai/structured-outputs/overview.md (8368b) +resources/tanstack-ai/structured-outputs/streaming.md (11093b) +resources/tanstack-ai/structured-outputs/with-tools.md (8862b) +resources/tanstack-ai/tools/client-tools.md (14104b) +resources/tanstack-ai/tools/lazy-tool-discovery.md (9667b) +resources/tanstack-ai/tools/mcp-codegen.md (4333b) +resources/tanstack-ai/tools/mcp-managed.md (11869b) +resources/tanstack-ai/tools/mcp-manual.md (11045b) +resources/tanstack-ai/tools/mcp.md (17732b) +resources/tanstack-ai/tools/provider-skills.md (5403b) +resources/tanstack-ai/tools/provider-tools.md (4596b) +resources/tanstack-ai/tools/server-tools.md (12038b) +resources/tanstack-ai/tools/tool-approval.md (9057b) +resources/tanstack-ai/tools/tool-architecture.md (14088b) +resources/tanstack-ai/tools/tools.md (13883b) +resources/turso/features/ai-and-embeddings.mdx (17541b) +resources/turso/features/attach-database.mdx (4105b) +resources/turso/features/branching.mdx (3172b) +resources/turso/features/data-edge.mdx (2032b) +resources/turso/features/embedded-replicas/introduction.mdx (7892b) +resources/turso/features/embedded-replicas/rust/railway.mdx (2217b) +resources/turso/features/embedded-replicas/with-akamai.mdx (2438b) +resources/turso/features/embedded-replicas/with-fly.mdx (2161b) +resources/turso/features/embedded-replicas/with-koyeb.mdx (2143b) +resources/turso/features/embedded-replicas/with-railway.mdx (2599b) +resources/turso/features/embedded-replicas/with-render.mdx (2062b) +resources/turso/features/multi-db-schemas.mdx (5474b) +resources/turso/features/platform-api.mdx (1103b) +resources/turso/features/point-in-time-recovery.mdx (2350b) +resources/turso/features/sqlite-extensions.mdx (3081b) +resources/turso/guides/agent-databases.mdx (6677b) +resources/turso/guides/ai-memory.mdx (5627b) +resources/turso/guides/code-indexing.mdx (8207b) +resources/turso/guides/content-caching.mdx (5135b) +resources/turso/guides/secrets-vault.mdx (6335b) +resources/turso/guides/vector-search.mdx (7145b) +resources/turso/sdk/activerecord/guides/rails.mdx (2476b) +resources/turso/sdk/activerecord/quickstart.mdx (3629b) +resources/turso/sdk/authentication.mdx (1165b) +resources/turso/sdk/authorization.mdx (1969b) +resources/turso/sdk/authorization/fine-grained-permissions.mdx (1742b) +resources/turso/sdk/authorization/jwks.mdx (1960b) +resources/turso/sdk/authorization/tokens.mdx (1458b) +resources/turso/sdk/c/examples.mdx (1918b) +resources/turso/sdk/c/quickstart.mdx (3767b) +resources/turso/sdk/c/reference.mdx (4561b) +resources/turso/sdk/flutter/examples.mdx (86b) +resources/turso/sdk/flutter/integrations/drift.mdx (1528b) +resources/turso/sdk/flutter/quickstart.mdx (3670b) +resources/turso/sdk/flutter/reference.mdx (7368b) +resources/turso/sdk/go/examples.mdx (83b) +resources/turso/sdk/go/quickstart.mdx (4982b) +resources/turso/sdk/go/reference.mdx (7847b) +resources/turso/sdk/http/guides/flutter.mdx (2303b) +resources/turso/sdk/http/quickstart.mdx (7614b) +resources/turso/sdk/http/reference.mdx (14906b) +resources/turso/sdk/introduction.mdx (5898b) +resources/turso/sdk/java/quickstart.mdx (204b) +resources/turso/sdk/java/reference.mdx (137b) +resources/turso/sdk/kotlin/quickstart.mdx (2781b) +resources/turso/sdk/kotlin/reference.mdx (3174b) +resources/turso/sdk/php/examples.mdx (218b) +resources/turso/sdk/php/guides/laravel.mdx (4876b) +resources/turso/sdk/php/orm/doctrine-dbal.mdx (10331b) +resources/turso/sdk/php/quickstart.mdx (3257b) +resources/turso/sdk/php/reference.mdx (4218b) +resources/turso/sdk/python/examples.mdx (95b) +resources/turso/sdk/python/guides/flask.mdx (2218b) +resources/turso/sdk/python/orm/sqlalchemy.mdx (2592b) +resources/turso/sdk/python/quickstart.mdx (3873b) +resources/turso/sdk/python/reference.mdx (4719b) +resources/turso/sdk/ruby/examples.mdx (1762b) +resources/turso/sdk/ruby/quickstart.mdx (2226b) +resources/turso/sdk/rust/examples.mdx (95b) +resources/turso/sdk/rust/guides/actix.mdx (2289b) +resources/turso/sdk/rust/guides/axum.mdx (3182b) +resources/turso/sdk/rust/guides/rocket.mdx (2032b) +resources/turso/sdk/rust/guides/tauri.mdx (3314b) +resources/turso/sdk/rust/orm/toasty.mdx (3808b) +resources/turso/sdk/rust/quickstart.mdx (5551b) +resources/turso/sdk/rust/reference.mdx (9494b) +resources/turso/sdk/swift/quickstart.mdx (2910b) +resources/turso/sdk/swift/reference.mdx (3349b) +resources/turso/sdk/ts/examples.mdx (121b) +resources/turso/sdk/ts/guides/astro.mdx (1451b) +resources/turso/sdk/ts/guides/elysia.mdx (1243b) +resources/turso/sdk/ts/guides/hono.mdx (1235b) +resources/turso/sdk/ts/guides/nextjs.mdx (1893b) +resources/turso/sdk/ts/guides/nuxt.mdx (2242b) +resources/turso/sdk/ts/guides/quasar.mdx (2066b) +resources/turso/sdk/ts/guides/qwik.mdx (1746b) +resources/turso/sdk/ts/guides/remix.mdx (1459b) +resources/turso/sdk/ts/guides/sveltekit.mdx (1871b) +resources/turso/sdk/ts/integrations/sentry.mdx (1541b) +resources/turso/sdk/ts/orm/drizzle.mdx (5884b) +resources/turso/sdk/ts/orm/prisma.mdx (2756b) +resources/turso/sdk/ts/quickstart.mdx (4554b) +resources/turso/sdk/ts/reference.mdx (15776b) +resources/turso/sql-reference/cli/command-line-options.mdx (3962b) +resources/turso/sql-reference/cli/getting-started.mdx (3231b) +resources/turso/sql-reference/cli/shell-commands.mdx (8152b) +resources/turso/sql-reference/compatibility.mdx (2033b) +resources/turso/sql-reference/data-types.mdx (9833b) +resources/turso/sql-reference/experimental-features.mdx (4024b) +resources/turso/sql-reference/expressions.mdx (12635b) +resources/turso/sql-reference/extensions.mdx (10558b) +resources/turso/sql-reference/functions/aggregate.mdx (14233b) +resources/turso/sql-reference/functions/array.mdx (14778b) +resources/turso/sql-reference/functions/date-time.mdx (16145b) +resources/turso/sql-reference/functions/fts.mdx (12226b) +resources/turso/sql-reference/functions/json.mdx (17584b) +resources/turso/sql-reference/functions/math.mdx (12624b) +resources/turso/sql-reference/functions/scalar.mdx (17385b) +resources/turso/sql-reference/functions/vector.mdx (9994b) +resources/turso/sql-reference/functions/window.mdx (7623b) +resources/turso/sql-reference/multiprocess-access.mdx (8290b) +resources/turso/sql-reference/pragmas.mdx (12276b) +resources/turso/sql-reference/statements/alter-table.mdx (8006b) +resources/turso/sql-reference/statements/analyze.mdx (2242b) +resources/turso/sql-reference/statements/attach-database.mdx (2328b) +resources/turso/sql-reference/statements/create-domain.mdx (9106b) +resources/turso/sql-reference/statements/create-index.mdx (6229b) +resources/turso/sql-reference/statements/create-materialized-view.mdx (3257b) +resources/turso/sql-reference/statements/create-table.mdx (12994b) +resources/turso/sql-reference/statements/create-trigger.mdx (8401b) +resources/turso/sql-reference/statements/create-type.mdx (20132b) +resources/turso/sql-reference/statements/create-view.mdx (2704b) +resources/turso/sql-reference/statements/create-virtual-table.mdx (3518b) +resources/turso/sql-reference/statements/delete.mdx (3401b) +resources/turso/sql-reference/statements/detach-database.mdx (1339b) +resources/turso/sql-reference/statements/drop-domain.mdx (2548b) +resources/turso/sql-reference/statements/drop-index.mdx (1570b) +resources/turso/sql-reference/statements/drop-table.mdx (1835b) +resources/turso/sql-reference/statements/drop-trigger.mdx (1676b) +resources/turso/sql-reference/statements/drop-type.mdx (2034b) +resources/turso/sql-reference/statements/drop-view.mdx (1320b) +resources/turso/sql-reference/statements/explain.mdx (3989b) +resources/turso/sql-reference/statements/insert.mdx (8669b) +resources/turso/sql-reference/statements/replace.mdx (3623b) +resources/turso/sql-reference/statements/select.mdx (15339b) +resources/turso/sql-reference/statements/transactions.mdx (5615b) +resources/turso/sql-reference/statements/update.mdx (5388b) +resources/turso/sql-reference/statements/upsert.mdx (6447b) +resources/turso/sql-reference/statements/vacuum.mdx (8424b) +resources/turso/sync/checkpoint.mdx (2031b) +resources/turso/sync/conflict-resolution.mdx (1027b) +resources/turso/sync/local-sync-server.mdx (4181b) +resources/turso/sync/partial.mdx (34051b) +resources/turso/sync/usage.mdx (9303b) +scripts/sync-resources.sh (1521b) +scripts/windows-singleton/assets/ASPIRE-LICENSE.TXT (1116b) +scripts/windows-singleton/assets/aspire-dashboard.json (252b) +scripts/windows-singleton/build.ts (6407b) +scripts/windows-singleton/entries/workers-api.ts (260b) +scripts/windows-singleton/entries/workers.ts (762b) +services/_shared/plugin-service-context.ts (3177b) +services/eischat/deno.json (1038b) +services/eischat/src/builtin-skills.ts (24231b) +services/eischat/src/channel-client.ts (1285b) +services/eischat/src/embeddings.ts (12496b) +services/eischat/src/embeddings_test.ts (4748b) +services/eischat/src/jobs.ts (3734b) +services/eischat/src/main.ts (702b) +services/eischat/src/router.ts (847b) +services/eischat/src/routers/channel.ts (27587b) +services/eischat/src/routers/health.ts (432b) +services/eischat/src/routers/skills.ts (11829b) +services/eischat/src/routers/v1.ts (3157b) +services/eischat/src/sharing.ts (5323b) +services/eischat/src/skills-git.ts (11772b) +services/eischat/src/vision.ts (7609b) +services/eischat/src/vision_test.ts (3046b) +streams/mod.ts (521b) +streams/notifications-stream.ts (2112b) +tools/excalidraw-mcp.ts (24047b) +tools/legacy-archeo-mcp.ts (49341b) +tools/mcp-http.ts (6551b) +workers/deno.json (81b) +workers/job-definitions.ts (4286b) +workers/jobs/embed-document.ts (5153b) +workers/jobs/health-check.ts (424b) +workers/jobs/transcribe-image.ts (5508b) +workers/mod.ts (250b) +workers/runtime.ts (2698b) +workers/tasks/validate-payload.ts (352b) \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-327.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-327.json new file mode 100644 index 000000000..c6b805636 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-327.json @@ -0,0 +1,175 @@ +{ + "url": "https://api.github.com/repos/rickylabs/netscript/issues/327", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/327/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/327/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/327/events", + "html_url": "https://github.com/rickylabs/netscript/issues/327", + "id": 4799514045, + "node_id": "I_kwDOSxcnO88AAAABHhLFvQ", + "number": 327, + "title": "epic: NetScript enterprise deployment framework (cloud-agnostic + bare-metal, CLI + Aspire)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11283930885, + "node_id": "LA_kwDOSxcnO88AAAACoJMfBQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:umbrella", + "name": "type:umbrella", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11333860070, + "node_id": "LA_kwDOSxcnO88AAAACo4z65g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:aspire", + "name": "area:aspire", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11403888283, + "node_id": "LA_kwDOSxcnO88AAAACp7mGmw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:deployment", + "name": "epic:deployment", + "color": "5319E7", + "default": false, + "description": "Enterprise deployment framework epic" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/2", + "html_url": "https://github.com/rickylabs/netscript/milestone/2", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/2/labels", + "id": 16635580, + "node_id": "MI_kwDOSxcnO84A_da8", + "number": 2, + "title": "0.0.1-stable", + "description": "0.0.1 stable. Acceptance criteria LOCKED (packages/bench/POSITIONING.md section 4, per #353 + user decisions on S1/S2). Stable extends beta with the falsifiable positioning verdict:\n1. All beta criteria hold.\n2. Competitor-PAIRED run — at least one measured paired run (NetScript vs >=1 D2 alternative) where NetScript is not worse on test_pass_rate AND strictly better on >=1 efficiency axis (turns_to_green / cost / wall_seconds). Moved here from beta per S1 decision (blocked on D2/D5/OQ2).\n3. Breadth — multi-task coverage (>=2 distinct build tasks) and N>=3 runs per cell for a stable median.\n4. Full rubric — composite scoring complete (0.20 reserve retired; bench Slice 5 rebind onto the sound baseContract landed).\nNote: allow-slow-types remains a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305).", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 5, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-12T16:58:59Z", + "due_on": null, + "closed_at": null + }, + "comments": 5, + "created_at": "2026-07-03T01:52:41Z", + "updated_at": "2026-07-06T09:06:00Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 1, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## NetScript Enterprise Deployment Framework\n\nTurn NetScript into an **enterprise-grade, cloud-agnostic AND bare-metal-compatible deployment framework**, with **first-class support through BOTH the CLI and Aspire**. NetScript is Deno-native, so Deno deployment targets (especially the new **Deno Deploy**) are first-class strategic surface. The whole design is grounded on Aspire's publish/deploy model.\n\nThis is a **child epic of the Road-to-0.0.1-stable umbrella** and must not block it — it links in as a child once filed.\n\nResearch corpus (77 cached sources), the full architecture spec, the SERVY assessment, and the decision/gap tracker were produced under the harness run `epic-deployment-aggregation` (branch `research/deployment-aggregation`). This issue embeds the load-bearing conclusions inline.\n\n---\n\n### How NetScript maps onto Aspire's deploy model\n- **Two-command spine**: `aspire publish` emits static artifacts (compose/Helm/Bicep) for review/GitOps; `aspire deploy` resolves params + applies. NetScript's CLI wraps both for cloud targets and drives bare-metal directly.\n- **Compute-environment (compose / k8s / AKS / ACA / App Service) is orthogonal to Aspire-environment (dev/staging/prod)**.\n- **Pipelines are step-graphs** (`AddStep` / `WithPipelineStepFactory`, replacing the deprecated `WithPublishingCallback`). **The TypeScript AppHost drives the full container/cloud lane today** — `addContainer('denoland/deno:2')`/`addDockerfile`, `addDockerComposeEnvironment`/`addKubernetesEnvironment`/`addAzureContainerAppEnvironment`, per-resource `publishAsDockerComposeService`/`publishAsKubernetesService`/`publishAsAzureContainerApp` callbacks, and app-level `pipeline.addStep(...)` are all TS-expressible (verified via the `?aspire-lang=typescript` doc tab). The only genuinely C#-only capability is authoring brand-new custom resource *types*, which NetScript's container lane does not need.\n- **Deno app publish shape** is realized with the built-in TS container primitives above (`PublishAsNodeServer` is Node-runtime-specific and won't run Deno). The ada2a5 `AddDenoApp` + `denoland/deno:2` single-stage publish + `OTEL_DENO` is **optional DX sugar on top, not a prerequisite**.\n- Deployment state is cached/idempotent (`~/.aspire/deployments/{sha}/{env}.json`); CI/CD is two-layer (outer GH-Actions/AzDO pipeline invokes the inner Aspire step-graph non-interactively).\n\n### CLI surface (generalized beyond today's Windows-only tree)\n- Evolve config `deploy.windows.*` → **`deploy.targets.*`** (multi-target).\n- `netscript deploy ` router: cloud targets wrap `aspire publish`/`aspire deploy`; bare-metal targets drive an `OsServicePort` directly.\n\n### Bare-metal successor (SERVY verdict: MODERNIZE)\nSERVY upstream (aelassas/servy, C#/MIT, v8.5) is healthy — the rot is entirely NetScript-side (Windows-locked, doc/code divergence, no rollback/multi-instance, weak secrets, fake-only tests, dead `docker`/`script` config, `deno:2.5` pin). Reuse the sound `ProcessPort`/`WindowsServicePort` seam and **generalize `WindowsServicePort` → `OsServicePort`** with `servy` (Windows) + `systemd` (Linux) adapters, on a `deno compile` single-binary artifact, adding rollback / multi-instance / secrets / OTEL / health-gate.\n\n---\n\n### Per-target readiness & tier proposal\n\n| Target | Model | Driven via | First-party Deno | Proposed tier |\n| --- | --- | --- | --- | --- |\n| Deno Deploy (new platform) | deno-native source build | CLI → `deno deploy` / GitHub-push | Yes (first-party) | **1 (beta)** |\n| `deno compile` bare-metal (Linux/Windows) | single binary + systemd/servy | CLI → `OsServicePort` | Yes (deno-native) | **1 (beta)** |\n| Docker / Compose (self-host) | image + compose | CLI → `aspire publish/deploy` (TS AppHost) | TS `addContainer`/`publishAsDockerComposeService` (ada2a5 = optional DX) | **1 (beta)** |\n| Kubernetes | generated manifests/Helm | CLI → `aspire publish` (TS AppHost) | TS `addKubernetesEnvironment`/`publishAsKubernetesService` (ada2a5 = optional DX) | 2 (stable) |\n| Azure ACA / App Service / AKS | Aspire compute-env | CLI → `aspire deploy` (TS AppHost) | TS `addAzureContainerAppEnvironment`/`publishAsAzureContainerApp` (ada2a5 = optional DX) | 2 (stable) |\n| GCP Cloud Run / Koyeb / DigitalOcean / Render | Docker image / droplet | CLI emits; provider CLI | Docker path (no native) | 2 (stable) |\n| Sevalla / Dokploy / Coolify | Docker / self-host compose | CLI emits compose | no native Deno | 3 (track) |\n| Vercel / Cloudflare / AWS Lambda | unofficial runtime / isolate / container | RFC-14 Nitro unified-mode | not first-party | 3 (track) |\n\n### Watch-item verdicts\n- **`deno compile` single-binary — ADOPT NOW** (mature 5-triple cross-compile, asset embedding; the bare-metal artifact).\n- **`deno desktop` — TRACK** (v2.9 VFS + `Deno.autoUpdate`; but code signing/notarization not automated).\n- **Pulumi #3838 (Deno provider, 0.140) — TRACK** (0.140 milestone = intent, not shipped; real blocker is gRPC-server-in-Deno, denoland/deno#23714).\n- **Nitro `deno_server` preset — TRACK** (still needs `--unstable`; central to RFC-14 unified-mode).\n- **RFC-14 unified-mode — PRODUCT DECISION** (Nitro v3 + oRPC + Fresh 2, mode-parity, sagas excluded, ~3-5 months) — see open decisions.\n\n### Critical path (corrected 2026-07-03)\n**There is no upstream hard dependency on the critical path.** The earlier \"the Aspire container/cloud lane is gated on the ada2a5 `AddDenoApp` seam because custom publish steps are C#-only\" finding was an artifact of reading only the default C# doc tab and is **substantially false** — re-verifying the `?aspire-lang=typescript` tab shows the TS AppHost drives the whole container lane today (evidence: `sources/aspire/*--ts-tab.md`). **Phases 0-3 (config contract, bare-metal successor, Deno Deploy adapter, AND the Aspire container lane) all have no upstream blocker and can proceed in parallel.** ada2a5 `AddDenoApp` becomes an optional DX enhancement to fold in later (TRACK). The only capability that remains C#-only — authoring brand-new custom resource *types* — is not needed by this lane.\n\n---\n\n### Product decisions — RESOLVED (2026-07-03, delegated to epic supervisor)\nThe user delegated all six with a prioritize-don't-ship-everything mandate. These are calls, not questions; all reversible.\n\n| # | Decision | Verdict | Milestone |\n|---|----------|---------|-----------|\n| D1 | RFC-14 unified-mode (tier-3 serverless via Nitro) | **WATCH / separate track — not v1.** 3-5mo, distinct arch, excludes sagas, `--unstable` Nitro preset; Aspire+Deno Deploy already give a strong cloud story without it. | deferred (watch) |\n| D2 | Flagship one-click | **Deno Deploy = beta marquee** (deno-native, no Dockerfile, shortest path, Deno-team play); **Aspire Docker/Compose ships alongside in beta** as the cloud-agnostic proof; k8s/Azure = stable. | 0.0.1-beta |\n| D3 | Bare-metal hardening line | **v1 = systemd + `deno compile` + atomic rollback + health-gated activation + `OTEL_DENO` + restricted-perm env-file secrets.** Defer multi-instance/HA + external secret store to stable. | beta / stable split |\n| D4 | `deno compile` signing | **Accept manual/documented for v1; do not block.** Cross-platform signing is platform-specific scope; add a pipeline hook now, automate at stable. | beta (doc) / stable (auto) |\n| D5 | `deploy.windows.*` migration | **CLEAN BREAK to `deploy.targets.*` — no back-compat alias** (user override 2026-07-03: \"we're alpha, breaking changes are allowed, go production-grade directly\"). Windows lane re-keyed to `deploy.targets.windows` + one-line migration note. | 0.0.1-beta |\n| D6 | Pulumi IaC adapter | **PURE WATCH — not a planned lane.** #3838 is OPEN + `blocked` (gRPC-server-in-Deno `denoland/deno#23714` unshipped); Aspire already covers IaC (Bicep/Helm/compose). | deferred (watch) |\n\nStrategic plays (informational, not blocking): Deno Deploy first-class support = Deno-team play (D2 marquee); ada2a5 `AddDenoApp` = Aspire-team play (folded into the Aspire lane as optional DX when it lands). **No `NEEDS USER:` items** — all six decided (D5 now a user-overridden clean break); D2 positioning is the most product-facing and cheaply revisitable.\n\n### Priority ordering\n**0.0.1-beta (tier-1):** `deploy.targets.*` contract (clean break, no windows alias) · deployment doctrine archetype · `OsServicePort`+`SystemdAdapter`+`deno compile`+rollback+health-gate+OTEL+basic secrets · **Deno Deploy adapter (marquee)** · Aspire Docker/Compose via TS AppHost · docs/code divergence fix.\n**0.0.1-stable (tier-2):** k8s + Azure via TS AppHost · Docker-image providers (Cloud Run/Koyeb/Render/DigitalOcean) · CI/CD template gen + state/secret hardening · bare-metal HA + external secret store + signing automation · one-click convergence + release-skill.\n**Watch (deliberately not v1):** RFC-14 unified-mode + Nitro preset (D1) · tier-3 serverless (Vercel/CF/Lambda) · Pulumi #3838 (D6) · exotic self-host (Sevalla/Dokploy/Coolify — generic compose emit) · ada2a5 `AddDenoApp` (optional DX fold-in) · `deno desktop` (reference only).\n\n---\n\n### Sub-issue slices (filed 2026-07-03 — `[Deploy-Sx]`, grouped by phase)\n\n**0.0.1-beta.1 (tier-1):**\n- [x] #337 **[S1]** `deploy.targets.*` config contract — clean break, no windows alias (Phase 0, D5) · `wave:v1-min`\n- [x] #338 **[S2]** Deployment target-adapter archetype doctrine entry (Phase 0; coordinate with #305) · `wave:v1-min`\n- [x] #344 **[S8]** Fix docs/code divergence (`deploy.md` + `cli-deploy-artifacts-missing`) (Phase 0) · `wave:v1-min`\n- [x] #339 **[S3]** `WindowsServicePort` → `OsServicePort` + `SystemdAdapter` (Phase 1) · `wave:v1`\n- [x] #340 **[S4]** `deno compile` single-binary bare-metal artifact — manual signing (Phase 1, D4) · `wave:v1`\n- [x] #341 **[S5]** Bare-metal hardening (beta): rollback + health-gate + `OTEL_DENO` + basic secrets (Phase 1, D3) · `wave:v1`\n- [x] #342 **[S6]** Deno Deploy tier-1 adapter — **MARQUEE** (Phase 2, D2) · `priority:p0` · `wave:v1`\n- [x] #343 **[S7]** Aspire Docker/Compose lane via TS AppHost (Phase 3a; not blocked on #320) · `wave:v1`\n\n**0.0.1-stable (tier-2):**\n- [ ] #345 **[S9]** Bare-metal enterprise hardening (stable): HA + external secret store + signing automation (D3/D4)\n- [ ] #346 **[S10]** Aspire Kubernetes + Azure + Docker-image providers (Cloud Run/Koyeb/Render/DO) (Phase 3b)\n- [x] #347 **[S11]** CI/CD template generation + state/secret hardening (Phase 4)\n- [ ] #348 **[S12]** One-click convergence + release-skill integration (Phase 5)\n\n**Backlog / Triage (watch — deliberately not v1):**\n- [ ] #349 **[S13]** WATCH: RFC-14 unified-mode + Nitro `deno_server` preset — tier-3 serverless (D1)\n- [ ] #350 **[S14]** WATCH: Pulumi #3838 Deno provider — IaC adapter feasibility (D6)\n\n---\n\n### TIER-4 — Desktop / single-process / offline-first (NEW — milestone `0.0.1-beta.8` core, `0.0.1-stable` hardening; low priority; **ships FULLY as one tier — no single-process-early / desktop-later split**)\n\nNetScript apps shippable to end-user devices as a 1-click, offline-first desktop package, running the backend **in-process** (true single-process) rather than as separate loopback processes. Grounded in the completed eis-chat `deno desktop` spike (`docs/DESKTOP-SHELL.md`, option (b) shipped in prod → option (c) true single-process target). This reclassifies desktop out of the earlier `deno desktop — TRACK` watch-item posture into a first-class Tier-4.\n\n**Precursor (must land before beta.8):**\n- [ ] #451 **[#E1]** `@netscript/sdk` in-process link-mode adapter (`createInProcessClientLink` + `ServiceClientTransport` switch + in-process registry). Unblocks true single-process; the server-side `ServiceApp.fetch()` mount seam already ships. *(Strikes the mis-referenced \"172a-2 service-base-seam\" dependency — PR #172 is merged CLI type-soundness, unrelated. See drift E1.)*\n\n**beta.8 core (ship together):**\n- [ ] #452 **[#E2]** desktop app-type in the Aspire generator (folds #375, promoted from Backlog/Triage p3) — option (b) desktop shell as a first-class generator primitive.\n- [ ] #453 **[#E3]** tursodb single-writer relocation + in-process composition root — per-user data dir, `build()` in the desktop process, sole lock holder. Avoids the native-addon-in-VFS spike.\n- [ ] #454 **[#E4]** true single-process mode — dashboard wired through the link-mode adapter in the packaged binary (option (c)). Deps #451 + #453.\n- [ ] #455 **[#E5]** offline-first — Turso Sync (`pull`/`push`, last-push-wins + `transform`) in the single-process host.\n- [ ] #456 **[#E6]** 1-click packaging + release/update server — `deno desktop` cross-compile, `latest.json` + bsdiff + Ed25519-signed manifests, Windows stages-not-applies manual-apply fallback.\n\n**stable (hardening + gate):**\n- [ ] #457 **[#E7]** desktop/single-process deploy-e2e — extends #394's bare-metal-first deploy-e2e harness to the desktop target. Foundation: #393 (compose target registration), #394 (deploy-e2e).\n- [ ] #458 **[#E8]** signing automation — macOS Developer-ID + `notarytool`; Windows `signtool` (D4: manual/documented for v1, automate at stable).\n\n**Naming hygiene:** #349 (RFC-14 tier-3 serverless + Nitro `deno_server`) remains a **WATCH sibling** here — it is a *different* \"unified\" sense (serverless bundling), **not** merged into the desktop single-process scope. See #371/#372 for the KV-layer \"unified\" sense (already solved).\n\n---\n\nThe full phased execution plan (per-phase goals, deliverables, DAG, acceptance gates) is in the pinned **PLAN** comment below.\n\n---\n\nGrounded on 77 cached sources (Aspire deployment suite, Deno Deploy/sandbox, 10 providers, watch items, netscript-start POC). Full spec: `deployment-architecture-spec.md`; SERVY assessment: `servy-assessment.md`; decision/gap tracker: `decision-gap-tracker.md` — harness run `epic-deployment-aggregation`.\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/327/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/327/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-400.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-400.json new file mode 100644 index 000000000..dd3f93292 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-400.json @@ -0,0 +1,193 @@ +{ + "url": "https://api.github.com/repos/rickylabs/netscript/issues/400", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/400/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/400/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/400/events", + "html_url": "https://github.com/rickylabs/netscript/issues/400", + "id": 4811834015, + "node_id": "I_kwDOSxcnO88AAAABHs7Cnw", + "number": 400, + "title": "epic: NetScript Dev Dashboard — the Aspire/Scalar satellite that drives the framework (ships as a plugin, beta.6)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11283930885, + "node_id": "LA_kwDOSxcnO88AAAACoJMfBQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:umbrella", + "name": "type:umbrella", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11333860070, + "node_id": "LA_kwDOSxcnO88AAAACo4z65g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:aspire", + "name": "area:aspire", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898770, + "node_id": "LA_kwDOSxcnO88AAAACp3ymkg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:fresh-ui", + "name": "area:fresh-ui", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11421949012, + "node_id": "LA_kwDOSxcnO88AAAACqM0cVA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:dev-dashboard", + "name": "epic:dev-dashboard", + "color": "5319e7", + "default": false, + "description": "Dev Dashboard epic (Spine-1 headline, ships as a plugin)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/15", + "html_url": "https://github.com/rickylabs/netscript/milestone/15", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/15/labels", + "id": 16847224, + "node_id": "MI_kwDOSxcnO84BARF4", + "number": 15, + "title": "0.0.1-beta.13", + "description": "Dev Dashboard epic (#400) — postponed from beta.10 so beta.10 focuses on agentic-combo CLI coverage + bugfixes/stabilization.", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 33, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-16T16:10:40Z", + "updated_at": "2026-07-16T22:02:57Z", + "due_on": null, + "closed_at": null + }, + "comments": 7, + "created_at": "2026-07-05T06:17:08Z", + "updated_at": "2026-07-16T16:11:04Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\n\nA DX-oriented dev dashboard shipping as `plugins/dashboard` + `packages/plugin-dashboard-core` on `@netscript/fresh-ui`. It is a **satellite of Aspire's control surface, not a rival** — and it is **how you drive the framework**: it renders only NetScript-domain state Aspire and Scalar cannot see, mirrors the CLI's management verbs through the UI, and deep-links back out to Aspire/Scalar for everything they already own.\n\n**Rescoped 2026-07-06 (owner mandate, amended same day).** The pass-1 direction duplicated Aspire/Scalar surfaces. The rescope keeps three pillars from the original seed research: **Observe** (only-NetScript state), **Manage** (Appwrite-style per-capability console mirroring the CLI), **Follow** (Encore-model live seam-flow, never re-rendered OTLP).\n\n## DX thesis\n\nAnswer the questions no existing tool can: *\"is my NetScript app wired the way I declared it, what is my runtime doing right now at the primitive level, what did this request actually cause, and let me act on it without leaving the browser.\"*\n\n- **Aspire owns:** resources, console/structured logs, raw traces, metrics, health, process lifecycle.\n- **Scalar owns:** API reference, schemas, try-it, code samples.\n- **The dashboard owns:** primitive run-state (executions/attempts, saga instances incl. `compensating`, trigger firings, stream deliveries), the runtime override/config layer **including gated write-back**, plugin-registry wiring + doctor + contribution axes, contract provenance/coverage/duality, route→contract binding, codegen/scaffold state (migrations, drift), **the per-capability management loop (create → configure(tabs) → monitor)**, and **the live request journey across framework seams (S13)**.\n\n## Authoritative screen set (supersedes the pass-1 DDX panel list)\n\n- **S1 Shell & Wiring Home** — #415 (v2: + quick-action strip mirroring top CLI verbs)\n- **S2 Config Resolution & Topology Hand-off** — #416 (v2: + live-traffic edge overlay, Encore Flow model)\n- **S3 Runtime-Config Monitor & Control** ⚑ flagship — #551 (DDX-20, new; v2: write-back gated on #556, beta.7)\n- **S4 Service & Contract Catalog** — #417 (provenance/coverage/duality only; no try-it)\n- **S5 Plugin Control** (dogfood centerpiece) — #420 (v2: + install/scaffold entry points, marketplace-lite)\n- **S6 Run Inspector + NetScript run-overlay** — #419 (run-centric)\n- **S7–S10 Workers / Sagas / Triggers / Streams consoles** — #428 #429 #430 #431 (v2: each completes the create→configure→monitor→act management loop)\n- **S11 DB Migrations & Drift** — #552 (DDX-21, new; beta.6-if-cheap; migrate/seed actions)\n- **S12 Dead-Letter Queues** — #553 (DDX-22, new; wave:defer, gated on thin API slices)\n- **S13 Live Flow — request journey** ⚑ flagship #2 — #418 (v2 REWRITE, was pass-1 waterfall: now the seam-event causal chain — request → payload → job → saga → fan-out — with per-node Aspire out-links)\n\n## Acceptance lines (MANDATORY, gate every slice)\n\n1. **Non-duplication.** No dashboard screen may render, as an owned surface: an OTLP trace waterfall / span-bar gantt, a structured/console log tail, a metrics chart, a resource start/stop/restart panel, or an OpenAPI operation list / try-it console. Each is Aspire's or Scalar's job and MUST be a deep-link out. Every merged panel must pass **\"why can't this just deep-link to Aspire/Scalar?\"** with a NetScript-only answer recorded in its issue — only-NetScript *state*, only-NetScript *action* (CLI-mirroring), or framework-*seam semantics* raw OTLP cannot express.\n2. **One generator, two callers.** Every dashboard mutation invokes the same contract route / CLI scaffolder the terminal does and renders its CLI-equivalent line (`netscript …` CodeBlock). No dashboard-only write paths, no forked codegen.\n3. **Flow ≠ waterfall.** S13 renders a primitive-grouped causal chain with payloads at seams, assembled from NetScript's own seam events; the moment raw timing/span detail is needed it out-links to Aspire `/traces/detail/{id}`. No span bars, no time-proportional gantt, no log tails in S13 — ever.\n\n## Integration seams (four seams, one URL scheme)\n\n1. **Aspire → dashboard:** `WithUrl(\"NetScript Dashboard\", /resource/{name})` on every scaffolded resource + two framework `withCommand`s — generator emission on #424, Seam A widening (`command`/`app` kinds) on #411, Seam B interim.\n2. **Dashboard → Aspire:** correlation-only `TelemetryQueryPort` (#413) resolves a `traceId`, then out-links to `{aspireBase}/traces/detail/{id}`, `/structuredlogs?resource=`, `/consolelogs/resource/`, `/metrics/resource/`. Never re-renders OTLP. The S13 flow plane does **not** widen this port.\n3. **Dashboard → Scalar:** `/api/docs` (+ operation anchor) deep-links only; `externalDocs` optional polish.\n4. **Data plane:** owned `/_netscript/*` introspection (#423) over already-shipped oRPC contracts, **plus `/_netscript/flows` (SSE)**: beta.6 joins the shipped per-primitive streams on the stamped `traceparent`; co-req DDX-23 (#557) adds the unified seam-event envelope + HTTP boundary events.\n\n## Killed / folded surfaces (documented so they don't creep back)\n\n- Raw OTLP waterfall renderer (pass-1 #418 scope → dead; #418 rescoped to the S13 seam-flow journey, which is not a waterfall — acceptance line 3).\n- Logs panel (#421 → closed; correlated strip in S6 deep-links Aspire logs).\n- Resource-control panel (#422 → closed; delivered as `withCommand` contributions *inside Aspire*).\n- Service `/health` panel (→ Aspire State column via a proper `withHealthCheck()` wiring fix).\n- Metrics charts + GenAI conversation view (→ Aspire, link only).\n- Scalar-style operation list / try-it (→ Scalar `/api/docs`; the S4 catalog is provenance-only).\n\n## Slice map / dependencies\n\nPlumbing: #410 (fresh-ui L3 blocks) → #412 (core scaffold, + `FlowRecord`) → #414 (thin plugin) · #411 (Seam A) · #413 (+#408 telemetry T7) · #423 (introspection + flows join) · #424 (CLI/deep-links/generator) · #427 (panel seam — the Directus-validated contribution axis).\nScreens: #415, #416, #417, #418 (S13), #419, #420, #428–#431, DDX-20/21/22 (#551 #552 #553).\nManagement wave (beta.7): #432 elevated — \"Add resource\" scaffold-from-UI keystone; DDX-23 seam-event envelope #557; template-gallery create entries in S5/S7–S10.\nDesign pre-step: #507 (S1–S13 Claude Design prototype; duplication caught at design review). UI quality: #509.\nGate: #426 (E2E join + panel smoke; v2 adds the S13 flow-chain assertion, still no owned-waterfall assertion).\nCo-requisites (wave:defer): `TriggerDlqPort` contract route #554, `queue` `DeadLetterStore` CLI/API #555. Co-requisite (beta.7): runtime-config mutation use-cases #556 (S3 write-back — surface check 2026-07-06: the store is read+watch-only today).\nDeferred convergences: in-dashboard AI-on-codegen (with #238), in-app plugin marketplace beyond S5 marketplace-lite.\n\nRefs #301 (road to stable). Co-lands with `epic:telemetry-revamp` (#399) for T4–T7 correlation fidelity.\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/400/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/400/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-510-epic.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-510-epic.json new file mode 100644 index 000000000..268999be0 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-510-epic.json @@ -0,0 +1,212 @@ +{ + "url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/510/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/510/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/510/events", + "html_url": "https://github.com/rickylabs/netscript/issues/510", + "id": 4819097748, + "node_id": "I_kwDOSxcnO88AAAABHz2YlA", + "number": 510, + "title": "Epic: NetScript Process Manager — bare-metal supervisor + admin console (pup/pm2 done right)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11279345215, + "node_id": "LA_kwDOSxcnO88AAAACoE0mPw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:docs", + "name": "area:docs", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11283930885, + "node_id": "LA_kwDOSxcnO88AAAACoJMfBQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:umbrella", + "name": "type:umbrella", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858922, + "node_id": "LA_kwDOSxcnO88AAAACp6nRqg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/rfc", + "name": "rfc", + "color": "5319e7", + "default": false, + "description": "Request for Comments - substantial/breaking design change" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:25:43Z", + "updated_at": "2026-07-11T21:14:27Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 36, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/327", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Epic — NetScript Process Manager\n\nPart of #327 (Deployment epic, bare-metal lane). **No closing keyword** — this umbrella closes by hand when its children land.\n\nThe bare-metal deployment target of #327: how NetScript apps are run, supervised, and administered on bare metal. The concept of pup + pm2, rebuilt for 2026 as a first-party NetScript plugin (`@netscript/plugin-process-manager(-core)`, CLI group `netscript pm`) at the quality bar of `workers`/`auth`.\n\n### 1. Problem statement\n\nToday `--no-aspire` bare-metal supervision is zero automation beyond `deno task --cwd dev` run by hand in N terminals. Production restart/liveness is 100% delegated to systemd/Servy with no NetScript-owned aggregate status/logs, no runtime-mutable process list, no admin console. This epic fills that gap without re-importing pm2's god-daemon failure class.\n\n### 2. Prior art (verdicts)\n\n- **pup** (MIT, dormant ~19.5mo): excellent concept — declarative `pup.json`, 3 start policies, one REST control plane consumed by CLI/plugins/UI alike. Aged code: dax-sh over `Deno.Command`, deprecated `@std/io` readLines, god-object `Pup` class, bespoke polling-IPC telemetry, unfixed descendant-kill bug. We keep the concept, not the code.\n- **pm2** (v7, Node/Bun): rich restart strategies worth matching; its always-on god-daemon caused repeated unbounded-RSS (150GB+) and daemon-duplication incidents — a structural warning, not a model.\n- **Servy / systemd**: NetScript already ships production Servy + systemd adapters behind `OsServicePort`; extend (WatchdogSec/Type=notify/hardening/cgroups), don't replace.\n- **process-compose / s6-rc / Quadlet**: the generator-to-native-supervisor precedent and the dependency-ordered graph model we converge on.\n\n### 3. Architecture (one paragraph)\n\nSupervision engine as a **library**: dev mode runs it foreground-attached (`netscript pm dev`, no daemon); production compiles the declarative process graph into OS-native units (systemd/Servy via the existing renderers + `OsServicePort`, extracted to **`@netscript/deploy-core`** at PM-20), and the pm's resident piece is a **control-plane service** — itself one more OS-supervised unit hosting the typed oRPC control plane, never a parent of the workload. If it dies, the workload keeps running and the OS restarts the control plane. This structurally eliminates the god-daemon failure mode.\n\n### 4. Scope / non-scope (binding)\n\n**In:** typed dependency-ordered process-graph contract; dev foreground engine; compile-to-OS-units; resident control-plane oRPC service; `netscript pm` CLI (pup parity floor); OTEL `netscript.process` domain; `--no-aspire` resolvers; browser-served admin console (desktop packaging deferred, PM-32); `OsServicePort` renderer extensions; `packages/deploy-core` extraction.\n**Out:** re-implementing restart/liveness in production (OS owns it); a deployment/rollout system (#327 owns it); a monitoring product (OTEL export only); a production load balancer; milestone-1 N-instance clustering (OF-5 → Backlog, PM-35); macOS/launchd (OF-6). No god-daemon, no SaaS monitoring, no git+SSH deploy inside the pm, no untyped config, no fake cluster mode.\n\n### 5. Surfaces\n\n- **A) Admin console** — one Fresh app, three modes (OF-2): browser-served by the control-plane service ships first (PM-29); Deno-Desktop packaging second (PM-32, soft dep #456/#451); embedded `DashboardPanelContribution` panel third (PM-33, gated on CR-DDX-HOSTAGNOSTIC to #400).\n- **B) Pure CLI** (`netscript pm `) — pup/pm2 parity floor, leveraging the OTEL/oRPC/deploy seams NetScript ships for free (OF-1, OF-7).\n\n### 6. Owner forks — RATIFIED 2026-07-06\n\nAll nine forks ratified by the owner (in-session, Stage H): OF-1..OF-8 = recommendation (a); **OF-5 clustering explicitly re-homed to Backlog / Triage** (PM-35); **OF-9 hard fork resolved: milestone 1 = `0.0.1-beta.8`** (beta.7 already carries 28 open issues). PM-0 rides beta.6 as an independent fix-forward precursor.\n\n### 7. Cross-epic dependency edges\n\n- #327 — parent (bare-metal lane placement).\n- #400 dev-dashboard — `CommandInvokePort` first-definer (dashboard-defines-first, recorded bidirectional fallback); CR-DDX-HOSTAGNOSTIC change request (gates PM-33 only); Aspire `command` kind consumed, never extended.\n- #451 / #456 (desktop Tier-4) — soft deps for PM-32 only.\n- #345 — re-scoped to cross-host HA/secrets/signing; per-host multi-instance moved here (PM-35).\n- fresh-ui L3 `blocks/` promotion — shared dep for PM-29 (can ship on L2 + local composition if promotion lags).\n\n### 8. Milestone train (post-ratification)\n\n- **0.0.1-beta.6:** PM-0 (hard placement — independent fix-forward).\n- **0.0.1-beta.8 (M1, per OF-9):** PM-1..PM-31 (`v1-min` cuttable floor = 21 slices) + PM-32/PM-33 (M2, soft-dep #456/#451; PM-33 slips if the #400 CR is unresolved).\n- **0.0.1-stable:** PM-34 + re-scoped #345 convergence.\n- **Backlog / Triage:** PM-35 (per-host multi-instance / clustering, per owner OF-5 pick).\n\n### 9. Sub-issues\n\n\n- [ ] **PM-0** #511\n- [ ] **PM-1** #512\n- [ ] **PM-2** #513\n- [ ] **PM-3** #514\n- [ ] **PM-4** #515\n- [ ] **PM-5** #516\n- [ ] **PM-6** #517\n- [ ] **PM-7** #518\n- [ ] **PM-8** #519\n- [ ] **PM-9** #520\n- [ ] **PM-10** #521\n- [ ] **PM-11** #522\n- [ ] **PM-12** #523\n- [ ] **PM-13** #524\n- [ ] **PM-14** #525\n- [ ] **PM-15** #526\n- [ ] **PM-16** #527\n- [ ] **PM-17** #528\n- [ ] **PM-18** #529\n- [ ] **PM-19** #530\n- [ ] **PM-20** #531\n- [ ] **PM-21** #532\n- [ ] **PM-22** #533\n- [ ] **PM-23** #534\n- [ ] **PM-24** #535\n- [ ] **PM-25** #536\n- [ ] **PM-26** #537\n- [ ] **PM-27** #538\n- [ ] **PM-28** #539\n- [ ] **PM-29** #540\n- [ ] **PM-30** #541\n- [ ] **PM-31** #542\n- [ ] **PM-32** #543\n- [ ] **PM-33** #544\n- [ ] **PM-34** #545\n- [ ] **PM-35** #546\n\n### 10. Open questions (carried from plan §9)\n\n1. Telemetry T2 owner sign-off on E15 (mint only `netscript.process`; no `netscript.service.instance`).\n2. #400's answer to CR-DDX-HOSTAGNOSTIC — gates PM-33's milestone only.\n3. `followLogs` rate-cap numbers (bounded policy required by PM-13 acceptance; exact figures at implementation).\n4. fresh-ui L3-blocks sequencing for PM-29.\n\n### 11. Design source\n\n`.llm/runs/plan-process-manager--seed/` on PR #504: `plan.md` (Stage E, amended at Stage F, PLAN-EVAL PASS) + `research/design/d1..d5-*.md` + `research.md` §C1–C7.\n\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/510/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/510/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-comments.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-comments.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-comments.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-issue.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-issue.json new file mode 100644 index 000000000..97e9e1765 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-820-issue.json @@ -0,0 +1,148 @@ +{ + "url": "https://api.github.com/repos/rickylabs/netscript/issues/820", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/events", + "html_url": "https://github.com/rickylabs/netscript/issues/820", + "id": 4910209896, + "node_id": "I_kwDOSxcnO88AAAABJKvbaA", + "number": 820, + "title": "RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11402857794, + "node_id": "LA_kwDOSxcnO88AAAACp6nNQg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:research", + "name": "status:research", + "color": "fbca04", + "default": false, + "description": "Harness research phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858922, + "node_id": "LA_kwDOSxcnO88AAAACp6nRqg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/rfc", + "name": "rfc", + "color": "5319e7", + "default": false, + "description": "Request for Comments - substantial/breaking design change" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/3", + "html_url": "https://github.com/rickylabs/netscript/milestone/3", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/3/labels", + "id": 16635581, + "node_id": "MI_kwDOSxcnO84A_da9", + "number": 3, + "title": "Backlog / Triage", + "description": "Catch-all for accepted-but-unscheduled work and untriaged issues. Assign to a release milestone once scoped.", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 25, + "closed_issues": 10, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-17T09:55:56Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-17T09:55:55Z", + "updated_at": "2026-07-17T09:55:56Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Owner-mandated RFC (2026-07-17), grounded in the eis-chat POC (rickylabs/eis-chat#150, merge `aeaf2df` — \"Prototype full-stack Windows singleton desktop deployment\": no-Docker Windows `--singleton` around Deno Desktop, native window directly supervising the adjacent service graph, Garnet + six compiled Deno processes, Aspire sidecar telemetry, shipped as a single `.msi`).\n\n**The POC proves feasibility. This RFC extracts what SHOULD BE BUILT as foundational layers — we learn from the POC's seams, PRs, issues, and fixes; we do not copy its scripts into NetScript.**\n\n## Findings that motivate this RFC\n\n1. **Process manager is the missing foundation (beta.12 / epic #510).** The POC's supervision is launch-only: if a sidecar service dies, the frontend is unaware and the only recovery is re-opening the app. Crash survival, restart policy, health propagation to the UI, and lifecycle guarantees must exist BEFORE any desktop deployment ships on NetScript. Sequencing: PM epic (beta.12) is a hard prerequisite of the desktop deployment work.\n2. **Installation layer is a gap in BOTH epics.** The POC ships as a simple .NET AOT host. An enterprise-grade installation layer must handle much more (install/uninstall/repair, per-machine vs per-user, service registration, permissions/elevation, signing, first-run provisioning) and must be integrated WITHIN the Aspire stack, not bolted on outside it. Today this sits in neither the PM epic (#510) nor the desktop packaging issues (e.g. PM-32 #543) — scope it and place it.\n3. **Update-management lifecycle is unanswered for the combined output.** Deno Desktop ships an update story for a single desktop output; our artifact is a combined singleton (window + supervised service graph + sidecars). How updates apply atomically/safely across that graph (staged rollout, rollback, partial-update hazards, service downtime windows) needs a designed answer.\n4. **Composition with the single-runtime feature.** Prior single-runtime issues describe another packaging approach we intend to KEEP alongside the singleton desktop output. The RFC must define how the two compose (shared contracts? shared PM? divergent installers?) rather than letting them fork.\n\n## Deliverables\n\n- Gap analysis of epic #510 (PM) and the desktop packaging scope against the POC learnings, with concrete sub-issue adjustments (add/re-scope/re-milestone proposals for beta.12/beta.13 — proposals, owner ratifies).\n- RFC design for the enterprise installation layer inside the Aspire stack.\n- RFC design for update lifecycle of the combined singleton output.\n- Composition contract between single-runtime and singleton-desktop approaches.\n\nRun: `.llm/runs/rfc-single-deployment--orchestrator/` (Fable 5 · high generator, adversarial Sol · max). No implementation from this RFC; board changes are drafts until owner ratification.\n\nRefs #510, #543, #327, #400.\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/820/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null +} \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-pm-512-545.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-pm-512-545.json new file mode 100644 index 000000000..3a005e4e1 --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-pm-512-545.json @@ -0,0 +1,5833 @@ +[ + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/512", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/512/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/512/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/512/events", + "html_url": "https://github.com/rickylabs/netscript/issues/512", + "id": 4819099448, + "node_id": "I_kwDOSxcnO88AAAABHz2fOA", + "number": 512, + "title": "[process-manager PM-1] Process-graph contract v1 (ProcessGraphShape/ProcessSpecShape + state vocabulary + restart policies)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858794, + "node_id": "LA_kwDOSxcnO88AAAACp6nRKg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:config", + "name": "area:config", + "color": "bfdadc", + "default": false, + "description": "packages/config and runtime-config" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:25:52Z", + "updated_at": "2026-07-11T21:14:30Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe typed foundation of the epic: `ProcessGraphShape`/`ProcessSpecShape` Zod schemas (exported as Standard Schema, JSON Schema derived — E11), the canonical state vocabulary (E2: engine FSM canonical, wire enum a projection with an explicit mapping table), and restart/start-policy sub-schemas with S7 pm2-floor defaults (E3: backoff double-to-cap-15000ms, reset-after-30000ms).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` `contracts/v1` (Archetype 2)\n- Part of #510\n- Depends on: — · Blocks: most of the DAG\n- **Includes precursor:** re-export `WorkerTaskPermissions` (+ schema) from `@netscript/plugin-workers-core` `mod.ts` (today internal-only at `src/executor/executor-types.ts:33-41`; doctrine 02 bars internal-path imports, 09 bars duplication)\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §1 + `d1-supervision-engine-core.md` (state machine) · `plan.md` §4 PM-1, E2/E3/E11\n\n## Acceptance criteria\n- [ ] gate: schemas Zod-authored, Standard Schema exported, JSON Schema derived (not hand-maintained)\n- [ ] gate: one state vocabulary — wire `ProcessState` defined once in `contracts/v1` as a projection of the engine FSM with a mapping table\n- [ ] gate: restart defaults are D1 controller constants (15000/30000), not D5's stale 30000/10000\n- [ ] gate: `WorkerTaskPermissions` re-exported from workers-core `mod.ts`; pm imports it from the public surface\n- [ ] gate: `deno doc --lint` clean on the full export map; public surface ≤ 20 per mod.ts\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- No `instances > 1` semantics (E9 hard-errors — PM-35 owns clustering); no deploy-facing target schema (PM-21).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/512/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/512/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/513", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/513/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/513/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/513/events", + "html_url": "https://github.com/rickylabs/netscript/issues/513", + "id": 4819099921, + "node_id": "I_kwDOSxcnO88AAAABHz2hEQ", + "number": 513, + "title": "[process-manager PM-2] Telemetry: netscript.process domain + ProcessInstrumentationLike facade", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:25:56Z", + "updated_at": "2026-07-11T21:14:31Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nMint the `PROCESS: 'netscript.process'` telemetry domain and the `ProcessInstrumentationLike` facade (+ no-op) in `packages/telemetry`, per the T1/T2 conventions. E15: reuse OTEL semconv identity keys verbatim; no `netscript.service.instance` (confirm with telemetry T2 owner during implementation — carried note, not a blocker).\n\n## Scope\n- Archetype / area: `packages/telemetry`\n- Part of #510\n- Depends on: — · Blocks: PM-14\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S10) + `d2-control-plane-contract.md` §7.1 · `plan.md` §4 PM-2, E15\n\n## Acceptance criteria\n- [ ] gate: `netscript.process` domain constant + facade + no-op land in `packages/telemetry` following the T1 convention\n- [ ] gate: no new attribute keys where OTEL semconv already defines them\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Span/metric catalog wiring is PM-14; no engine code here.\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/513/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/513/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/514", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/514/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/514/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/514/events", + "html_url": "https://github.com/rickylabs/netscript/issues/514", + "id": 4819100722, + "node_id": "I_kwDOSxcnO88AAAABHz2kMg", + "number": 514, + "title": "[process-manager PM-3] Core package scaffold: ports + KV registry adapter", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858609, + "node_id": "LA_kwDOSxcnO88AAAACp6nQcQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:kv", + "name": "area:kv", + "color": "bfdadc", + "default": false, + "description": "packages/kv" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:03Z", + "updated_at": "2026-07-11T21:14:33Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nScaffold `packages/plugin-process-manager-core` (Archetype 2, workers-core analog): `ProcessRegistryPort` + runner port definitions, and the KV registry adapter on Deno 2.9 per-app-name persistent KV (`['pm', …]` key space).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` ports + adapters\n- Part of #510\n- Depends on: #512 · Blocks: PM-6, PM-17, PM-18\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S2 + D1-S6) · `plan.md` §4 PM-3\n\n## Acceptance criteria\n- [ ] gate: package scaffolded per doctrine (mod.ts export map, README, JSR-ready deno.json)\n- [ ] gate: KV adapter uses `@netscript/kv` conventions; keys under `['pm', …]`\n- [ ] gate: ports are real contracts (no phantom typing — type-soundness law, only the 2 accepted casts)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- No supervisor loop (PM-6); no OS-service ports (PM-17).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/514/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/514/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/515", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/515/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/515/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/515/events", + "html_url": "https://github.com/rickylabs/netscript/issues/515", + "id": 4819101355, + "node_id": "I_kwDOSxcnO88AAAABHz2mqw", + "number": 515, + "title": "[process-manager PM-4] Restart controller: pure nextDelay(state, policy, clock)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:07Z", + "updated_at": "2026-07-11T21:14:34Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nPure restart-decision function `nextDelay(state, policy, clock)`: S7 numbers locked (E3 — exp backoff double-to-cap-15000ms, reset-after-30000ms stable), windowed restart budget, skip-exit-codes, and poll-based memory threshold with **default `pollIntervalMs: 5000`, configurable per policy** (latency explicit).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` engine\n- Part of #510\n- Depends on: #512 · Blocks: PM-6\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (restart controller) · `plan.md` §4 PM-4, E3\n\n## Acceptance criteria\n- [ ] gate: pure function — deterministic under injected clock; unit tests cover backoff/reset/budget/skip-exit-codes\n- [ ] gate: memory threshold is poll-based with configurable `pollIntervalMs` (default 5000) — never marketed as a watchdog (R10)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Process spawning (PM-5); OS watchdogs (systemd `WatchdogSec` is PM-15/16).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/515/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/515/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/516", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/516/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/516/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/516/events", + "html_url": "https://github.com/rickylabs/netscript/issues/516", + "id": 4819102143, + "node_id": "I_kwDOSxcnO88AAAABHz2pvw", + "number": 516, + "title": "[process-manager PM-5] Process runner: Deno.Command-native spawn + descendant-tree kill", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:12Z", + "updated_at": "2026-07-11T21:14:36Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nLean `Deno.Command`-native process runner (no dax): `RuntimeCommandSpec` + argv builders, `buildEnvironment()` trace injection (TRACEPARENT), `TextLineStream` output handling, and a correct descendant-tree kill (POSIX process-tree walk / Windows `taskkill /T`) — fixing pup's unfixed descendant-kill bug class.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` engine\n- Part of #510\n- Depends on: #512 · Blocks: PM-6, PM-7\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S4 + D1-S5) · `plan.md` §4 PM-5\n\n## Acceptance criteria\n- [ ] gate: spawn/stream/kill covered by tests incl. a descendant-tree kill test on both platforms' code paths\n- [ ] gate: no dax / no `@std/io` deprecated APIs — Web Platform + `Deno.*` only\n- [ ] gate: TRACEPARENT env injection present and tested\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Restart policy (PM-4); log persistence (PM-7).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/516/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/516/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/517", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/517/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/517/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/517/events", + "html_url": "https://github.com/rickylabs/netscript/issues/517", + "id": 4819102903, + "node_id": "I_kwDOSxcnO88AAAABHz2stw", + "number": 517, + "title": "[process-manager PM-6] Supervisor loop + composable start policies (autostart/cron/watch)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2026-07-06T12:26:18Z", + "updated_at": "2026-07-11T21:14:37Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe supervision engine loop composing PM-3/4/5, with the three start policies: autostart, cron via `@netscript/cron` `createScheduler()`, and watch via `Deno.watchFs`. Dependency-ordered graph startup.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` engine\n- Part of #510\n- Depends on: #514, #515, #516 · Blocks: PM-8, PM-10, PM-35\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S7) · `plan.md` §4 PM-6\n\n## Acceptance criteria\n- [ ] gate: start policies composable per process; cron reuses `@netscript/cron` (wrap-don't-reinvent)\n- [ ] gate: dependency-ordered startup with readiness gating (E14 grace-window default; `sd_notify`/HTTP probe opt-in)\n- [ ] gate: engine is a library — zero daemon assumptions (C1)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Control plane (PM-10); dev CLI (PM-27).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/517/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/517/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/518", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/518/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/518/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/518/events", + "html_url": "https://github.com/rickylabs/netscript/issues/518", + "id": 4819103547, + "node_id": "I_kwDOSxcnO88AAAABHz2vOw", + "number": 518, + "title": "[process-manager PM-7] Log multiplexer + persistent sink (rotation)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:22Z", + "updated_at": "2026-07-11T21:14:38Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nLog multiplexer over runner output streams + persistent sink with rotation; journald/Servy interplay documented (who owns persistence per mode).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` engine\n- Part of #510\n- Depends on: #516 · Blocks: PM-13 (follow-logs source)\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S8) · `plan.md` §4 PM-7\n\n## Acceptance criteria\n- [ ] gate: rotation policy tested (size/count bounds); no unbounded growth\n- [ ] gate: docs state the journald/Servy interplay per mode (dev vs OS-supervised)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Log streaming over the wire (PM-13).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/518/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/518/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/519", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/519/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/519/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/519/events", + "html_url": "https://github.com/rickylabs/netscript/issues/519", + "id": 4819104265, + "node_id": "I_kwDOSxcnO88AAAABHz2yCQ", + "number": 519, + "title": "[process-manager PM-8] Dev loop + ShutdownManager integration (engine side of pm dev)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:27Z", + "updated_at": "2026-07-11T21:14:40Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe foreground dev loop (engine side of `netscript pm dev`): `ShutdownManager` integration, ordered teardown, Windows signal caveat (denoland/deno#28081 — listener suppresses default action; re-invoke exit/teardown explicitly).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` engine\n- Part of #510\n- Depends on: #517 · Blocks: PM-27\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S9) · `plan.md` §4 PM-8, R5\n\n## Acceptance criteria\n- [ ] gate: Ctrl+C teardown kills the whole graph in dependency order on POSIX and Windows code paths\n- [ ] gate: Windows 6-signal caveat handled and tested (explicit exit re-invocation)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- CLI UX/multiplexed output rendering (PM-27).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/519/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/519/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/520", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/520/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/520/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/520/events", + "html_url": "https://github.com/rickylabs/netscript/issues/520", + "id": 4819104844, + "node_id": "I_kwDOSxcnO88AAAABHz20TA", + "number": 520, + "title": "[process-manager PM-9] ProcessManagerContract v1: the 18-route table", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:31Z", + "updated_at": "2026-07-11T21:14:41Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe typed oRPC contract: exactly the normative 18-route table (E4/F-2) — `describe · listProcesses · getProcess · status · health · getState · logs · followLogs · start · stop · restart · block · unblock · terminate · applyGraph · subscribeEvents · mintToken · revokeToken` — with Zod schemas, spreading `BASE_PLUGIN_CONTRACT_ROUTES`, `satisfies`, no erasure cast.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` `contracts/v1`\n- Part of #510\n- Depends on: #512 · Blocks: PM-10, PM-13, PM-25, PM-29\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §1.3 (normative) · `plan.md` §4 PM-9, E4\n\n## Acceptance criteria\n- [ ] gate: exactly the 18 routes — no hidden routes minted; CLI-only verbs (`reload`, `enable-service`, `disable-service`) map in PM-26, never here\n- [ ] gate: extends the base plugin contract seam (`BASE_PLUGIN_CONTRACT_ROUTES` spread + `satisfies`; only the 2 accepted casts)\n- [ ] gate: lifecycle actions are accepted-style async (`ActionResult {id, action, accepted, state, correlationId}`)\n- [ ] gate: `deno doc --lint` clean on the full export map\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Handlers (PM-10); transport (PM-11); auth (PM-12).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/520/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/520/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/521", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/521/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/521/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/521/events", + "html_url": "https://github.com/rickylabs/netscript/issues/521", + "id": 4819105471, + "node_id": "I_kwDOSxcnO88AAAABHz22vw", + "number": 521, + "title": "[process-manager PM-10] Control-plane oRPC service (PluginServiceContribution)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:36Z", + "updated_at": "2026-07-11T21:14:42Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe resident control-plane service: `PluginServiceContribution` (`axis:'service'`) hosting the PM-9 contract over the engine, with async `accepted`-style lifecycle handlers. One more OS-supervised sibling unit — never a parent of the workload (C1).\n\n## Scope\n- Archetype / area: `plugins/process-manager` service contribution + core service impl\n- Part of #510\n- Depends on: #520, #517 · Blocks: PM-11, PM-12, PM-13, PM-14\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §2 (D2-S3) · `plan.md` §4 PM-10\n\n## Acceptance criteria\n- [ ] gate: service extends the base service seam (contract/service base — no phantom typing)\n- [ ] gate: lifecycle handlers return `accepted` immediately; state transitions observable via `getState`/events\n- [ ] gate: control-plane death does not touch workload processes (sibling-unit invariant asserted in tests)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Transport/discovery (PM-11); token auth (PM-12).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/521/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/521/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/522", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/522/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/522/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/522/events", + "html_url": "https://github.com/rickylabs/netscript/issues/522", + "id": 4819106031, + "node_id": "I_kwDOSxcnO88AAAABHz247w", + "number": 522, + "title": "[process-manager PM-11] Loopback transport + address-descriptor discovery + CLI degraded mode", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:41Z", + "updated_at": "2026-07-11T21:14:44Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nLoopback TCP oRPC transport (single canonical transport, E6 unix-socket deferred) + address-descriptor discovery (KV + file) + the CLI degraded-mode fallback seam (OS-layer reads when the control plane is down).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` transport/discovery\n- Part of #510\n- Depends on: #521 · Blocks: PM-25\n- **Acceptance documents that the control plane is network-reachable on 127.0.0.1** (TCP-only until E6's unix-socket upgrade) so token auth (PM-12) is understood as load-bearing, not defense-in-depth (F-5)\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §4 (D2-S4) · `plan.md` §4 PM-11, E6, R4\n\n## Acceptance criteria\n- [ ] gate: address descriptor written to KV + file with 0o600 perms; discovery precedence tested\n- [ ] gate: docs/README state the 127.0.0.1 reachability + token-auth-is-load-bearing posture explicitly\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Unix sockets (deferred, E6); remote/non-loopback bind (deny-remote default is PM-12).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/522/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/522/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/523", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/523/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/523/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/523/events", + "html_url": "https://github.com/rickylabs/netscript/issues/523", + "id": 4819106961, + "node_id": "I_kwDOSxcnO88AAAABHz28kQ", + "number": 523, + "title": "[process-manager PM-12] Token auth: opaque bearer + 0o600 secrets + deny-remote default", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:45Z", + "updated_at": "2026-07-11T21:14:45Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nControl-plane auth per E7: opaque high-entropy bearer tokens (Web Crypto), hashed at rest, KV revocation set, secrets-convention 0o600 storage, deny-remote default. Zero-dep — no JWT unless cross-host federation (a non-goal) ever lands.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` auth\n- Part of #510\n- Depends on: #521 · Blocks: PM-26\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §3.1(a) (D2-S5) · `plan.md` §4 PM-12, E7\n\n## Acceptance criteria\n- [ ] gate: tokens hashed at rest; revocation via KV set; `mintToken`/`revokeToken` routes wired\n- [ ] gate: token file 0o600 via the secrets convention; deny-remote default asserted in tests\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- JWT/federation; UI auth flows (console reuses the same bearer).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/523/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/523/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/524", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/524/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/524/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/524/events", + "html_url": "https://github.com/rickylabs/netscript/issues/524", + "id": 4819107455, + "node_id": "I_kwDOSxcnO88AAAABHz2-fw", + "number": 524, + "title": "[process-manager PM-13] Event stream + follow-logs (eventIterator, live-only v1)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:50Z", + "updated_at": "2026-07-11T21:14:46Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\n`subscribeEvents` + `followLogs` over oRPC `eventIterator`; KV-watch stays server-internal; live-only in v1 (E8) — reconnecting clients re-sync via `status`/`getState`.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` streaming\n- Part of #510\n- Depends on: #520, #521 · Blocks: PM-28\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §5 (D2-S6) · `plan.md` §4 PM-13, E8\n\n## Acceptance criteria\n- [ ] gate: `followLogs` carries a bounded rate-cap policy (exact figures at implementation — plan §9 residual 3)\n- [ ] gate: live-only semantics documented; reconnect re-sync path tested\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Replayable KV event cursor (deferred, E8).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/524/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/524/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/525", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/525/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/525/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/525/events", + "html_url": "https://github.com/rickylabs/netscript/issues/525", + "id": 4819108049, + "node_id": "I_kwDOSxcnO88AAAABHz3A0Q", + "number": 525, + "title": "[process-manager PM-14] Telemetry wiring: span/metric catalog + 14-point checklist", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:54Z", + "updated_at": "2026-07-11T21:14:48Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nWire the `netscript.process` span/metric catalog through engine + control plane, including the `netscript.process.control_plane.rss.bytes` NFR gauge (the anti-god-daemon self-watch). All 14 telemetry-checklist points asserted.\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` + `plugins/process-manager`\n- Part of #510\n- Depends on: #513, #521 · Blocks: —\n\n## Design source\n- `research/design/d2-control-plane-contract.md` §7 (D2-S7) · `plan.md` §4 PM-14, R3\n\n## Acceptance criteria\n- [ ] gate: 14-point telemetry checklist green (D2 §7.5 mapping)\n- [ ] gate: pm authors its own subprocess spans (OTEL_DENO has zero subprocess coverage — R3); TRACEPARENT reuse verified\n- [ ] gate: no-op fallback (TC-12) when telemetry is off\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- New telemetry domains (PM-2 owns the mint).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/525/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/525/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/526", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/526/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/526/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/526/events", + "html_url": "https://github.com/rickylabs/netscript/issues/526", + "id": 4819108542, + "node_id": "I_kwDOSxcnO88AAAABHz3Cvg", + "number": 526, + "title": "[process-manager PM-15] systemd renderer knobs: Type=notify, WatchdogSec, hardening, cgroups v2", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:26:58Z", + "updated_at": "2026-07-11T21:14:49Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nExtend the shipped systemd renderer: `Type=notify`/`WatchdogSec`, `HARDENING_BASELINE` profile, `DynamicUser`, cgroups v2 resource limits — with **byte-identical rendering when the new knobs are unset** (no regression for shipped users).\n\n## Scope\n- Archetype / area: systemd renderer (today `packages/cli`; moves to `packages/deploy-core` at PM-20)\n- Part of #510\n- Depends on: #512 · Blocks: PM-16, PM-19\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.3 (D3-S2) · `plan.md` §4 PM-15\n\n## Acceptance criteria\n- [ ] gate: byte-identical render check — unset config renders today's unit byte-for-byte\n- [ ] gate: each knob covered by a render test; hardening profile opt-in\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- sd_notify client helper (PM-16); Servy parity where no equivalent exists (warn-and-omit via PM-17).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/526/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/526/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/527", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/527/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/527/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/527/events", + "html_url": "https://github.com/rickylabs/netscript/issues/527", + "id": 4819109133, + "node_id": "I_kwDOSxcnO88AAAABHz3FDQ", + "number": 527, + "title": "[process-manager PM-16] Pure-Deno sd_notify helper (+ abstract-namespace spike)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:03Z", + "updated_at": "2026-07-11T21:14:50Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nPure-Deno `sd_notify` client: `notifyReady`/`notifyWatchdog`/`watchdogIntervalMs`, no-op outside systemd. Includes a **bounded spike sub-task**: `@`-abstract-namespace `NOTIFY_SOCKET` support in Deno `unixpacket` (R6 — the path-based happy path never blocks on it).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` (runtime helper consumed by supervised apps)\n- Part of #510\n- Depends on: #526 · Blocks: —\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.3a (D3-S3) · `plan.md` §4 PM-16, R6\n\n## Acceptance criteria\n- [ ] gate: path-based `NOTIFY_SOCKET` happy path tested; no-op outside systemd\n- [ ] gate: spike outcome recorded (abstract-namespace supported / not) — either way the slice ships\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Watchdog re-implementation (systemd owns it).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/527/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/527/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/528", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/528/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/528/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/528/events", + "html_url": "https://github.com/rickylabs/netscript/issues/528", + "id": 4819109577, + "node_id": "I_kwDOSxcnO88AAAABHz3GyQ", + "number": 528, + "title": "[process-manager PM-17] OsServicePort capability descriptor + warn-and-omit", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:07Z", + "updated_at": "2026-07-11T21:14:52Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nCapability descriptor on `OsServicePort` (systemd advertises watchdog/cgroups/hardening; Servy advertises heartbeat/recoveryAction) feeding config-layer **warn-and-omit**: a knob the target can't honor warns and is omitted, never silently dropped. Windows cgroups warning names the manual alternatives (Job Objects, processor affinity) with a Microsoft-docs link (R1/F-11).\n\n## Scope\n- Archetype / area: `OsServicePort` + adapters (moves to `packages/deploy-core` at PM-20)\n- Part of #510\n- Depends on: #514 · Blocks: PM-18\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.4 (D3-S4) · `plan.md` §4 PM-17, R1\n\n## Acceptance criteria\n- [ ] gate: capability sets accurate per adapter; warn-and-omit tested for an unsupported knob on each platform\n- [ ] gate: Windows resource-limit warning text names Job Objects/processor affinity + MS-docs link\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- New OS backends (launchd out — OF-6).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/528/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/528/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/529", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/529/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/529/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/529/events", + "html_url": "https://github.com/rickylabs/netscript/issues/529", + "id": 4819110422, + "node_id": "I_kwDOSxcnO88AAAABHz3KFg", + "number": 529, + "title": "[process-manager PM-18] Conventions wiring: ServiceDeployTargetPorts → wired 8-op adapters", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:13Z", + "updated_at": "2026-07-11T21:14:53Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe pm supplies `ServiceDeployTargetPorts` (activation/health/secrets/observability), promoting the bare `linux-service`/`windows-service` descriptors to wired 8-op adapters; health-gated `up` = zero-downtime restart.\n\n## Scope\n- Archetype / area: deploy conventions + target adapters\n- Part of #510\n- Depends on: #511, #514 · Blocks: PM-20, PM-26\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.6 (D3-S5) · `plan.md` §4 PM-18\n\n## Acceptance criteria\n- [ ] gate: both targets advertise the full 8-op set with ports injected (`service-deploy-target.ts` seam)\n- [ ] gate: health-gated `up` demonstrated (unit restart waits on readiness before old instance teardown)\n- [ ] gate: `deno task arch:check` green\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- F-DEPLOY gate promotion (PM-20 — needs the real package boundary).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/529/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/529/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/530", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/530/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/530/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/530/events", + "html_url": "https://github.com/rickylabs/netscript/issues/530", + "id": 4819111059, + "node_id": "I_kwDOSxcnO88AAAABHz3Mkw", + "number": 530, + "title": "[process-manager PM-19] Compile adapters: ProcessSpec → systemd/Servy unit configs", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:17Z", + "updated_at": "2026-07-11T21:14:54Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nCompile `ProcessSpec` graphs into systemd/Servy unit configs in the core — **calls the existing renderers, never a parallel renderer** (wrap-don't-reinvent).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` compile layer\n- Part of #510\n- Depends on: #512, #526 · Blocks: PM-20\n\n## Design source\n- `research/design/d1-supervision-engine-core.md` (D1-S11) · `plan.md` §4 PM-19\n\n## Acceptance criteria\n- [ ] gate: one renderer code path — compile adapters delegate to the shipped renderers (import-graph asserted)\n- [ ] gate: round-trip test: graph → units → the OS layer can start/stop them (mocked adapters)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Renderer feature work (PM-15).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/530/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/530/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/531", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/531/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/531/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/531/events", + "html_url": "https://github.com/rickylabs/netscript/issues/531", + "id": 4819111725, + "node_id": "I_kwDOSxcnO88AAAABHz3PLQ", + "number": 531, + "title": "[process-manager PM-20] Extract packages/deploy-core (@netscript/deploy-core) + promote F-DEPLOY gates", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857547, + "node_id": "LA_kwDOSxcnO88AAAACp6nMSw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:refactor", + "name": "type:refactor", + "color": "c5def5", + "default": false, + "description": "Internal change with no behavior change" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:22Z", + "updated_at": "2026-07-11T21:14:55Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe largest structural move in the epic (E5 as amended at Stage-F triage F-3): create **`packages/deploy-core`** (`@netscript/deploy-core`) — the package ARCHETYPE-7 anticipates (\"the core is extracted in a later wave\") — and move the OS-service layer into it: `OsServicePort` + systemd/Servy adapters + renderers + the four conventions + the target registry. `plugin-process-manager-core` **depends on** deploy-core; `packages/cli` re-exports so existing imports stay stable. The future deploy wave inherits — never imports from — pm.\n\n## Scope\n- Archetype / area: new `packages/deploy-core` (Archetype 7 core) + `packages/cli` re-exports\n- Part of #510\n- Depends on: #529, #530 · Blocks: PM-31 (publish set)\n- **Acceptance includes** promoting `F-DEPLOY-1`/`F-DEPLOY-2` `reviewed`→`gated` in arch:check **in this slice** — the real package boundary the promotion has been waiting on now exists (F-3/F-14)\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.8 · `plan.md` §4 PM-20, E5 (amended), R9\n\n## Acceptance criteria\n- [ ] gate: `packages/deploy-core` JSR-ready (doc-lint clean, export map, README); pm-core + cli import from it\n- [ ] gate: `packages/cli` re-exports keep all existing imports compiling (no downstream churn)\n- [ ] gate: `F-DEPLOY-1`/`-2` flipped `reviewed`→`gated`; `deno task arch:check` green with the new boundary scanned\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- New deploy features — pure extraction + re-export. Escape hatch (R9/F-12): if unwieldy mid-slice, split — `OsServicePort` + renderers first; conventions + registry in a sibling slice.\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/531/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/531/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/532", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/532/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/532/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/532/events", + "html_url": "https://github.com/rickylabs/netscript/issues/532", + "id": 4819112230, + "node_id": "I_kwDOSxcnO88AAAABHz3RJg", + "number": 532, + "title": "[process-manager PM-21] Deploy-facing schema: process-graph knobs on deploy.targets.linux/.windows", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858794, + "node_id": "LA_kwDOSxcnO88AAAACp6nRKg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:config", + "name": "area:config", + "color": "bfdadc", + "default": false, + "description": "packages/config and runtime-config" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:26Z", + "updated_at": "2026-07-11T21:14:57Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nPer E1 (**no new deploy-target key**): add process-graph knobs to the existing `deploy.targets.linux`/`.windows` members (+ a shared pm sub-shape), spreading `deployTargetBaseShape` — no re-declares. Includes the `graph` pointer to `pm.config.ts` and control-plane placement config.\n\n## Scope\n- Archetype / area: `packages/config` deploy section\n- Part of #510\n- Depends on: #512, #511 · Blocks: PM-22, PM-25\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §1.4 as amended by E1 (D3 §D3.1.1 authoritative) · `plan.md` §4 PM-21, E1/E10\n\n## Acceptance criteria\n- [ ] gate: no new target key — knobs land on the existing members (`config-section-types.ts` `windows`/`linux`)\n- [ ] gate: `deployTargetBaseShape` spread (no field re-declares); schema round-trips through config load\n- [ ] gate: `deno task arch:check` green\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- `pm.config.ts` authoring surface (PM-24 scaffolds it; contract is PM-1's).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/532/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/532/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/533", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/533/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/533/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/533/events", + "html_url": "https://github.com/rickylabs/netscript/issues/533", + "id": 4819112843, + "node_id": "I_kwDOSxcnO88AAAABHz3Tiw", + "number": 533, + "title": "[process-manager PM-22] --no-aspire resolvers + pm explain provenance", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:30Z", + "updated_at": "2026-07-11T21:14:58Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nResolvers that seed a process graph for `--no-aspire` scaffolds: `scaffold.plugin` `officialSource` + workspace `deno.json` task graph (concrete argv per S6), with `pm explain` provenance (every resolved process says where it came from).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` resolvers + CLI surface\n- Part of #510\n- Depends on: #512 · Blocks: PM-24, PM-27\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §3 (D5-3) · `plan.md` §4 PM-22\n\n## Acceptance criteria\n- [ ] gate: resolver precedence tested (explicit config > manifest > task graph)\n- [ ] gate: `pm explain` prints provenance per process\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Aspire-mode resolution (PM-23).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/533/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/533/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/534", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/534/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/534/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/534/events", + "html_url": "https://github.com/rickylabs/netscript/issues/534", + "id": 4819113323, + "node_id": "I_kwDOSxcnO88AAAABHz3Vaw", + "number": 534, + "title": "[process-manager PM-23] AspireResource[] resolver (manifest-wins precedence)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11333860070, + "node_id": "LA_kwDOSxcnO88AAAACo4z65g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:aspire", + "name": "area:aspire", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:35Z", + "updated_at": "2026-07-11T21:15:00Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nResolver over `AspireResource[]`: manifest-wins precedence; the Aspire `command`-kind edge is **consumed, not owned** (the kind belongs to the dashboard/Aspire seam).\n\n## Scope\n- Archetype / area: `packages/plugin-process-manager-core` resolvers\n- Part of #510\n- Depends on: #512 · Blocks: —\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §2 (D5-4) · `plan.md` §4 PM-23\n\n## Acceptance criteria\n- [ ] gate: manifest-wins precedence tested against a live-shaped `AspireResource[]` fixture\n- [ ] gate: no `AspireResourceKind` extension (consumed only)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Owning/extending Aspire kinds.\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/534/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/534/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/535", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/535/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/535/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/535/events", + "html_url": "https://github.com/rickylabs/netscript/issues/535", + "id": 4819114118, + "node_id": "I_kwDOSxcnO88AAAABHz3Yhg", + "number": 535, + "title": "[process-manager PM-24] pm scaffold.plugin.json + plugin add typed glue (pm.config.ts)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:40Z", + "updated_at": "2026-07-11T21:15:01Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe pm plugin's `scaffold.plugin.json` + `plugin add process-manager` typed glue: emits `pm.config.ts` via `defineProcessGraph(...)` (E10), pre-seeded by the PM-22 resolvers. **Typesafe codegen only — no vendored source** (#157 law).\n\n## Scope\n- Archetype / area: `plugins/process-manager` scaffold manifest + CLI glue\n- Part of #510\n- Depends on: #512, #533 · Blocks: —\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §4 (D5-5) · `plan.md` §4 PM-24, E10\n\n## Acceptance criteria\n- [ ] gate: `plugin add` emits only typesafe userland glue (factory/AST — never string templates/copies)\n- [ ] gate: `scaffold.plugins` e2e green with the pm plugin added\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- JSR publish of `plugins/process-manager` (workspace-only per doctrine 05 — installs via `plugin add`).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/535/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/535/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/536", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/536/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/536/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/536/events", + "html_url": "https://github.com/rickylabs/netscript/issues/536", + "id": 4819114615, + "node_id": "I_kwDOSxcnO88AAAABHz3adw", + "number": 536, + "title": "[process-manager PM-25] netscript pm CLI router + read verbs (+ degraded-local reads)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:44Z", + "updated_at": "2026-07-11T21:15:03Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe `netscript pm` CLI group (OF-1): router + read verbs — `status`/`logs`/`doctor`/`init`/`add`/`remove`/`explain` — human + `--json` output equal to the contract schemas. **Degraded-local reads defined (F-9):** control plane unreachable → read verbs fall back to `OsServicePort` status/journal reads + KV registry snapshot, clearly marked `source: os-layer (degraded)`; mutations refuse with a pointer at `pm dev`/service start — never silently stale.\n\n## Scope\n- Archetype / area: `packages/cli` pm command group (Archetype 6)\n- Part of #510\n- Depends on: #520, #522 · Blocks: PM-26, PM-28, PM-30\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §1 (PMS-1) · `plan.md` §4 PM-25\n\n## Acceptance criteria\n- [ ] gate: `--json` output validates against the contract schemas (same shapes, no CLI-only dialect)\n- [ ] gate: degraded mode tested: reads work marked `source: os-layer (degraded)`; mutations refuse with guidance\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Lifecycle verbs (PM-26); monitor (PM-28).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/536/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/536/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/537", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/537/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/537/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/537/events", + "html_url": "https://github.com/rickylabs/netscript/issues/537", + "id": 4819115071, + "node_id": "I_kwDOSxcnO88AAAABHz3cPw", + "number": 537, + "title": "[process-manager PM-26] Lifecycle verbs via the shared CommandInvokePort shape", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:49Z", + "updated_at": "2026-07-11T21:15:04Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nLifecycle verbs — `start`/`stop`/`restart`/`reload`/`block`/`unblock`/`terminate`/`token`/`enable-service`/`disable-service` — via the shared `CommandInvokePort` shape (E4). Verbs that are not contract routes (`reload`, `enable-service`, `disable-service`) map onto contract routes or `OsServicePort` ops — **never mint hidden routes**.\n\n## Scope\n- Archetype / area: `packages/cli` pm command group\n- Part of #510\n- Depends on: #536, #523, #529 · Blocks: PM-30\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §1.2 + §5.3 (PMS-2) · `plan.md` §4 PM-26, E4\n\n## Acceptance criteria\n- [ ] gate: verb→route/OsServicePort mapping table implemented exactly as E4 records it\n- [ ] gate: mutations require the bearer token (PM-12) — anonymous mutation refused in tests\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Dashboard `CommandInvokePort` first-definition (#400 owns it by default — bidirectional edge recorded).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/537/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/537/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/538", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/538/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/538/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/538/events", + "html_url": "https://github.com/rickylabs/netscript/issues/538", + "id": 4819115670, + "node_id": "I_kwDOSxcnO88AAAABHz3elg", + "number": 538, + "title": "[process-manager PM-27] pm dev: foreground multiplexer over the engine dev loop", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:53Z", + "updated_at": "2026-07-11T21:15:05Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\n`netscript pm dev`: foreground multiplexer over the PM-8 engine dev loop — prefixed logs, dependency-order startup, in-loop restart, Ctrl+C teardown. The `--no-aspire` dev fallback story.\n\n## Scope\n- Archetype / area: `packages/cli` pm command group\n- Part of #510\n- Depends on: #519, #533 · Blocks: PM-30\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §1.3 (PMS-3) · `plan.md` §4 PM-27, E13\n\n## Acceptance criteria\n- [ ] gate: `pm run` (one-shot single spec) and `pm dev` (supervised graph) both ship (E13)\n- [ ] gate: prefixed multiplexed output; Ctrl+C tears the graph down in order on both platforms\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Daemonization (dev is foreground by design — C1).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/538/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/538/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/539", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/539/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/539/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/539/events", + "html_url": "https://github.com/rickylabs/netscript/issues/539", + "id": 4819116109, + "node_id": "I_kwDOSxcnO88AAAABHz3gTQ", + "number": 539, + "title": "[process-manager PM-28] pm monitor: live status + follow stream (no TUI lib)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:27:57Z", + "updated_at": "2026-07-11T21:15:07Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\n`netscript pm monitor`: live scrolling status + log stream over PM-13's event stream. No terminal-TUI library dependency (E12 — near-zero-dep; the rich live view belongs to the web console). NDJSON under `--json`.\n\n## Scope\n- Archetype / area: `packages/cli` pm command group\n- Part of #510\n- Depends on: #536, #524 · Blocks: —\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §1.4 (PMS-4) · `plan.md` §4 PM-28, E12\n\n## Acceptance criteria\n- [ ] gate: live stream renders without a TUI dependency; NDJSON mode validates against contract event schemas\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Charts/dashboards (PM-29).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/539/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/539/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/540", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/540/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/540/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/540/events", + "html_url": "https://github.com/rickylabs/netscript/issues/540", + "id": 4819116874, + "node_id": "I_kwDOSxcnO88AAAABHz3jSg", + "number": 540, + "title": "[process-manager PM-29] Admin console: Fresh app, browser-served by the control plane", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898770, + "node_id": "LA_kwDOSxcnO88AAAACp3ymkg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:fresh-ui", + "name": "area:fresh-ui", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11402858732, + "node_id": "LA_kwDOSxcnO88AAAACp6nQ7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:service", + "name": "area:service", + "color": "bfdadc", + "default": false, + "description": "packages/service" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:01Z", + "updated_at": "2026-07-11T21:15:09Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe admin console as a Fresh app served by the control-plane service (`@netscript/fresh-ui`), contract-first over the PM-9 routes — **no new routes minted for the UI**. Browser-served mode is the always-ships path (OF-2); desktop packaging (PM-32) and dashboard panel (PM-33) layer on top.\n\n## Scope\n- Archetype / area: console app under `plugins/process-manager` (SCOPE-frontend)\n- Part of #510\n- Depends on: #520, #521, #522, #523, #524 · Blocks: PM-32, PM-33\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §3 (PMS-5) · `plan.md` §4 PM-29\n\n## Acceptance criteria\n- [ ] gate: console consumes only the 18 contract routes via the typed client (no bespoke endpoints)\n- [ ] gate: auth = the same bearer token (PM-12); no separate UI auth\n- [ ] gate: ships on fresh-ui L2 + local composition if the L3 `blocks/` promotion lags (plan §9 residual 4)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Desktop packaging (PM-32); `DashboardPanelContribution` (PM-33).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/540/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/540/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/541", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/541/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/541/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/541/events", + "html_url": "https://github.com/rickylabs/netscript/issues/541", + "id": 4819117457, + "node_id": "I_kwDOSxcnO88AAAABHz3lkQ", + "number": 541, + "title": "[process-manager PM-30] Docs wave: 7 pages + cli-reference staleness fix", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11279345215, + "node_id": "LA_kwDOSxcnO88AAAACoE0mPw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:docs", + "name": "area:docs", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11280508930, + "node_id": "LA_kwDOSxcnO88AAAACoF7oAg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:docs", + "name": "type:docs", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:06Z", + "updated_at": "2026-07-11T21:15:12Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe pm docs wave (D5 §5): 7 pages (concept, quickstart dev, production bare-metal guide, config reference, CLI reference, console guide, troubleshooting) including the **same-wave `cli-reference.md` staleness fix** + the `pm` verb table.\n\n## Scope\n- Archetype / area: docs site (SCOPE-docs)\n- Part of #510\n- Depends on: #536, #537, #538 · Blocks: PM-31 (merge-readiness)\n\n## Design source\n- `research/design/d5-config-scaffold-docs-rfc.md` §5 (D5-6 + PMS-8) · `plan.md` §4 PM-30\n\n## Acceptance criteria\n- [ ] gate: docs link-check + Lume build green; no compounding of the cli-reference staleness\n- [ ] gate: Windows/Linux capability asymmetry stated plainly (R1)\n- [ ] gate: journald/Servy log-ownership interplay documented (PM-7)\n\n## Non-scope\n- Marketing/positioning pages (docs-cut epic owns those).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/541/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/541/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/542", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/542/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/542/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/542/events", + "html_url": "https://github.com/rickylabs/netscript/issues/542", + "id": 4819118075, + "node_id": "I_kwDOSxcnO88AAAABHz3n-w", + "number": 542, + "title": "[process-manager PM-31] Merge-readiness e2e: scaffold suites + JSR-scoped publish dry-run", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399899081, + "node_id": "LA_kwDOSxcnO88AAAACp3ynyQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/gate:e2e", + "name": "gate:e2e", + "color": "d4c5f9", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11402857629, + "node_id": "LA_kwDOSxcnO88AAAACp6nMnQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:test", + "name": "type:test", + "color": "c5def5", + "default": false, + "description": "Tests only" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:10Z", + "updated_at": "2026-07-11T21:15:14Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe epic's merge-readiness gate: `scaffold.plugins` + `scaffold.runtime` e2e + publish dry-run scoped to the **JSR-published packages only** — `@netscript/deploy-core` + `@netscript/plugin-process-manager-core` (`plugins/process-manager` is workspace-only per doctrine 05; installs via `plugin add`, not JSR — F-8).\n\n## Scope\n- Archetype / area: e2e suites + publish surface\n- Part of #510\n- Depends on: all v1-min slices (PM-0..6, 8–12, 18–19, 21–22, 25–27, 30) · Blocks: epic close\n- Run once per epic branch wave, not per slice (expensive gate)\n\n## Design source\n- `plan.md` §4 PM-31 + §7 gate matrix\n\n## Acceptance criteria\n- [ ] gate: `deno task e2e:cli run scaffold.runtime --cleanup --format pretty` green with the pm plugin in the add set\n- [ ] gate: `scaffold.plugins` green\n- [ ] gate: publish dry-run green for deploy-core + plugin-process-manager-core (JSR set only)\n\n## Non-scope\n- Publishing `plugins/process-manager` to JSR (doctrine 05).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/542/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/542/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/543", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/543/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/543/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/543/events", + "html_url": "https://github.com/rickylabs/netscript/issues/543", + "id": 4819118600, + "node_id": "I_kwDOSxcnO88AAAABHz3qCA", + "number": 543, + "title": "[process-manager PM-32] Desktop packaging of the console (deno desktop, 5-target cross-compile)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898424, + "node_id": "LA_kwDOSxcnO88AAAACp3ylOA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:defer", + "name": "wave:defer", + "color": "ededed", + "default": false, + "description": "" + }, + { + "id": 11399898770, + "node_id": "LA_kwDOSxcnO88AAAACp3ymkg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:fresh-ui", + "name": "area:fresh-ui", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:15Z", + "updated_at": "2026-07-11T21:15:15Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nPackage the PM-29 console as a Deno 2.9 Desktop app via the #456 mechanics: `--backend cef` (bare-metal admin boxes can't assume WebView2), 5-target cross-compile, per-app-name persistent KV. **Documented gap inherited verbatim:** Windows auto-update stages-but-does-not-apply. Optional #451 in-process oRPC link as a soft optimization.\n\n## Scope\n- Archetype / area: console packaging (SCOPE-frontend)\n- Part of #510\n- Depends on: #540 · Soft deps: #456 (packaging), #451 (in-process link) — never M1 blockers\n- Slips to a later milestone if #456 slips (R8); browser-served mode is the always-ships path\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §3.2–3.4 (PMS-6) · `plan.md` §4 PM-32, R2\n\n## Acceptance criteria\n- [ ] gate: packaged binary serves the console with the loopback (or in-process) client on all 5 targets\n- [ ] gate: Windows auto-update caveat documented in the console guide\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- New console features — packaging only.\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/543/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/543/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/544", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/544/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/544/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/544/events", + "html_url": "https://github.com/rickylabs/netscript/issues/544", + "id": 4819119132, + "node_id": "I_kwDOSxcnO88AAAABHz3sHA", + "number": 544, + "title": "[process-manager PM-33] DashboardPanelContribution \"Process Control\" panel", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898424, + "node_id": "LA_kwDOSxcnO88AAAACp3ylOA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:defer", + "name": "wave:defer", + "color": "ededed", + "default": false, + "description": "" + }, + { + "id": 11399898770, + "node_id": "LA_kwDOSxcnO88AAAACp3ymkg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:fresh-ui", + "name": "area:fresh-ui", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/14", + "html_url": "https://github.com/rickylabs/netscript/milestone/14", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/14/labels", + "id": 16769025, + "node_id": "MI_kwDOSxcnO84A_-AB", + "number": 14, + "title": "0.0.1-beta.12", + "description": "Process Manager (epic #510)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 35, + "closed_issues": 0, + "state": "open", + "created_at": "2026-07-11T21:12:32Z", + "updated_at": "2026-07-11T21:15:17Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:20Z", + "updated_at": "2026-07-11T21:15:17Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nThe embedded \"Process Control\" panel via `DashboardPanelContribution` — **gated on CR-DDX-HOSTAGNOSTIC** (the change request to #400 asking that panel contributions be host-agnostic: descriptor host-neutral, `setup()` receives a host-provided context). Authored as an *adapter* over the pm's own console components, so the standalone path never blocks on #400.\n\n## Scope\n- Archetype / area: dashboard panel contribution (SCOPE-frontend)\n- Part of #510\n- Depends on: #540 + #400 CR resolution · **Slips if the CR is declined/unresolved** (R8)\n\n## Design source\n- `research/design/d4-cli-admin-console-surfaces.md` §4 (PMS-7) · `plan.md` §4 PM-33\n\n## Acceptance criteria\n- [ ] gate: one contribution renders in two host shells (dashboard + pm console) per the CR acceptance\n- [ ] gate: panel consumes the `ProcessManagerContract` client as its data source via the host context\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Redefining DDX-17 (#400 owns the contract change).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/544/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/544/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/545", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/545/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/545/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/545/events", + "html_url": "https://github.com/rickylabs/netscript/issues/545", + "id": 4819119912, + "node_id": "I_kwDOSxcnO88AAAABHz3vKA", + "number": 545, + "title": "[process-manager PM-34] systemd --user + linger non-root install mode", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898424, + "node_id": "LA_kwDOSxcnO88AAAACp3ylOA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:defer", + "name": "wave:defer", + "color": "ededed", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858442, + "node_id": "LA_kwDOSxcnO88AAAACp6nPyg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p3", + "name": "priority:p3", + "color": "0e8a16", + "default": false, + "description": "Low / nice-to-have" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11433624812, + "node_id": "LA_kwDOSxcnO88AAAACqX9E7A", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:process-manager", + "name": "epic:process-manager", + "color": "5319e7", + "default": false, + "description": "Process manager plugin epic (bare-metal supervisor + admin console, child of #327)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/2", + "html_url": "https://github.com/rickylabs/netscript/milestone/2", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/2/labels", + "id": 16635580, + "node_id": "MI_kwDOSxcnO84A_da8", + "number": 2, + "title": "0.0.1-stable", + "description": "0.0.1 stable. Acceptance criteria LOCKED (packages/bench/POSITIONING.md section 4, per #353 + user decisions on S1/S2). Stable extends beta with the falsifiable positioning verdict:\n1. All beta criteria hold.\n2. Competitor-PAIRED run — at least one measured paired run (NetScript vs >=1 D2 alternative) where NetScript is not worse on test_pass_rate AND strictly better on >=1 efficiency axis (turns_to_green / cost / wall_seconds). Moved here from beta per S1 decision (blocked on D2/D5/OQ2).\n3. Breadth — multi-task coverage (>=2 distinct build tasks) and N>=3 runs per cell for a stable median.\n4. Full rubric — composite scoring complete (0.20 reserve retired; bench Slice 5 rebind onto the sound baseContract landed).\nNote: allow-slow-types remains a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305).", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 5, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-12T16:58:59Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-06T12:28:24Z", + "updated_at": "2026-07-06T12:28:24Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/510", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Summary\nNon-root install mode: systemd `--user` units + `loginctl enable-linger` — the unprivileged bare-metal story.\n\n## Scope\n- Archetype / area: deploy-core systemd adapter\n- Part of #510\n- Depends on: #529, #531\n\n## Design source\n- `research/design/d3-deploy-integration-os-adapters.md` §D3.5 · `plan.md` §4 PM-34\n\n## Acceptance criteria\n- [ ] gate: `--user` + linger install path tested end-to-end on a systemd host\n- [ ] gate: capability descriptor reflects user-mode limitations (no `DynamicUser`, etc.)\n- [ ] gate: scoped check/lint/fmt wrappers green (`--ext ts,tsx`)\n\n## Non-scope\n- Windows equivalent (Servy already runs per-user).\n\n## Drift / Debt\n- none\n\n", + "closed_by": null, + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/545/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/545/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null + } +] \ No newline at end of file diff --git a/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-search-single-runtime.json b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-search-single-runtime.json new file mode 100644 index 000000000..4e9402cab --- /dev/null +++ b/.llm/runs/rfc-single-deployment--orchestrator/corpus/ns-search-single-runtime.json @@ -0,0 +1,10665 @@ +{ + "single-runtime": { + "total_count": 23, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/820", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/events", + "html_url": "https://github.com/rickylabs/netscript/issues/820", + "id": 4910209896, + "node_id": "I_kwDOSxcnO88AAAABJKvbaA", + "number": 820, + "title": "RFC: single deployment — enterprise installation layer, update lifecycle, PM foundation, single-runtime composition", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11402857794, + "node_id": "LA_kwDOSxcnO88AAAACp6nNQg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:research", + "name": "status:research", + "color": "fbca04", + "default": false, + "description": "Harness research phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11402858922, + "node_id": "LA_kwDOSxcnO88AAAACp6nRqg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/rfc", + "name": "rfc", + "color": "5319e7", + "default": false, + "description": "Request for Comments - substantial/breaking design change" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/3", + "html_url": "https://github.com/rickylabs/netscript/milestone/3", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/3/labels", + "id": 16635581, + "node_id": "MI_kwDOSxcnO84A_da9", + "number": 3, + "title": "Backlog / Triage", + "description": "Catch-all for accepted-but-unscheduled work and untriaged issues. Assign to a release milestone once scoped.", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 25, + "closed_issues": 10, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-17T09:55:56Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2026-07-17T09:55:55Z", + "updated_at": "2026-07-17T09:55:56Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Owner-mandated RFC (2026-07-17), grounded in the eis-chat POC (rickylabs/eis-chat#150, merge `aeaf2df` — \"Prototype full-stack Windows singleton desktop deployment\": no-Docker Windows `--singleton` around Deno Desktop, native window directly supervising the adjacent service graph, Garnet + six compiled Deno processes, Aspire sidecar telemetry, shipped as a single `.msi`).\n\n**The POC proves feasibility. This RFC extracts what SHOULD BE BUILT as foundational layers — we learn from the POC's seams, PRs, issues, and fixes; we do not copy its scripts into NetScript.**\n\n## Findings that motivate this RFC\n\n1. **Process manager is the missing foundation (beta.12 / epic #510).** The POC's supervision is launch-only: if a sidecar service dies, the frontend is unaware and the only recovery is re-opening the app. Crash survival, restart policy, health propagation to the UI, and lifecycle guarantees must exist BEFORE any desktop deployment ships on NetScript. Sequencing: PM epic (beta.12) is a hard prerequisite of the desktop deployment work.\n2. **Installation layer is a gap in BOTH epics.** The POC ships as a simple .NET AOT host. An enterprise-grade installation layer must handle much more (install/uninstall/repair, per-machine vs per-user, service registration, permissions/elevation, signing, first-run provisioning) and must be integrated WITHIN the Aspire stack, not bolted on outside it. Today this sits in neither the PM epic (#510) nor the desktop packaging issues (e.g. PM-32 #543) — scope it and place it.\n3. **Update-management lifecycle is unanswered for the combined output.** Deno Desktop ships an update story for a single desktop output; our artifact is a combined singleton (window + supervised service graph + sidecars). How updates apply atomically/safely across that graph (staged rollout, rollback, partial-update hazards, service downtime windows) needs a designed answer.\n4. **Composition with the single-runtime feature.** Prior single-runtime issues describe another packaging approach we intend to KEEP alongside the singleton desktop output. The RFC must define how the two compose (shared contracts? shared PM? divergent installers?) rather than letting them fork.\n\n## Deliverables\n\n- Gap analysis of epic #510 (PM) and the desktop packaging scope against the POC learnings, with concrete sub-issue adjustments (add/re-scope/re-milestone proposals for beta.12/beta.13 — proposals, owner ratifies).\n- RFC design for the enterprise installation layer inside the Aspire stack.\n- RFC design for update lifecycle of the combined singleton output.\n- Composition contract between single-runtime and singleton-desktop approaches.\n\nRun: `.llm/runs/rfc-single-deployment--orchestrator/` (Fable 5 · high generator, adversarial Sol · max). No implementation from this RFC; board changes are drafts until owner ratification.\n\nRefs #510, #543, #327, #400.\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/820/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/820/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/409", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/409/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/409/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/409/events", + "html_url": "https://github.com/rickylabs/netscript/issues/409", + "id": 4811837657, + "node_id": "I_kwDOSxcnO88AAAABHs7Q2Q", + "number": 409, + "title": "[telemetry T8] Real (non-mocked) grouped-trace e2e — Flow B (epic merge-gate)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399899081, + "node_id": "LA_kwDOSxcnO88AAAACp3ynyQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/gate:e2e", + "name": "gate:e2e", + "color": "d4c5f9", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857629, + "node_id": "LA_kwDOSxcnO88AAAACp6nMnQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:test", + "name": "type:test", + "color": "c5def5", + "default": false, + "description": "Tests only" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11421948999, + "node_id": "LA_kwDOSxcnO88AAAACqM0cRw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:telemetry-revamp", + "name": "epic:telemetry-revamp", + "color": "5319e7", + "default": false, + "description": "Telemetry revamp epic (Spine-1 enabler)" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/8", + "html_url": "https://github.com/rickylabs/netscript/milestone/8", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/8/labels", + "id": 16664990, + "node_id": "MI_kwDOSxcnO84A_kme", + "number": 8, + "title": "0.0.1-beta.6", + "description": null, + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 40, + "state": "closed", + "created_at": "2026-07-05T06:15:55Z", + "updated_at": "2026-07-13T22:25:01Z", + "due_on": null, + "closed_at": "2026-07-13T22:25:01Z" + }, + "comments": 1, + "created_at": "2026-07-05T06:18:50Z", + "updated_at": "2026-07-11T04:02:35Z", + "closed_at": "2026-07-11T04:02:35Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Part of #399 · Part of #301\n\n**Handle:** T8 · **Milestone:** `0.0.1-beta.6` · **Deps:** T4, T5, T6, T7 (asserts their behavior). **Merge-gate for the epic.**\n\n## Scope\n\nProposal §6. Generalize `otel-gates.ts` `BEHAVIOR_OTEL_TRACES` into the Flow-B assertion suite run under `scaffold.runtime`: single trace_id across all processes; parent/child edges (enqueue→dequeue, job.execute child of dispatch, callback child of job.execute); fan-in link present; no severed/fresh-trace (triggers regression guard); attribute floor (correlation.id + outcome). Wire a real streams consumer for the fan-in leg (do not rely on eis-chat's inert scaffold).\n\n## Acceptance\n\n- The suite runs against real processes + the real Aspire API (no span mocks) and is green.\n- Each assertion maps to a TC from the #402 convention; failure of the oRPC/triggers fixes would make a named assertion red (proving the guard bites).\n- Flow-B attribute-floor assertions use the #402 `netscript.*` namespacing law and semconv opt-in value.\n\nDesign source: `design/B-telemetry/epic-and-issues.md` (T8).\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/409/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/409/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/580", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/580/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/580/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/580/events", + "html_url": "https://github.com/rickylabs/netscript/issues/580", + "id": 4853453006, + "node_id": "I_kwDOSxcnO88AAAABIUnQzg", + "number": 580, + "title": "Codex remote control: enforce single-sender ownership and safe daemon recovery", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11333860063, + "node_id": "LA_kwDOSxcnO88AAAACo4z63w", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:tooling", + "name": "area:tooling", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11414741773, + "node_id": "LA_kwDOSxcnO88AAAACqF8jDQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:harness-v3", + "name": "epic:harness-v3", + "color": "3E4B9E", + "default": false, + "description": "Agentic Workflow Doctrine V3 program" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/1", + "html_url": "https://github.com/rickylabs/netscript/milestone/1", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/1/labels", + "id": 16635579, + "node_id": "MI_kwDOSxcnO84A_da7", + "number": 1, + "title": "0.0.1-beta.1", + "description": "First beta of the 0.0.1 line — a MINIMAL cuttable release of the current green state. The 0.0.1 line ships on an incremental-beta cadence (beta.1 -> beta.2 -> ... -> stable), mirroring the alpha line (alpha.1..alpha.19: 19 incremental prereleases). beta.1 is NOT a positioning gate; it publishes the framework as it stands today so the beta channel opens and later bets land incrementally.\n\nCut bar (all satisfied on main as of 2026-07-03):\n1. Soundness floor — plugin-service contract seam type-sound end-to-end (172a-2-SOUND, #332 CLOSED).\n2. Instrument honesty — bench `conformance` gate green (cast-free NetScript reference passes the frozen HTTP suite 10/10 with a real process restart proving @netscript/kv persistence; CI-guarded every run). Satisfied floor, not blocked work.\n3. Scaffold trust — `scaffold.runtime` e2e green (48/0).\n4. CI trio green — quality / check-test / deps-report succeed on main.\n5. Release machinery works — `deno task release:cut` (workspace+lock bump, preflight, publish:dry-run, ci --prod) and the `publish.yml` OIDC publish path, both proven across alpha.1..alpha.19.\n\nMOVED OUT of beta.1 (were in the prior LOCKED heavy bar):\n- self-bench t1+t2 test_pass_rate >=0.90 median -> beta.2 (regression-detector quality bar; blocked on bench decisions D5/OQ2).\n- competitor-PAIRED run, multi-task breadth, full composite rubric -> 0.0.1-stable (the falsifiable positioning verdict).\n\nNote: allow-slow-types is a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305) and does not count against the soundness/publish bar. Positioning verdict is a stable-line goal reached incrementally; see packages/bench/POSITIONING.md (owned by the road-to-stable lane).\n", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 38, + "state": "closed", + "created_at": "2026-07-02T22:30:05Z", + "updated_at": "2026-07-10T22:40:21Z", + "due_on": null, + "closed_at": "2026-07-04T08:05:22Z" + }, + "comments": 1, + "created_at": "2026-07-10T08:40:02Z", + "updated_at": "2026-07-10T19:53:21Z", + "closed_at": "2026-07-10T19:53:20Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/574", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Parent\n\nPart of #574. This is a reliability gate for using GPT-5.6 Sol max as the preferred supervised fallback.\n\n## Problem\n\nThe live WSL environment can report a running Codex daemon while `remote-control` fails because the app server is unmanaged. Concurrent `send-message-v2` calls can create rival threads in one worktree.\n\n## Scope\n\n- Detect managed, unmanaged, stale-socket, disconnected, and version-skew states.\n- Enforce one active sender per worktree with durable ownership/locking.\n- Refuse duplicate launches and steer existing threads through resume.\n- Inspect active sessions and child commands before repair.\n- Terminate only anchored Codex app-server PIDs and remove only the known stale socket.\n- Restart, pair, verify, and persist recovery evidence.\n- Test launch, mobile visibility, resume, daemon restart, rescue, sleep, and network reconnect.\n\n## Acceptance\n\n- Repeated launch/resume/reconnect tests remain mobile-visible and steerable.\n- Duplicate sends are deterministically blocked before spawning rival agents.\n- Repair refuses to interrupt active work and never uses broad process-name killing.\n- Daemon version/control-socket/app-server skew is diagnosed explicitly.\n- GPT-5.6 Sol max is not promoted to sole supervisor until this gate is proven repeatedly.", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/580/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/580/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/312", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/312/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/312/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/312/events", + "html_url": "https://github.com/rickylabs/netscript/pull/312", + "id": 4799324853, + "node_id": "PR_kwDOSxcnO87tXzHo", + "number": 312, + "title": "E3 — Agent loop + owned ChatClientPort seam (closes #242)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11333860050, + "node_id": "LA_kwDOSxcnO88AAAACo4z60g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:ready-merge", + "name": "status:ready-merge", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898652, + "node_id": "LA_kwDOSxcnO88AAAACp3ymHA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:ai-core", + "name": "area:ai-core", + "color": "1d76db", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399899350, + "node_id": "LA_kwDOSxcnO88AAAACp3yo1g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:ai-stack", + "name": "epic:ai-stack", + "color": "5319e7", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/1", + "html_url": "https://github.com/rickylabs/netscript/milestone/1", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/1/labels", + "id": 16635579, + "node_id": "MI_kwDOSxcnO84A_da7", + "number": 1, + "title": "0.0.1-beta.1", + "description": "First beta of the 0.0.1 line — a MINIMAL cuttable release of the current green state. The 0.0.1 line ships on an incremental-beta cadence (beta.1 -> beta.2 -> ... -> stable), mirroring the alpha line (alpha.1..alpha.19: 19 incremental prereleases). beta.1 is NOT a positioning gate; it publishes the framework as it stands today so the beta channel opens and later bets land incrementally.\n\nCut bar (all satisfied on main as of 2026-07-03):\n1. Soundness floor — plugin-service contract seam type-sound end-to-end (172a-2-SOUND, #332 CLOSED).\n2. Instrument honesty — bench `conformance` gate green (cast-free NetScript reference passes the frozen HTTP suite 10/10 with a real process restart proving @netscript/kv persistence; CI-guarded every run). Satisfied floor, not blocked work.\n3. Scaffold trust — `scaffold.runtime` e2e green (48/0).\n4. CI trio green — quality / check-test / deps-report succeed on main.\n5. Release machinery works — `deno task release:cut` (workspace+lock bump, preflight, publish:dry-run, ci --prod) and the `publish.yml` OIDC publish path, both proven across alpha.1..alpha.19.\n\nMOVED OUT of beta.1 (were in the prior LOCKED heavy bar):\n- self-bench t1+t2 test_pass_rate >=0.90 median -> beta.2 (regression-detector quality bar; blocked on bench decisions D5/OQ2).\n- competitor-PAIRED run, multi-task breadth, full composite rubric -> 0.0.1-stable (the falsifiable positioning verdict).\n\nNote: allow-slow-types is a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305) and does not count against the soundness/publish bar. Positioning verdict is a stable-line goal reached incrementally; see packages/bench/POSITIONING.md (owned by the road-to-stable lane).\n", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 38, + "state": "closed", + "created_at": "2026-07-02T22:30:05Z", + "updated_at": "2026-07-10T22:40:21Z", + "due_on": null, + "closed_at": "2026-07-04T08:05:22Z" + }, + "comments": 0, + "created_at": "2026-07-03T01:16:23Z", + "updated_at": "2026-07-03T01:21:26Z", + "closed_at": "2026-07-03T01:21:24Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/312", + "html_url": "https://github.com/rickylabs/netscript/pull/312", + "diff_url": "https://github.com/rickylabs/netscript/pull/312.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/312.patch", + "merged_at": "2026-07-03T01:21:24Z" + }, + "body": "## E3 — Agent loop + owned `ChatClientPort` seam\n\nCloses #242. Part of the AI-stack epic #238 (v1-min). Branch off clean `origin/main` (post-E2 merge).\n\n### What ships\n- **`@netscript/ai/agent` subpath** — a typestate agent loop: `idle → running → awaiting-tool → running → done | aborted | errored` (`isTerminalState` guard), `maxSteps` (default 8) with `AgentMaxStepsExceededError`, `AbortSignal.any(signal + stop())` cancellation, and **real provider `Usage`** summed from each `finish` event (no `chars/4` estimation).\n- **Owned `ChatClientPort`** (`src/ports/chat-client.ts`) — `stream(request, { signal? }): AsyncIterable` where `ChatClientEvent` is the owned union `text | tool-call | finish | error`; `finish` carries the provider's real `Usage` + `ChatFinishReason`. **No `@tanstack/ai` type appears in any public signature.**\n- **`ModelProviderPort.createChatClient?(modelId): ChatClientPort`** — optional seam (discovery-only providers may omit it); the loop injects via the narrower `ChatModelProviderPort`. Type-only import → no runtime cycle.\n- **Single TanStack bridge** (`src/adapters/tanstack-chat-client.ts`) — `toTanstackChatClient(adapter, meta)` wraps the `@tanstack/ai` text adapter as the owned port. Adapters use `import { X as Y }` aliasing, not casts.\n- **Sliding-window history** — `slidingWindowHistory` (`DEFAULT_HISTORY_WINDOW = 20`, keeps leading system messages + last N non-system, pure).\n\n### D-rulings folded in\n- **D3** — `createChatClient` returns the owned `ChatClientPort` on both adapters, closing **all 5** private-type-ref / SDK-leak paths (the author found a 5th: Anthropic `createChatClient` took an SDK-aliased model param → now an owned `ModelId` string narrowed against the runtime `ANTHROPIC_MODELS` catalog, throwing `AiError` on unknown, no cast). Full-export `deno doc --lint` → **0 private-type-ref, 0 TanStack leaks**.\n- **D4** — `packages/ai` enrolled into the `arch:check` doctrine chain (root `deno.json`) + `packages/ai/docs/architecture.md` added (runtime composition / A10, model registry, agent-loop typestate).\n- **D6** — while enrolling `packages/ai`, the `arch:check` A14 rule false-flagged E4's `.describe()` fluent tool-builder method as a Jest global (`\\b` boundary matched `.describe(`). Fixed the checker with a bare-global negative lookbehind (`.llm/tools/fitness/check-doctrine.ts`) — strictly removes false positives, cannot hide real bare-global Jest usage. Shipped here because E3's D4 enrollment is what exposes it and E3 cannot show a green `arch:check` without it (see run `drift.md` D6).\n\n### Evaluator verdict (Fable 5, session separate from author `a1b78b1d2ff71caf4`)\n- `deno task check` (root, `--unstable-kv`, 1941 files) → **0 fail**\n- `packages/ai` tests → **38/38 pass**\n- `deno task publish:dry-run` (no `--allow-slow-types`) → **Success**\n- full-export `deno doc --lint` → **0 private-type-ref**\n- CI `fmt:check` (`--ext ts,tsx`) → **0**; `deno task lint` → **0**\n- `deno task arch:check` → **green** (`ai` FAIL=0; A14 false-positive cleared by D6)\n- `deno.lock` LF-clean (0 CR); **no new `as`/`any`** casts (soundness LAW upheld)\n\n### Docs (#278 capstone)\nShips `@module` JSDoc on every new export + `packages/ai/docs/architecture.md`; README updated.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/312/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/312/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/7", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/7/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/7/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/7/events", + "html_url": "https://github.com/rickylabs/netscript/pull/7", + "id": 4600579300, + "node_id": "PR_kwDOSxcnO87jSbP1", + "number": 7, + "title": "Wave 1 — Contracts & schemas", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 41, + "created_at": "2026-06-05T22:30:31Z", + "updated_at": "2026-06-22T21:34:05Z", + "closed_at": "2026-06-06T20:10:44Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/7", + "html_url": "https://github.com/rickylabs/netscript/pull/7", + "diff_url": "https://github.com/rickylabs/netscript/pull/7.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/7.patch", + "merged_at": "2026-06-06T20:10:44Z" + }, + "body": "## Wave 1 — Contracts & schemas (Implementation Complete — READY FOR MERGE)\n\n**Run ID:** `feat-package-quality-wave1-contracts--contracts`\n**Branch:** `feat/package-quality-wave1-contracts`\n**Base:** `feat/package-quality`\n**PLAN-EVAL:** ✅ `PASS` (adjusted) — [see comment](https://github.com/rickylabs/netscript/pull/7#issuecomment-4636148166)\n\n### Units (3)\n\n| Unit | Archetype | Slow types | `deno doc --lint` | README | `/docs` | Tests |\n|------|-----------|-----------:|------------------:|--------|---------|-------|\n| `@netscript/runtime-config` | 1 — Small Contract | **0** | ✅ clean | 346 LOC ✓ | 8 files ✓ | 8 passed |\n| `@netscript/config` | 1 — Small Contract | **0** | ✅ clean | 255 LOC ✓ | 7 files ✓ | 10 passed |\n| `@netscript/contracts` | 1 — Small Contract | **0** | ✅ clean | 424 LOC ✓ | 7 files ✓ | 4 passed |\n\n### Changes\n\n- **`@netscript/runtime-config`**: Split 415-line `mod.ts` into `src/domain/`, `src/application/`, `src/diagnostics/`. Added README, docs, tests, `deno.json` tasks. Removed `console.*` from package code (structured diagnostics via `summarizeRuntimeConfig()`).\n- **`@netscript/config`**: Renamed `helpers.ts` → `src/domain/saga-inputs.ts`. Fixed `private-type-ref` on subpaths. Added JSDoc to all exported types. Removed Zod internal (`z.ZodType`) from public schema signatures. Expanded docs.\n- **`@netscript/contracts`**: Moved `helpers/` → `src/application/`. Exported referenced types (`ContractSchema`, `ContractObjectSchema`, `BaseContractProcedure`) to fix subpath `private-type-ref`. Added `getting-started.md` and `advanced/extending.md`.\n- **Cross-cutting**: Consumer validation passed on `packages/cli`, `plugins/sagas`, `plugins/workers`.\n\n### Review feedback addressed\n\n- `runtime-config` loader: hardened `isVersionPointer` guard, added test for malformed pointer paths ([`e4353a3`](https://github.com/rickylabs/netscript/commit/e4353a3))\n- `runtime-config` watcher: fixed unhandled rejection in `setTimeout` callback, cleared `debounceTimer` on abort ([`1ae5ca2`](https://github.com/rickylabs/netscript/commit/1ae5ca2))\n- `config` mod.ts: fixed JSDoc example to use real `inspectConfig` API\n- `config` schema: replaced `z.unknown().transform()` with explicit `SagasConfigSectionSchema` / `TriggersConfigSectionSchema`\n\n### Gate results (all 3 packages)\n\n| Gate | Result |\n|------|--------|\n| `deno publish --dry-run` | ✅ 0 slow types (all 3) |\n| `deno doc --lint` | ✅ clean (all entrypoints) |\n| `deno check` | ✅ 0 errors |\n| `deno lint` | ✅ 0 errors |\n| `deno fmt --check` | ✅ 0 errors |\n| `deno test --allow-all` | ✅ all pass |\n| F-14 Console-log lint | ✅ 0 hits in `src/` |\n| F-17 Abstract-derived co-location | ✅ no violations |\n\n### Architecture debt\n\n- **Closed:** `runtime-config` single-file refactor, `config` AP-16 (`helpers.ts`), `contracts` AP-16 (`helpers/`)\n- **Created:** `contracts/crud/` at root (inconsistent layout — acceptable for subpath stability), `config/src/domain/mod.ts` justified barrel (`arch:barrel-ok`)\n\n### Merge readiness\n\nPer `AGENTS.md`, the full CLI E2E suite is the merge-readiness gate. It has completed successfully.\n\n| Gate | Result |\n|------|--------|\n| `deno task e2e:cli` | ✅ passed — `passed=41 failed=0 skipped=0` |\n| Runtime cleanup | ✅ `docker ps` empty afterward; `aspire ps` reported no running apphost |\n\nThe full suite exercised project scaffold, plugin add/list, DB init/generate/seed, generated checks, Aspire launch/waits, worker/saga/trigger runtime gates, plugin doctor, OTEL webhook, OTEL trace-chain validation, and cleanup.\n\n---\n\n*Plan & Design phase: [see original PR description](https://github.com/rickylabs/netscript/pull/7#issue-)*\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/7/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/7/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/248", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/248/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/248/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/248/events", + "html_url": "https://github.com/rickylabs/netscript/issues/248", + "id": 4796066481, + "node_id": "I_kwDOSxcnO88AAAABHd4qsQ", + "number": 248, + "title": "[AI-stack E9] @netscript/ai: OTel GenAI/MCP semconv telemetry adapter (./otel)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898424, + "node_id": "LA_kwDOSxcnO88AAAACp3ylOA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:defer", + "name": "wave:defer", + "color": "ededed", + "default": false, + "description": "" + }, + { + "id": 11399898652, + "node_id": "LA_kwDOSxcnO88AAAACp3ymHA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:ai-core", + "name": "area:ai-core", + "color": "1d76db", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399899350, + "node_id": "LA_kwDOSxcnO88AAAACp3yo1g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:ai-stack", + "name": "epic:ai-stack", + "color": "5319e7", + "default": false, + "description": "" + }, + { + "id": 11399899452, + "node_id": "LA_kwDOSxcnO88AAAACp3ypPA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/gate:jsr", + "name": "gate:jsr", + "color": "d4c5f9", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858373, + "node_id": "LA_kwDOSxcnO88AAAACp6nPhQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p2", + "name": "priority:p2", + "color": "fbca04", + "default": false, + "description": "Medium" + }, + { + "id": 11421948999, + "node_id": "LA_kwDOSxcnO88AAAACqM0cRw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:telemetry-revamp", + "name": "epic:telemetry-revamp", + "color": "5319e7", + "default": false, + "description": "Telemetry revamp epic (Spine-1 enabler)" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/2", + "html_url": "https://github.com/rickylabs/netscript/milestone/2", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/2/labels", + "id": 16635580, + "node_id": "MI_kwDOSxcnO84A_da8", + "number": 2, + "title": "0.0.1-stable", + "description": "0.0.1 stable. Acceptance criteria LOCKED (packages/bench/POSITIONING.md section 4, per #353 + user decisions on S1/S2). Stable extends beta with the falsifiable positioning verdict:\n1. All beta criteria hold.\n2. Competitor-PAIRED run — at least one measured paired run (NetScript vs >=1 D2 alternative) where NetScript is not worse on test_pass_rate AND strictly better on >=1 efficiency axis (turns_to_green / cost / wall_seconds). Moved here from beta per S1 decision (blocked on D2/D5/OQ2).\n3. Breadth — multi-task coverage (>=2 distinct build tasks) and N>=3 runs per cell for a stable median.\n4. Full rubric — composite scoring complete (0.20 reserve retired; bench Slice 5 rebind onto the sound baseContract landed).\nNote: allow-slow-types remains a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305).", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 5, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-12T16:58:59Z", + "due_on": null, + "closed_at": null + }, + "comments": 2, + "created_at": "2026-07-02T15:51:51Z", + "updated_at": "2026-07-05T08:29:18Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Add an `@netscript/ai/otel` adapter that maps GenAI/MCP calls to OTel GenAI (`gen_ai.*`) and MCP (`mcp.*`) semantic-convention spans via an injected `TelemetryPort`, without pulling telemetry into core.\n\n## Context\n\nPart of epic #238 · cluster ENGINE · wave v1 · depends-on E1\n\nE9 sits downstream of the core engine contract (E1) and is the single sanctioned exception to the \"core has zero `@netscript/*` runtime deps\" rule: it is scoped now so the port shape in E1 is designed with an observability seam from day one, rather than retrofitted after adapters/fresh-ai land.\n\n## Problem / motivation\n\n`@netscript/ai` core has no tracing story, and the only prior art in-repo (eis-chat) has no GenAI/MCP semconv spans at all — calls are opaque in traces. Left unaddressed, either (a) adapters/providers each hand-roll ad-hoc spans with inconsistent attribute names, or (b) core absorbs a direct `@netscript/telemetry` dependency to \"just wire it in,\" breaking the zero-dep core invariant every other `@netscript/ai` slice depends on. This slice closes that gap once, behind a port, so instrumentation is opt-in and centralized.\n\n## Scope\n\n### Ships\n\n- `packages/ai/otel/mod.ts` (or `@netscript/ai` `./otel` subpath entry) exporting a `TelemetryPort`-conformant adapter, e.g. `createOtelTelemetryAdapter(...)`.\n- Span mapping for GenAI calls (`gen_ai.system`, `gen_ai.request.model`, `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, etc.) sourced from the real usage event (per ratified usage decision), not estimated token counts.\n- Span mapping for MCP tool/resource invocations (`mcp.tool.name`, `mcp.method.name`, etc.) where core exposes MCP call boundaries.\n- Import of `@netscript/telemetry` confined to this subpath only.\n- Wiring notes/tests showing the adapter satisfies the `TelemetryPort` contract defined in E1.\n\n### Out of scope\n\n- Defining the `TelemetryPort` interface itself and the injection point in the engine — owned by E1.\n- In-process vs. gateway execution modes — owned by the ENGINE slice(s) implementing `--gateway`.\n- Provider-specific span enrichment (e.g. Anthropic-only attributes) — owned by each provider subpath slice (e.g. `@netscript/ai/anthropic`).\n- fresh/ai or fresh-ui consumption of traces — out of this cluster entirely.\n\n## Public surface\n\n- Subpath: `@netscript/ai/otel`\n- File: `packages/ai/otel/mod.ts` (with `@module` JSDoc, <=20 exports)\n- Primary export: `createOtelTelemetryAdapter(options): TelemetryPort` (name may be finalized against E1's port signature, but must remain the sole factory export for this subpath)\n- No changes to `@netscript/ai`'s root/core exports; core continues to accept `TelemetryPort` only as an injected dependency.\n\n## Acceptance & fitness gates\n\n- [ ] F-3: layering respects domain -> ports -> application -> adapters; `deno task arch:check` passes; only `packages/ai/otel/**` imports `@netscript/telemetry`, verified by grep/arch:check.\n- [ ] F-5: `./otel` mod.ts has `@module` JSDoc and public-surface JSDoc; <=20 exports.\n- [ ] F-6 (gate:jsr): `packages/ai/otel` publishes via `deno task publish:dry-run` WITHOUT `--allow-slow-types`.\n- [ ] F-13: adapter lifecycle (span start/end, flush/shutdown) has explicit runtime declarations; no implicit background timers.\n- [ ] Unit test asserts GenAI span attributes are populated from the real finish/usage event, not a `chars/4` estimate.\n- [ ] Unit test asserts core (`@netscript/ai` without `./otel`) has zero transitive dependency on `@netscript/telemetry` (import-graph check).\n\n## Dependencies\n\nDepends on E1 (GitHub numbers tracked in the #238 DAG checklist). Not blocked by #239.\n\n## Size\n\nM\n\n\n\nPart of #238\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/248/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/248/timeline", + "performed_via_github_app": null, + "state_reason": null, + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/770", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/770/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/770/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/770/events", + "html_url": "https://github.com/rickylabs/netscript/pull/770", + "id": 4869289207, + "node_id": "PR_kwDOSxcnO87w2Ghc", + "number": 770, + "title": "fix(cli): pin plugin CLI JSR specifiers — unpinned specs cannot resolve on a prerelease line", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817839, + "node_id": "LA_kwDOSxcnO88AAAACoEUaLw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:fix", + "name": "type:fix", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11492565250, + "node_id": "LA_kwDOSxcnO88AAAACrQKhAg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:shipped", + "name": "status:shipped", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11497601143, + "node_id": "LA_kwDOSxcnO88AAAACrU94dw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:ai", + "name": "area:ai", + "color": "ededed", + "default": false, + "description": null + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/12", + "html_url": "https://github.com/rickylabs/netscript/milestone/12", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/12/labels", + "id": 16769022, + "node_id": "MI_kwDOSxcnO84A_9_-", + "number": 12, + "title": "0.0.1-beta.10", + "description": "Dev Dashboard (epic #400)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 53, + "state": "open", + "created_at": "2026-07-11T21:12:30Z", + "updated_at": "2026-07-17T08:20:16Z", + "due_on": null, + "closed_at": null + }, + "comments": 2, + "created_at": "2026-07-12T23:57:31Z", + "updated_at": "2026-07-16T17:52:17Z", + "closed_at": "2026-07-16T17:52:08Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/770", + "html_url": "https://github.com/rickylabs/netscript/pull/770", + "diff_url": "https://github.com/rickylabs/netscript/pull/770.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/770.patch", + "merged_at": "2026-07-16T17:52:08Z" + }, + "body": "## Summary\n\nFixes the published-mode-only failure of the `scaffold.plugin.ai.lifecycle` E2E gate — **and the framework bug behind it**, which is the larger half.\n\nCloses #763\n\n## Root cause (the filed hypothesis was wrong)\n\nThe issue guessed \"barrel re-emit / JSR module resolution\". It is neither. The gate never reaches that code.\n\nA bare `jsr:@netscript/plugin-ai` specifier carries **no version constraint**, so Deno resolves it as `*` — and **semver `*` does not match pre-release versions**. Every `@netscript/plugin-ai` version is a `0.0.1-beta.x` pre-release, so its `meta.json` reports `\"latest\": null` and resolution fails outright:\n\n```\nerror: Could not find version of '@netscript/plugin-ai' that matches specified version constraint '*'\n```\n\nThat is the whole 124 ms \"fast-fail\" — the process dies before any tool is added or wired.\n\n**Nothing was missing from the beta.9 publish.** `@netscript/plugin-ai@0.0.1-beta.9` *is* on JSR. The specifier simply cannot select it.\n\nIt is published-mode-only because locally the workspace import map short-circuits JSR entirely, so the unpinned specifier is never resolved against the registry.\n\n## Scope is wider than the test\n\n`resolvePluginCliSpecifier()` had the same defect, so **a real user running any framework plugin verb against a published pre-release plugin hits the identical wall** — not just the E2E gate. Fixing only the test would have left the actual bug shipped.\n\n```ts\n// before — never pinned a version\nconst spec = pkg.startsWith('jsr:') ? pkg : `jsr:${pkg}`;\nreturn spec.endsWith('/cli') ? spec : `${spec}/cli`;\n```\n\nNow an unpinned `@netscript/*` spec is pinned to `NETSCRIPT_RELEASE_VERSION` (imported from the CLI's own `deno.json` — the existing lockstep source of truth, not a new one). Already-pinned specs and third-party packages pass through **unchanged**.\n\n## The durable part: a version-drift guard\n\n`Deno.test('no version-less NetScript JSR specifiers in CLI command sources')` — a repo-wide guard, so this class cannot silently return while we are on a pre-release line.\n\nThat guard is being widened further in the #769 work, which found the **same defect in the scaffold and GitHub-workflow templates written into user projects**. One root cause, five surfaces.\n\n## Validation\n\n- `packages/cli`: **371 passed (407 steps), 0 failed**\n- Zero new suppressions (`as never` / `as unknown as` / `@ts-*` / `deno-lint-ignore` / `: any`)\n- Specifier matrix asserted: unpinned → pinned; `jsr:`+`/cli` → pinned; already-pinned → untouched; third-party → untouched\n\n**Not proven:** the published-mode E2E (`e2e:cli:prod`) has **not** been re-run — it needs the published artifact. This is verified by unit tests and by direct reproduction of the root cause against live JSR, not by the prod gate. Stated explicitly so the reviewer knows what remains open.\n\n## Harness\n\nTier-D Codex slice, reviewed by the Tier-A supervisor (opposite family). Run dir: `.llm/runs/beta10-non-dashboard--claude/`, slice `763-pin-plugin-cli-specifier`. Not self-certified.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/770/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/770/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/581", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/581/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/581/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/581/events", + "html_url": "https://github.com/rickylabs/netscript/issues/581", + "id": 4853453156, + "node_id": "I_kwDOSxcnO88AAAABIUnRZA", + "number": 581, + "title": "harness policy: migrate canonical routing to GPT-5.6, Gemini, and opposite-family review", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11279345215, + "node_id": "LA_kwDOSxcnO88AAAACoE0mPw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:docs", + "name": "area:docs", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11333860063, + "node_id": "LA_kwDOSxcnO88AAAACo4z63w", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:tooling", + "name": "area:tooling", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11414741773, + "node_id": "LA_kwDOSxcnO88AAAACqF8jDQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:harness-v3", + "name": "epic:harness-v3", + "color": "3E4B9E", + "default": false, + "description": "Agentic Workflow Doctrine V3 program" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/1", + "html_url": "https://github.com/rickylabs/netscript/milestone/1", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/1/labels", + "id": 16635579, + "node_id": "MI_kwDOSxcnO84A_da7", + "number": 1, + "title": "0.0.1-beta.1", + "description": "First beta of the 0.0.1 line — a MINIMAL cuttable release of the current green state. The 0.0.1 line ships on an incremental-beta cadence (beta.1 -> beta.2 -> ... -> stable), mirroring the alpha line (alpha.1..alpha.19: 19 incremental prereleases). beta.1 is NOT a positioning gate; it publishes the framework as it stands today so the beta channel opens and later bets land incrementally.\n\nCut bar (all satisfied on main as of 2026-07-03):\n1. Soundness floor — plugin-service contract seam type-sound end-to-end (172a-2-SOUND, #332 CLOSED).\n2. Instrument honesty — bench `conformance` gate green (cast-free NetScript reference passes the frozen HTTP suite 10/10 with a real process restart proving @netscript/kv persistence; CI-guarded every run). Satisfied floor, not blocked work.\n3. Scaffold trust — `scaffold.runtime` e2e green (48/0).\n4. CI trio green — quality / check-test / deps-report succeed on main.\n5. Release machinery works — `deno task release:cut` (workspace+lock bump, preflight, publish:dry-run, ci --prod) and the `publish.yml` OIDC publish path, both proven across alpha.1..alpha.19.\n\nMOVED OUT of beta.1 (were in the prior LOCKED heavy bar):\n- self-bench t1+t2 test_pass_rate >=0.90 median -> beta.2 (regression-detector quality bar; blocked on bench decisions D5/OQ2).\n- competitor-PAIRED run, multi-task breadth, full composite rubric -> 0.0.1-stable (the falsifiable positioning verdict).\n\nNote: allow-slow-types is a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305) and does not count against the soundness/publish bar. Positioning verdict is a stable-line goal reached incrementally; see packages/bench/POSITIONING.md (owned by the road-to-stable lane).\n", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 38, + "state": "closed", + "created_at": "2026-07-02T22:30:05Z", + "updated_at": "2026-07-10T22:40:21Z", + "due_on": null, + "closed_at": "2026-07-04T08:05:22Z" + }, + "comments": 2, + "created_at": "2026-07-10T08:40:03Z", + "updated_at": "2026-07-10T20:12:39Z", + "closed_at": "2026-07-10T20:12:39Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "parent_issue_url": "https://api.github.com/repos/rickylabs/netscript/issues/574", + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Parent\r\n\r\nPart of #574. Planning may proceed in parallel; implementation/merge is blocked on the WSL/runtime foundation gates.\r\n\r\n## Outcome\r\n\r\nUpdate the canonical harness, skills, docs, launch contracts, templates, and generated Claude mirrors to the approved routing model.\r\n\r\n## Routing policy\r\n\r\n- GPT-5.6 Sol medium: normal implementation.\r\n- GPT-5.6 Luna max: small fixes and fast iteration.\r\n- GPT-5.6 Sol xhigh: deep technical analysis/research and complex integration.\r\n- GPT-5.6 Sol max: long-running planning and decision intelligence.\r\n- Opus 4.8 high: documentation, writing, design, review of GPT implementation, and interim mobile orchestration while Fable 5 is outside the Anthropic subscription.\r\n- Opus 4.8 low: Claude workflows.\r\n- Gemini 3.5 Flash: massive external research and extraction.\r\n- Fable 5 low: default mobile orchestrator once Anthropic restores Fable 5 to the subscription; restoration date is currently unknown.\n- Higher-effort Fable 5: explicit exceptional escalation; paid/on-demand while outside the subscription.\r\n- Claude implementation is reviewed by GPT-5.6 Sol xhigh; mixed authorship uses per-slice opposite-family or dual review.\r\n\r\n## Scope\r\n\r\nUpdate canonical lane policy, seed workflow, bootstrap guidance, Claude/Codex/harness skills, launcher enforcement, resource/retrieval docs, templates, active model references, and generated mirrors. Do not mass-rewrite historical `.llm/runs/**` records.\r\n\r\n## Acceptance\r\n\r\n- One canonical policy table is referenced rather than duplicated inconsistently.\r\n- Launchers enforce and record model/provider/effort instead of trusting prose.\r\n- Generator and evaluator remain separate sessions.\r\n- Generated Claude skills match their source skills.\r\n- Documentation clearly distinguishes mobile-visible native Claude from experimental gateway sessions.\r\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/581/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/581/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/29", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/29/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/29/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/29/events", + "html_url": "https://github.com/rickylabs/netscript/pull/29", + "id": 4639646020, + "node_id": "PR_kwDOSxcnO87lRQdL", + "number": 29, + "title": "Wave 5b (sdk): research + proposed plan & design [PLAN-EVAL pending]", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 27, + "created_at": "2026-06-11T10:43:25Z", + "updated_at": "2026-06-11T17:12:54Z", + "closed_at": "2026-06-11T17:12:54Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/29", + "html_url": "https://github.com/rickylabs/netscript/pull/29", + "diff_url": "https://github.com/rickylabs/netscript/pull/29.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/29.patch", + "merged_at": "2026-06-11T17:12:53Z" + }, + "body": "## Sub-wave 5b — `@netscript/sdk` (generator hand-off)\n\n**Scope:** RESEARCH + PLAN & DESIGN only. No implementation. Plan is **PROPOSED**, not locked — PLAN-EVAL is a separate session.\n\nRun dir: `.llm/tmp/run/feat-package-quality-wave5-apps--5b-sdk/` (research.md, plan.md, worklog.md, drift.md, context-pack.md, commits.md, measure-5b.json).\n\n### Measured baseline (raw deno, local)\n\n- `deno check` PASS across all 12 entrypoints\n- Combined doc-lint: **29** (9 private-type-ref / 2 missing-return / 18 jsdoc) — **7 of the 9 ptr live upstream in `plugin-streams-core`** (unexported package-owned types surfaced via sdk's `./streams` facade), not in sdk (drift D-1)\n- Publish dry-run: 2 slow types (the TanStack `any`-bridges) + 37 excluded-module from root `deno.json` exclude (drift D-2, predicted by 5a)\n- 0 tests, 3,117 LOC, 1 over-cap file (discovery 643L), 5 of 12 subpaths zero-consumer, F-11 `interfaces/` folder\n\n### Architecture mandate (umbrella drift, 2026-06-11 user feedback)\n\nPlan §2 delivers the composability layer map: **L0 `src/ports/`** (ContractLike algebra, CacheStore, ServiceTransport/ClientLinkFactory, QueryClientPort) → **L1 primitives** (CacheQuery SWR, KV store, discovery, otel) → **L2 factories** (createServiceClient, query factories/utils, collections) → **L3 one-liner `defineServices()`** whose outputs ARE the L2 values (no-cliff escape hatch). RFC 14 transport seam protected via internal link-factory port (D-8) — unified mode NOT implemented.\n\n### Plan highlights (19 slices, gates A3 ∪ A4)\n\n- src/ restructure, `interfaces/` → `src/ports/` (`./interfaces` → `./ports`), subpaths 12→10\n- Streams ptr fixed **upstream** via additive type exports in plugin-streams-core (cross-package slice, D-4)\n- `QueryClientPort` + `ServiceQueryUtils` + `QueryCollection` kill the tanstack leaks/slow types\n- `defineServices()` L3 preset (D-9, mandated; descopeable)\n- discovery split, jsdoc sweep, README/docs/tests-from-zero incl. type fixtures + live round-trip, final slice lifts root exclude\n\n### For PLAN-EVAL — review hot-spots\n\n1. D-6 `ServiceQueryUtils` typing budget (2 slices) — enough?\n2. D-9 `defineServices` — new surface during quality wave; name bikeshed\n3. D-4 cross-package additive-only slice in a Wave-4 package\n4. D-5 `QueryClientPort` widen-on-drift vs F-15 waiver\n5. D-3 subpath fold choices (openapi→root; telemetry/collections kept on RFC justification)\n\nNext step: PLAN-EVAL session reviews + locks (or bounces) `plan.md`.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/29/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/29/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/399", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/399/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/399/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/399/events", + "html_url": "https://github.com/rickylabs/netscript/issues/399", + "id": 4811833956, + "node_id": "I_kwDOSxcnO88AAAABHs7CZA", + "number": 399, + "title": "epic: telemetry-revamp — framework telemetry convention + ports/adapters + dashboard query surface (Spine-1 enabler)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11283930885, + "node_id": "LA_kwDOSxcnO88AAAACoJMfBQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:umbrella", + "name": "type:umbrella", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399899172, + "node_id": "LA_kwDOSxcnO88AAAACp3yoJA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:telemetry", + "name": "area:telemetry", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11421948999, + "node_id": "LA_kwDOSxcnO88AAAACqM0cRw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:telemetry-revamp", + "name": "epic:telemetry-revamp", + "color": "5319e7", + "default": false, + "description": "Telemetry revamp epic (Spine-1 enabler)" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/8", + "html_url": "https://github.com/rickylabs/netscript/milestone/8", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/8/labels", + "id": 16664990, + "node_id": "MI_kwDOSxcnO84A_kme", + "number": 8, + "title": "0.0.1-beta.6", + "description": null, + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 40, + "state": "closed", + "created_at": "2026-07-05T06:15:55Z", + "updated_at": "2026-07-13T22:25:01Z", + "due_on": null, + "closed_at": "2026-07-13T22:25:01Z" + }, + "comments": 2, + "created_at": "2026-07-05T06:17:06Z", + "updated_at": "2026-07-11T04:03:25Z", + "closed_at": "2026-07-11T04:03:25Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "## Epic — `telemetry-revamp` (enabler half of Spine-1)\n\nPart of #301 (Road to 0.0.1-stable). Co-lands with the `dev-dashboard` epic. **No closing keyword** — this umbrella closes by hand when all children land.\n\n### Problem\n\nTelemetry is a rich but internally-inconsistent package (forbidden `core/`, orphan module, no OTEL-adapter subpath), plugin instrumentation ranges A→F (workers reference; streams/ai from zero), a real W3C-parenting bug severs trigger traces, real span-links exist in exactly one place, and there is no typed query/export surface for the dashboard to consume. The dashboard (headline) cannot ship a trustworthy trace view until this enabler lands.\n\n### Outcome\n\nA framework-wide telemetry convention (TC-1..14), a doctrine-clean ports/adapters package with `./otel` + `./query` subpaths, every first-party plugin at TC-conformance, real fan-in span-links, the triggers bug fixed, a real (non-mocked) grouped-trace e2e assertion suite, and a NetScript-owned `@netscript/telemetry/query` contract the dashboard codes against.\n\n### Non-goals\n\nBaggage propagation (semconv Candidate only); dual-writing to an external backend (that's the app's OTLP-exporter choice); the Aspire resource-graph \"what's running\" surface (dev-dashboard / Aspire seam owns it).\n\n### Acceptance (epic-level)\n\nAll child issues closed; `scaffold.runtime` e2e green including the new `BEHAVIOR_OTEL_TRACES` Flow-B assertions; `deno doc --lint` clean on the full export set; the arch-debt Refactor entry for `packages/telemetry` closed with F-3/F-5/F-6 evidence; the dashboard consuming `@netscript/telemetry/query`.\n\n### Children\n\nT1 convention · T2 ports/adapters restructure · T3 thin-vs-SDK adapters · T4 W3C + triggers bugfix · T5 fan-in span-links · T6 oRPC + AI port · T7 query/export surface · T8 real grouped-trace e2e (epic merge-gate). T9 (AI OTel adapter, stable) is filed once as the cross-labelled FAI-17 (== #248) under `epic:ai-stack` + `epic:telemetry-revamp`.\n\n### Critical path to beta.6\n\n**T1 → T2 → T3 → T5 → T8** (fan-in links need the SDK adapter need the restructure). T4/T6/T7 parallelize after T2. T8 is the epic merge-gate; T9 is the stable tail.\n\nDesign source: `design/B-telemetry/proposal.md` + `epic-and-issues.md`.\n\n### Owner picks baked in\n\n- **OF-5 = allow opt-in SDK** — telemetry may ship an opt-in `@opentelemetry/sdk-*` adapter (`adapters/otel-sdk`) on the messaging fan-in path; the default build stays zero-runtime-dep (`adapters/otel-deno`), SDK selected only via `NETSCRIPT_TELEMETRY_PROVIDER`.\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/399/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/399/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/486", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/486/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/486/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/486/events", + "html_url": "https://github.com/rickylabs/netscript/pull/486", + "id": 4814848269, + "node_id": "PR_kwDOSxcnO87uIRB0", + "number": 486, + "title": "docs(harness): [S5] harness + skills revamp — release-gates single source + arch-debt reconcile (#306 remainder)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817848, + "node_id": "LA_kwDOSxcnO88AAAACoEUaOA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:impl", + "name": "status:impl", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11333860063, + "node_id": "LA_kwDOSxcnO88AAAACo4z63w", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:tooling", + "name": "area:tooling", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11402857510, + "node_id": "LA_kwDOSxcnO88AAAACp6nMJg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:chore", + "name": "type:chore", + "color": "c5def5", + "default": false, + "description": "Tooling, config, or housekeeping" + }, + { + "id": 11428092788, + "node_id": "LA_kwDOSxcnO88AAAACqSrbdA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:high", + "name": "priority:high", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11428092791, + "node_id": "LA_kwDOSxcnO88AAAACqSrbdw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:road-to-stable", + "name": "epic:road-to-stable", + "color": "ededed", + "default": false, + "description": null + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/7", + "html_url": "https://github.com/rickylabs/netscript/milestone/7", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/7/labels", + "id": 16656024, + "node_id": "MI_kwDOSxcnO84A_iaY", + "number": 7, + "title": "0.0.1-beta.5", + "description": "Deployment hardening + repo/process maturity (staging boundary before stable)", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 21, + "state": "closed", + "created_at": "2026-07-04T07:09:35Z", + "updated_at": "2026-07-13T22:25:04Z", + "due_on": null, + "closed_at": "2026-07-13T22:25:04Z" + }, + "comments": 6, + "created_at": "2026-07-05T23:31:31Z", + "updated_at": "2026-07-05T23:58:02Z", + "closed_at": "2026-07-05T23:58:01Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/486", + "html_url": "https://github.com/rickylabs/netscript/pull/486", + "diff_url": "https://github.com/rickylabs/netscript/pull/486.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/486.patch", + "merged_at": "2026-07-05T23:58:01Z" + }, + "body": "## [S5] Harness + skills revamp — REMAINING scope (#306)\n\nDelivers the open checklist items on issue #306 (beta.5 chores wave). Doc/spec only — no\n`packages/`/`plugins/` source touched, zero `deno.lock` churn. `Refs #306` (not a closing keyword —\nthe doctrine-06 archetype-5 reconcile remains deferred, see D4).\n\n### Deliverables\n\n**D1 — Release-gate wiring (done).** Added `.llm/harness/gates/release-gates.md` as the harness-side\n**single source** for the release-gate class (`scaffold.runtime`, `e2e-cli-prod`, composite release\ngate), keyed on *what the run does* rather than archetype, with definitions still owned by #309\nrelease engineering / `netscript-release`. Referenced (not duplicated) from `run-loop.md` §8, the\ngate taxonomy `README.md`, `archetype-gate-matrix.md`, and the evaluator `protocol.md` (new rule 14:\na red/unrun release gate blocks a release-cut pass).\n\n**D2 — Fold gotchas (done, mostly already present).**\n- `jsr-audit`: the 5 JSR hardening gotchas (self-referential subpath imports; top-level\n `import.meta`/`fromFileUrl` over https; import-attribute asset embedding; prerelease `latest=null`;\n `readmeSource=jsdoc`) were **already folded in**. What was missing is the headline: added the\n **`deno publish --dry-run` is NOT publish-equivalent** framing at Step 4 and the gotchas section —\n dry-run is a static pre-check, the verdict is a real-publish preflight plus `e2e-cli-prod`. Mirror\n regenerated via `sync-claude-skills`.\n- `openhands-handoff`: **no edit needed** — both the per-PR concurrency-cancel semantics\n (PR-comment↔PR-branch vs issue-comment↔main) and the IMPL-EVAL lock-churn reconcile were already\n in the skill (verified against current text). Recorded as satisfied.\n\n**D3 — Hygiene (done).**\n- `arch-debt.md` reconciled against the current `packages/` tree:\n - `packages/workers` task-executor.ts (1,287 LOC) and `packages/shared` datetime — both marked\n **RESOLVED (superseded)**: the packages no longer exist and the structural concerns are addressed\n by the successors (`plugin-workers-core` task-executor is now **26 LOC**; `shared` is deleted).\n Headings retained as historical record (matching the existing triggers/sagas supersession\n pattern).\n - The two **open** workers capability debts (non-Deno sandbox boundary, `createJobTools` no-op)\n relocated to `plugin-workers-core` headings — kept **OPEN**, never deleted.\n- Orphan tools `gh-watch.ts` + `gh-token.ts`: **already documented** in `workflow/tooling.md`\n (agentic table + the \"two durable GitHub infra utilities\" note + the wake table). Recorded as\n satisfied — no edit needed.\n- `SCOPE-frontend.md`: added `@netscript/fresh/ai` to the doctrine-boundary package list.\n\n**D4 — Doctrine-06 archetype-5 folder-shape (ASSESSED → DEFERRED).** The doctrine-06 \"Archetype 5\"\nMinimum shape nests contribution folders (`services/`, `database/`, `jobs/`, `streams/`,\n`verify-plugin.ts`) under `src/` and names sibling contract packages `@netscript/sagas` /\n`@netscript/workers`. **Neither matches reality:** real `plugins/*` place those folders at the **top\nlevel** as siblings of `src/`, and the sibling packages were renamed to `@netscript/plugin-*-core`\nduring the plugin re-architecture. The `ARCHETYPE-5-plugin.md` profile already treats the observed\nlayout as authoritative and explicitly defers the chapter reconciliation to the #305/#306\ndoctrine-revamp lane. Reconciling the chapter is a rewrite that must land coherently with plugin-v2\nfolder conventions (AI-stack #238 sequencing), not a drive-by edit in a chore run. Recorded as a new\n`doctrine-06-archetype-5-folder-shape` debt entry (open, DEBT_ACCEPTED); **no doctrine chapter edit\nforced.**\n\n### Validation\n\n- `sync-claude-skills --check`: **OK**, `staleFiles: []`.\n- `validate-claude-surface`: **ok:true** (CLAUDE.md, settings.json, .gitignore, skills mirror, hook\n lock-unchanged all pass).\n- `fmt`: `.llm/harness` markdown and `.agents/skills` markdown are **out of the repo `fmt`/`fmt:check`\n scope** (config `include` = `packages/**` + `plugins/**` `.ts(x)` only). This doc-only change does\n not regress the fmt gate.\n- Dead-link spot check: every cross-file path referenced in the touched files resolves; the new\n `#jsr-publish-gotchas-netscript-grounded` anchor target exists.\n- Zero `deno.lock` churn; clean working tree.\n\n### Commits\n\n- `0a9d8b18` docs(harness): wire release-gate class into a single source\n- `a48d687c` docs(jsr-audit): frame dry-run as non-authoritative, not publish-equivalent\n- `a21ffd0f` docs(harness): reconcile arch-debt vs packages tree; scope + doctrine notes\n\nRefs #306\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01MUhKsbXoyxesJHKXWeJzTE\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/486/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/486/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/364", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/364/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/364/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/364/events", + "html_url": "https://github.com/rickylabs/netscript/pull/364", + "id": 4801509083, + "node_id": "PR_kwDOSxcnO87te-Jn", + "number": 364, + "title": "[Deploy-S3+S4] Bare-metal deploy targets (OsServicePort + SystemdAdapter + deno compile) — PLAN", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11278817844, + "node_id": "LA_kwDOSxcnO88AAAACoEUaNA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:cli", + "name": "area:cli", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11399898530, + "node_id": "LA_kwDOSxcnO88AAAACp3ylog", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1", + "name": "wave:v1", + "color": "fbca04", + "default": false, + "description": "" + }, + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11402858001, + "node_id": "LA_kwDOSxcnO88AAAACp6nOEQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan-eval", + "name": "status:plan-eval", + "color": "fbca04", + "default": false, + "description": "Awaiting plan evaluation" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + }, + { + "id": 11403888254, + "node_id": "LA_kwDOSxcnO88AAAACp7mGfg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:deploy", + "name": "area:deploy", + "color": "BFDADC", + "default": false, + "description": "Deployment: CLI/Aspire deploy, targets, bare-metal" + }, + { + "id": 11403888283, + "node_id": "LA_kwDOSxcnO88AAAACp7mGmw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:deployment", + "name": "epic:deployment", + "color": "5319E7", + "default": false, + "description": "Enterprise deployment framework epic" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/1", + "html_url": "https://github.com/rickylabs/netscript/milestone/1", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/1/labels", + "id": 16635579, + "node_id": "MI_kwDOSxcnO84A_da7", + "number": 1, + "title": "0.0.1-beta.1", + "description": "First beta of the 0.0.1 line — a MINIMAL cuttable release of the current green state. The 0.0.1 line ships on an incremental-beta cadence (beta.1 -> beta.2 -> ... -> stable), mirroring the alpha line (alpha.1..alpha.19: 19 incremental prereleases). beta.1 is NOT a positioning gate; it publishes the framework as it stands today so the beta channel opens and later bets land incrementally.\n\nCut bar (all satisfied on main as of 2026-07-03):\n1. Soundness floor — plugin-service contract seam type-sound end-to-end (172a-2-SOUND, #332 CLOSED).\n2. Instrument honesty — bench `conformance` gate green (cast-free NetScript reference passes the frozen HTTP suite 10/10 with a real process restart proving @netscript/kv persistence; CI-guarded every run). Satisfied floor, not blocked work.\n3. Scaffold trust — `scaffold.runtime` e2e green (48/0).\n4. CI trio green — quality / check-test / deps-report succeed on main.\n5. Release machinery works — `deno task release:cut` (workspace+lock bump, preflight, publish:dry-run, ci --prod) and the `publish.yml` OIDC publish path, both proven across alpha.1..alpha.19.\n\nMOVED OUT of beta.1 (were in the prior LOCKED heavy bar):\n- self-bench t1+t2 test_pass_rate >=0.90 median -> beta.2 (regression-detector quality bar; blocked on bench decisions D5/OQ2).\n- competitor-PAIRED run, multi-task breadth, full composite rubric -> 0.0.1-stable (the falsifiable positioning verdict).\n\nNote: allow-slow-types is a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305) and does not count against the soundness/publish bar. Positioning verdict is a stable-line goal reached incrementally; see packages/bench/POSITIONING.md (owned by the road-to-stable lane).\n", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 38, + "state": "closed", + "created_at": "2026-07-02T22:30:05Z", + "updated_at": "2026-07-10T22:40:21Z", + "due_on": null, + "closed_at": "2026-07-04T08:05:22Z" + }, + "comments": 0, + "created_at": "2026-07-03T07:50:19Z", + "updated_at": "2026-07-03T13:55:35Z", + "closed_at": "2026-07-03T13:55:35Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/364", + "html_url": "https://github.com/rickylabs/netscript/pull/364", + "diff_url": "https://github.com/rickylabs/netscript/pull/364.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/364.patch", + "merged_at": "2026-07-03T13:55:34Z" + }, + "body": "## Bare-metal deploy targets (Deploy-S3 + S4) — IMPLEMENTED\n\nDelivers epic #327's **bare-metal deployment** lane as a single coherent Archetype-7 slice:\ngeneralize `WindowsServicePort` → `OsServicePort` + add a `SystemdAdapter` (**#339**, S3), and adopt\na `deno compile` single-binary bare-metal artifact (**#340**, S4).\n\n> This PR was originally opened planning-only; it now carries the **full implementation** (S0 port\n> expansion through the bare-metal targets), rebased onto `0.0.1-beta.1` `main`. The\n> `scaffold.runtime` merge-readiness gate is **GREEN** (`passed=48 failed=0`).\n\n### What landed\n- **`OsServicePort`** OS service-lifecycle seam (`public/ports/os-service-port.ts`) with two\n adapters: `ServyOsServiceAdapter` (Windows, `public/adapters/servy-os-service.ts`) and\n `SystemdOsServiceAdapter` (Linux, `public/adapters/systemd-os-service.ts`). Kernel systemd\n arg-builders/renderers live in `kernel/adapters/linux/systemd/**` (pure, no port dependency).\n- **Bare-metal `DeployTargetPort` targets** (`kernel/domain/deploy/service-deploy-target.ts` +\n linux/windows subclasses) that **compose** the OsServicePort + a `deno compile` build for 7-op\n conformance — evolving the shipped `windows-service` stub, not a parallel reimplementation.\n- **`deno compile`** single-binary artifact (S4): `kernel/adapters/deploy/compile/**`\n (`compile-platform.ts`, `runtime-detect.ts`).\n- Config: `deploy.targets.linux` added by spreading the base shape (`packages/config`).\n\n### Contract\nArchetype 7's uniform **7-op** adapter contract (`plan`/`emit` · `up` · `down` · `status` · `logs` ·\n`rollback` · `secrets`, subset allowed). This slice implements the bare-metal\n**`plan`/`up`/`down`/`status`/`logs`** subset. **`rollback` + `secrets` are declared-unsupported\n(methods omitted, not silent no-ops) and deferred to the core-convention hardening slice #341** —\ntests assert `rollback === undefined` / `secrets === undefined`. Legacy CLI verbs\n(`build`/`install`/`uninstall`) are retained as thin-router aliases (zero CLI-UX churn).\n\n### Key decisions (LD-1..LD-8 — delivered)\n- **LD-1** two-layer OsServicePort seam + composing bare-metal targets + compile build.\n- **LD-2** clean rename `WindowsServicePort` → `OsServicePort` (old files deleted, zero dangling refs).\n- **LD-3** canonical 7-op names; legacy verbs as thin-router aliases.\n- **LD-6** stays inside `packages/cli` (+ `packages/config` schema) — **no `deploy-core` extraction**\n this wave; **no `deno.lock` churn**.\n\n### Verification\n- `scaffold.runtime` merge-readiness E2E: **GREEN** (`passed=48 failed=0`, `SCAFFOLD_RUNTIME_EXIT=0`)\n on the rebased head.\n- Separate-session adversarial review: **PASS** — layering clean (no `kernel → public/**` import),\n type-soundness clean (post-review the one redundant safe cast was removed), rollback/secrets\n deferral clean.\n- Note: user-facing `deploy start/stop/status` verbs remain Windows-gated; Linux execution wiring\n onto the OsServicePort seam is deferred to #341 (the targets/adapters exist and are registered).\n\n## SKILL\n- `netscript-doctrine` — Archetype 7 (Deployment Target Adapter) placement, gates, debt.\n- `netscript-cli` — CLI/deploy command surface, thin-router conventions.\n- `netscript-harness` — harnessed slice workflow, drift/worklog artifacts.\n- `netscript-pr` — closing keywords, taxonomy labels, milestone.\n\nCloses #339\nCloses #340\nRefs #327\nRefs #341\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/364/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/364/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/114", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/114/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/114/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/114/events", + "html_url": "https://github.com/rickylabs/netscript/pull/114", + "id": 4721504388, + "node_id": "PR_kwDOSxcnO87pa9F-", + "number": 114, + "title": "PR-C: alpha-1 legacy/deprecated purge + hygiene (breaking)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 8, + "created_at": "2026-06-23T00:06:55Z", + "updated_at": "2026-06-23T01:53:08Z", + "closed_at": "2026-06-23T01:51:46Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/114", + "html_url": "https://github.com/rickylabs/netscript/pull/114", + "diff_url": "https://github.com/rickylabs/netscript/pull/114.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/114.patch", + "merged_at": "2026-06-23T01:51:46Z" + }, + "body": "## PR-C — project-wide alpha-1 legacy/deprecated purge + folded hygiene\n\nThird and final slice of the JSR-readiness program after PR-A (additive) and **PR-B #113** (breaking\nprod-readiness removals, merged). Removes the remaining alpha-1 legacy/deprecated surface that PR-B\ndid not own, and folds in the mechanical hygiene cleanup (PR-D dissolved into this PR).\n\n**Status:** draft — plan + research committed; **PLAN-EVAL (OpenHands minimax-M3) pending**. No\nimplementation slice until PLAN-EVAL returns PASS.\n\nBaseline: branched off PR-B's merged main `abb6e9a4`; every item re-grepped against that tip.\n\n### Breaking change\nThis is a breaking (subtractive) change at the alpha-1 pre-1.0 line. Per the lockstep single-version\nscheme, **no per-package version bump** — the repo-wide breaking bump lands once at JSR-publish prep\n(recorded as DEBT-1). Versions hold at `0.0.1-alpha.0`.\n\n### Removal manifest (final, post-re-verification)\n**Tier 1** (low-consumer aliases / dead stubs):\n- `updatePluginRegistry` no-op stub (cli plugin workspace-mutator) — config-driven path superseded it\n- `safeExtend` Zod-compat alias (fresh pagination-types) — 0 call consumers\n- `startWorkersStreamMirror` back-compat wrapper (plugins/workers producer) — 1 consumer, renamed\n\n**Tier 2** (the substantive slice):\n- aspire `ServiceEntry.DependsOn?` (`@deprecated → ServiceReferences`) + back-compat merge branch — 6\n consumers. Gated on proving `ServiceReferences` is a complete replacement before removal.\n\n**Two inventory items re-verified and EXCLUDED** (re-baselining caught these):\n- `packagesAsWorkspaceMembers` — a live, load-bearing scaffold seam (dynamic\n `hasLocalPackageWorkspace`, real `=== true` / `() => false` branches), NOT a dead always-true\n option. Not touched.\n- workers `streams/schema.ts schedule?` — deprecation ties to the deferred workers-cron→triggers\n unification (CRON-SUBSYSTEM-DUP) and is still wired into a projection mask. Deferred with that work.\n\n### Folded hygiene\n- **H1** untrack the 109-file `.llm/tmp/init-json-smoke/` accidental test-output + close the\n `.gitignore` gap (root cause)\n- **H2** remove 4 zero-ref scratch files\n- **H3** fix misleading \"Backward-compatible alias\" docstrings on the fresh query hooks +\n `FreshAppTelemetryOptions` (WORDING ONLY — these are canonical API; removal is a trap)\n- **H4** refresh 2 downstream doc refs for the removed Tier-1 symbols\n\n### arch-debt folded (record-only; not implemented here)\nRUN-ARTIFACT-ARCHIVAL-POLICY, PAGEBUILDER-LEGACY-COMPAT-TREE, FORMPAGEPROPS-PLAYGROUND-MIGRATION,\nREDIS-LEGACY-VALUE-FALLBACK, plus DEBT-1 (version timing) and DEBT-2 (db-init e2e flake) carried from\nPR-B.\n\n### Gates (at IMPL-EVAL)\nScoped check/lint/fmt (src ts/tsx); `deno doc --lint` per package; per-package `deno task test`;\npre-delete grep gate over templates/docs/scaffold; `deno task arch:check`; `deno task\npublish:dry-run`; `deno task e2e:cli run scaffold.runtime --cleanup --format pretty`. No `deno.lock`\nchurn; zero-cast.\n\nRun artifacts: `.llm/tmp/run/chore-alpha1-legacy-purge--purge/` (research.md, plan.md).\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/114/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/114/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/260", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/260/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/260/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/260/events", + "html_url": "https://github.com/rickylabs/netscript/issues/260", + "id": 4796070474, + "node_id": "I_kwDOSxcnO88AAAABHd46Sg", + "number": 260, + "title": "[AI-stack P2] @netscript/plugin-ai manifest + connector + scaffold + in-process emitters", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11399898895, + "node_id": "LA_kwDOSxcnO88AAAACp3ynDw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:feat", + "name": "type:feat", + "color": "a2eeef", + "default": false, + "description": "" + }, + { + "id": 11399899081, + "node_id": "LA_kwDOSxcnO88AAAACp3ynyQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/gate:e2e", + "name": "gate:e2e", + "color": "d4c5f9", + "default": false, + "description": "" + }, + { + "id": 11399899268, + "node_id": "LA_kwDOSxcnO88AAAACp3yohA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/wave:v1-min", + "name": "wave:v1-min", + "color": "0e8a16", + "default": false, + "description": "" + }, + { + "id": 11399899350, + "node_id": "LA_kwDOSxcnO88AAAACp3yo1g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:ai-stack", + "name": "epic:ai-stack", + "color": "5319e7", + "default": false, + "description": "" + }, + { + "id": 11399899452, + "node_id": "LA_kwDOSxcnO88AAAACp3ypPA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/gate:jsr", + "name": "gate:jsr", + "color": "d4c5f9", + "default": false, + "description": "" + }, + { + "id": 11399899578, + "node_id": "LA_kwDOSxcnO88AAAACp3ypug", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugin-ai", + "name": "area:plugin-ai", + "color": "1d76db", + "default": false, + "description": "" + } + ], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/4", + "html_url": "https://github.com/rickylabs/netscript/milestone/4", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/4/labels", + "id": 16640504, + "node_id": "MI_kwDOSxcnO84A_en4", + "number": 4, + "title": "0.0.1-beta.2", + "description": "Second beta of the 0.0.1 line. Holds the first incremental bets after the beta.1 cut — the nearest-term (wave:v1-min / p0-marquee) deliverables plus the first bench quality bar. Cut when these land green; nothing here blocks the beta.1 cut.\n\nScope:\n- AI stack near-term: durable-CHAT streams anchor (#219, ship-first), plugin-ai manifest+connector+scaffold (#260 P2), plugin-ai runtime-registry codegen target (#261 P3).\n- Deployment near-term: target-adapter archetype doctrine (#338 S2), Deno Deploy tier-1 adapter — marquee p0 (#342 S6), docs/code divergence fix (#344 S8).\n- Release engineering + API-stability gates (#309 S8) — hardens the repeated-cut cadence itself.\n- Bench regression bar: self-bench t1+t2 test_pass_rate >=0.90 median (moved from beta.1; unblocks once bench decisions D5/OQ2 land).\n", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 0, + "closed_issues": 10, + "state": "closed", + "created_at": "2026-07-03T07:16:31Z", + "updated_at": "2026-07-04T08:05:21Z", + "due_on": null, + "closed_at": "2026-07-04T08:05:21Z" + }, + "comments": 4, + "created_at": "2026-07-02T15:52:20Z", + "updated_at": "2026-07-05T20:34:20Z", + "closed_at": "2026-07-03T23:08:49Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "Build `@netscript/plugin-ai` — the thin manifest, connector, and scaffold layer that wires `@netscript/ai` into a NetScript project with an in-process default topology.\n\n## Context\n\nPart of epic #238 · cluster plugin-ai · wave v1-min · depends-on P1, E1, E2, E3, E4, E5, FA0, FA1, FA2, FB0.\n\nThis is the terminal integration slice for the v1-min wave: every core primitive (E1-E5), the streams proxy fix (FA0-FA2), and the fresh-ui `ai` collection (FB0) must exist before the plugin can scaffold a working chat route against them. It sits at the bottom of the DAG on purpose — it is the slice a user actually runs (`plugin add ai`).\n\n## Problem / motivation\n\nToday there is no `plugins/ai` manifest at all; eis-chat wires `@netscript/ai`-shaped functionality by hand-rolling provider calls, token counting, and a chat route directly in userland, with no typed scaffold and no contract version negotiation. This repeats the exact anti-pattern the auth plugin split was built to eliminate: business logic and provider wiring living in the app instead of behind a thin, versioned manifest. Per the plugin-thinness law, `plugins/ai` must stay a manifest + connector + scaffolder — no runtime AI logic — with `@netscript/ai` and its subpath adapters (P1) doing the actual work.\n\n## Scope\n\n### Ships\n\n- `plugins/ai/mod.ts` — manifest built via\n `definePlugin('ai', ...).withRuntimeConfigTopics(['ai']).withContractVersions(...).build()`\n (no default `service`, matching the workers reference — the plugin exposes scaffolders and\n runtime-config wiring, not a running service).\n- `plugins/ai/deno.json`, `scaffold.plugin.json`, `scaffold.runtime.json` following the\n `plugins/workers` / `plugins/sagas` shape.\n- `plugins/ai/src/scaffolding/` — `ItemScaffolder`s (mirroring\n `plugins/workers/src/scaffolding/*-scaffolders.ts`):\n - typed barrel (`ai.ts` re-exporting the configured `@netscript/ai` client/ports)\n - `models.ts` starter (provider + model id constants)\n - chat route stub (TanStack-consuming, matching the fresh-ui `ai` collection primitives from\n FB0)\n - stream-proxy stub (in-process call into `@netscript/ai`, not a network gateway hop)\n - tool stub and agent stub (thin wrappers over the E-series ports)\n- Conditional scaffolders gated by scaffold flags: `--mcp` (emits an `SkillLoaderPort`-consuming\n MCP tool stub) and `--persist-threads` (emits thread-persistence wiring, app-owned per the\n MemoryPort-deferred decision — no bundled store).\n- Default topology: in-process (direct `@netscript/ai` calls from the scaffolded route); no\n network hop, no gateway config emitted by default.\n\n### Out of scope\n\n- Gateway topology / `--gateway` flag and any network-hop proxy config — deferred to a later\n gateway-focused slice (post v1-min, per the ratified in-process-default decision).\n- A registry/marketplace target for `plugin-ai` scaffolds — owned by the marketplace\n plugin-install slice, not this issue.\n- The core provider adapters, ports, and contracts themselves (`@netscript/ai`,\n `@netscript/ai/anthropic`, usage/OTel/skill-loader ports) — owned by P1 and E1-E5.\n- The streams gzip/proxy fix and fresh-ui `ai` collection registration — owned by FA0-FA2 and FB0\n respectively; this slice only consumes their shipped surface.\n\n## Public surface\n\n- `plugins/ai/mod.ts` exports: `aiPlugin` (the built manifest) and an `AiPluginInspection` /\n `AiPluginManifest`-style type set, matching the `workersPlugin` / `WorkersPluginManifest`\n naming convention in `plugins/workers/mod.ts`.\n- `plugins/ai/src/scaffolding/mod.ts` re-exporting the `ItemScaffolder` set (barrel, models,\n chat-route, stream-proxy, tool, agent, and the conditional mcp/persist-threads scaffolders).\n- `plugins/ai/scaffold.plugin.json` declaring the scaffold flags (`--mcp`,\n `--persist-threads`) and the emitted item list.\n\n## Acceptance & fitness gates\n\n- [ ] F-3: layering respected — `plugins/ai` depends only on `@netscript/plugin`, `@netscript/ai`\n (and its subpaths), and `@netscript/runtime-config`; no reverse dependency from core into\n the plugin (`deno task arch:check`).\n- [ ] F-5: `plugins/ai/mod.ts` carries `@module` JSDoc and stays within the <=20-export cap.\n- [ ] F-6: publishes via `deno task publish:dry-run` WITHOUT `--allow-slow-types`.\n- [ ] F-13: any long-running scaffolded pieces (stream-proxy stub) declare `AbortSignal`/`stop()`\n per the runtime-declaration gate.\n- [ ] `deno task check` (with `--unstable-kv` where workspace code is touched) is green for\n `plugins/ai`.\n- [x] gate:e2e — a `scaffold.runtime` case that adds the `ai` plugin to a scaffolded project,\n runs its scaffolders (default topology plus `--mcp` and `--persist-threads` variants), and\n type-checks the generated workspace end to end.\n- [ ] `netscript plugin add ai` resolves against local-source, and the generated chat route\n compiles against the fresh-ui `ai` collection primitives shipped in FB0.\n- [ ] No gateway config, gateway flag, or registry-target code is emitted by any scaffolder in\n this slice.\n\n## Dependencies\n\nDepends on P1, E1, E2, E3, E4, E5, FA0, FA1, FA2, FB0 (GitHub numbers tracked in the #238 DAG\nchecklist). Blocked by #239 (FA0/FA2 anchor bug) via the FA0/FA2 dependency chain.\n\n## Size\n\nL\n\n\n", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/260/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/260/timeline", + "performed_via_github_app": null, + "state_reason": "completed", + "pinned_comment": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/12", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/12/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/12/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/12/events", + "html_url": "https://github.com/rickylabs/netscript/pull/12", + "id": 4606585889, + "node_id": "PR_kwDOSxcnO87jllCl", + "number": 12, + "title": "Wave 2b — data adapters (kv · database · prisma-adapter-mysql)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [], + "state": "closed", + "locked": false, + "assignees": [], + "milestone": null, + "comments": 8, + "created_at": "2026-06-07T07:44:24Z", + "updated_at": "2026-06-22T21:34:07Z", + "closed_at": "2026-06-07T14:31:50Z", + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rickylabs/netscript/pulls/12", + "html_url": "https://github.com/rickylabs/netscript/pull/12", + "diff_url": "https://github.com/rickylabs/netscript/pull/12.diff", + "patch_url": "https://github.com/rickylabs/netscript/pull/12.patch", + "merged_at": "2026-06-07T14:31:50Z" + }, + "body": "## Wave 2b — data adapters (A2) — IMPLEMENTATION (draft)\n\nSub-wave **2b** of Wave 2. Targets the **Wave 2 integration branch** `feat/package-quality-wave2-adapters` (umbrella #11), **not** the track directly — so the track only receives Wave 2 when the whole wave is complete.\n\n**Run ID (to create):** `feat-package-quality-wave2-adapters-2b--data`\n**Base:** `feat/package-quality-wave2-adapters` @ `e5d54e2` (base-synced — includes 2a: logger/telemetry/aspire)\n**Depends on:** 2a (merged) — `kv` builds on `@netscript/logger`.\n\n### Units (3, dependency order)\n`kv → database → prisma-adapter-mysql`\n\n### Scope highlights (from the Wave 2 plan, 23 slices)\n| Unit | Headline work |\n|------|---------------|\n| `kv` | consolidate `bridges/` into `adapters/` (F-16); `core/` review; add `/docs`; README ≥150; `ARCHITECTURE.md`; `./testing` port-contract entrypoint |\n| `database` | **from-scratch**: package metadata + README + `/docs` + tests; `interfaces/` → ports (AP-17); the known slow-type file |\n| `prisma-adapter-mysql` | README ≥150 (currently 123); remove `skipLibCheck:true`; `examples/` handling; `/docs` |\n\n### Definition of Done (per unit)\n- `deno publish --dry-run` → **0 slow types** (no `--allow-slow-types`)\n- `deno doc --lint` clean on **every** `exports` entrypoint\n- README ≥ 150 LOC; `/docs` per STANDARDS §7\n- Archetype **A2** gate matrix green (incl. F-14/F-16/F-17/F-18 per `archetype-gate-matrix.md`)\n- `./testing` port-contract entrypoint present\n- Separate-session **IMPL-EVAL** = `PASS`\n- Merge-readiness: `deno task e2e:cli` green + clean runtime (`docker ps` / `aspire ps` empty)\n\n### Process\nPLAN-EVAL already `PASS` for the combined Wave 2 plan (Option A) — **2b does not re-run PLAN-EVAL**; it implements the locked 2b slices and runs its own IMPL-EVAL in a separate session before this PR is marked ready.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)", + "reactions": { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/12/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rickylabs/netscript/issues/12/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1 + }, + { + "url": "https://api.github.com/repos/rickylabs/netscript/issues/238", + "repository_url": "https://api.github.com/repos/rickylabs/netscript", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/issues/238/labels{/name}", + "comments_url": "https://api.github.com/repos/rickylabs/netscript/issues/238/comments", + "events_url": "https://api.github.com/repos/rickylabs/netscript/issues/238/events", + "html_url": "https://github.com/rickylabs/netscript/issues/238", + "id": 4794090035, + "node_id": "I_kwDOSxcnO88AAAABHcACMw", + "number": 238, + "title": "epic: NetScript AI Stack — first-class AI runtime, chat & plugin seams (anchor #219)", + "user": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "labels": [ + { + "id": 11283930885, + "node_id": "LA_kwDOSxcnO88AAAACoJMfBQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/type:umbrella", + "name": "type:umbrella", + "color": "ededed", + "default": false, + "description": null + }, + { + "id": 11288809625, + "node_id": "LA_kwDOSxcnO88AAAACoN2QmQ", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugins", + "name": "area:plugins", + "color": "5319e7", + "default": false, + "description": "plugins/* and plugin-core packages" + }, + { + "id": 11399898652, + "node_id": "LA_kwDOSxcnO88AAAACp3ymHA", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:ai-core", + "name": "area:ai-core", + "color": "1d76db", + "default": false, + "description": "" + }, + { + "id": 11399899350, + "node_id": "LA_kwDOSxcnO88AAAACp3yo1g", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/epic:ai-stack", + "name": "epic:ai-stack", + "color": "5319e7", + "default": false, + "description": "" + }, + { + "id": 11399899578, + "node_id": "LA_kwDOSxcnO88AAAACp3ypug", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/area:plugin-ai", + "name": "area:plugin-ai", + "color": "1d76db", + "default": false, + "description": "" + }, + { + "id": 11402857882, + "node_id": "LA_kwDOSxcnO88AAAACp6nNmg", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/status:plan", + "name": "status:plan", + "color": "fbca04", + "default": false, + "description": "Harness plan phase" + }, + { + "id": 11402858295, + "node_id": "LA_kwDOSxcnO88AAAACp6nPNw", + "url": "https://api.github.com/repos/rickylabs/netscript/labels/priority:p1", + "name": "priority:p1", + "color": "d93f0b", + "default": false, + "description": "High" + } + ], + "state": "open", + "locked": false, + "assignees": [], + "milestone": { + "url": "https://api.github.com/repos/rickylabs/netscript/milestones/2", + "html_url": "https://github.com/rickylabs/netscript/milestone/2", + "labels_url": "https://api.github.com/repos/rickylabs/netscript/milestones/2/labels", + "id": 16635580, + "node_id": "MI_kwDOSxcnO84A_da8", + "number": 2, + "title": "0.0.1-stable", + "description": "0.0.1 stable. Acceptance criteria LOCKED (packages/bench/POSITIONING.md section 4, per #353 + user decisions on S1/S2). Stable extends beta with the falsifiable positioning verdict:\n1. All beta criteria hold.\n2. Competitor-PAIRED run — at least one measured paired run (NetScript vs >=1 D2 alternative) where NetScript is not worse on test_pass_rate AND strictly better on >=1 efficiency axis (turns_to_green / cost / wall_seconds). Moved here from beta per S1 decision (blocked on D2/D5/OQ2).\n3. Breadth — multi-task coverage (>=2 distinct build tasks) and N>=3 runs per cell for a stable median.\n4. Full rubric — composite scoring complete (0.20 reserve retired; bench Slice 5 rebind onto the sound baseContract landed).\nNote: allow-slow-types remains a sanctioned doctrine exception for oRPC-bound packages (S2; S4/#305).", + "creator": { + "login": "rickylabs", + "id": 129366361, + "node_id": "U_kgDOB7X5WQ", + "avatar_url": "https://avatars.githubusercontent.com/u/129366361?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rickylabs", + "html_url": "https://github.com/rickylabs", + "followers_url": "https://api.github.com/users/rickylabs/followers", + "following_url": "https://api.github.com/users/rickylabs/following{/other_user}", + "gists_url": "https://api.github.com/users/rickylabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rickylabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rickylabs/subscriptions", + "organizations_url": "https://api.github.com/users/rickylabs/orgs", + "repos_url": "https://api.github.com/users/rickylabs/repos", + "events_url": "https://api.github.com/users/rickylabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/rickylabs/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 5, + "state": "open", + "created_at": "2026-07-02T22:30:06Z", + "updated_at": "2026-07-12T16:58:59Z", + "due_on": null, + "closed_at": null + }, + "comments": 16, + "created_at": "2026-07-02T11:50:32Z", + "updated_at": "2026-07-13T15:44:39Z", + "closed_at": null, + "assignee": null, + "author_association": "OWNER", + "active_lock_reason": null, + "sub_issues_summary": { + "total": 0, + "completed": 0, + "percent_completed": 0 + }, + "issue_dependencies_summary": { + "blocked_by": 0, + "total_blocked_by": 0, + "blocking": 0, + "total_blocking": 0 + }, + "body": "# Epic: NetScript AI Stack — first-class AI runtime, chat, and plugin seams\n\n> **Status:** architectural research complete (no implementation yet). This epic is the traceable basis from which we iterate into sub-issues → draft PRs → slices.\n> **Anchor:** #219 (durable-CHAT primitive gap + streams gzip-mislabel bug).\n> **Research author:** Fable 5 (principal-architect pass), delegating to Opus 4.8 / Sonnet 5 sub-agents. Grounded in the **live eis-chat repo @ HEAD `26e1b65`** (2026-07-02) and the NetScript reference plugins (auth / workers / streams / kv / sdk / fresh-ui).\n\n## Why this epic exists\n\neis-chat (the flagship consumer) hand-rolled a large \"AI stack\" — provider/model routing, agent loop, tool + MCP registry, embeddings/vision, durable-chat transport, and the whole presentational chat surface — because NetScript did not yet expose the seams for them. It also carries a live workaround for a real framework bug (#219). This epic captures the architecture for lifting that stack into NetScript **better than the hand-rolled original**, using the auth plugin / workers / kv patterns as the quality bar.\n\nThe plan below is Fable 5's. It is **not** a locked decision set — it's the strong, grounded basis we now iterate on together (rough brainstorm → sub-issues → draft PRs). Items still needing a human **product** call are tagged `[PRODUCT SIGN-OFF]`.\n\n## The shape, in one paragraph\n\nA **five-home split** rather than one monolithic `plugins/ai`: (1) a **NEW `@netscript/ai`** standalone engine core (peer to `kv`/`sdk`, provider adapters by subpath), because the AI engine is used in-process by Fresh routes, workers, and services — not service-bound like auth; (2) a **NEW `@netscript/fresh/ai`** subpath for the durable-chat client/SSR/proxy runtime; (3) **extend the existing `@netscript/fresh-ui` `ai` registry** for the presentational surface; (4) a **thin `packages/plugin-ai-core`** holding only the optional gateway contract; (5) an **optional `plugins/ai`** centralized AI-gateway service. The #219 gzip fix ships first and standalone (~15 LOC).\n\n---\n\n## Traceability — sources, issues, PRs, external deps\n\n**Anchor & related issues**\n- #219 — durable-CHAT primitive gap + streams gzip-mislabel bug (the anchor; Slice 0 fixes the bug, Slice 1 ships the seam).\n\n**NetScript reference surfaces the plan is grounded in** (emulation targets / precedents)\n- Auth plugin — `packages/plugin-auth-core/`, `plugins/auth/`, `packages/auth-better-auth|auth-kv-oauth|auth-workos/` (contract-in-core + thin manifest + adapters).\n- Workers plugin — `plugins/workers/` (gold-standard multi-axis manifest, `verify-plugin.ts`, registry code-gen).\n- Streams — `plugins/streams/services/src/main.ts` (proxy — the #219 fix site) + `packages/plugin-streams-core/src/application/stream-url-resolver.ts` (`getStreamsUrl`/`getStreamsAuth`/`buildStreamUrl`).\n- Fresh runtime — `packages/fresh/src/runtime/streams/create-stream-db.ts` (`createNetScriptStreamDB` — the sibling the new `./ai` subpath mirrors).\n- Fresh-UI registry — `packages/fresh-ui/registry.manifest.ts:1102-1116` (the `ai` collection already shipping — extend it).\n- Standalone-core precedent — `packages/kv/` + `packages/sdk/` (adapter-registration-by-subpath-import; the `@netscript/ai` shape).\n- Doctrine — `docs/architecture/doctrine/{01-thesis-and-axioms,06-archetypes,07-composition-and-extension,09-anti-patterns-and-fitness-functions}.md`; harness `ARCHETYPE-5-plugin.md`; fitness fns F-3/F-5/F-6/F-13.\n\n**External dependencies / prior art**\n- `@durable-streams/tanstack-ai-transport@^0.0.8` — `durableStreamConnection`, `toDurableChatSessionResponse`, `ensureDurableChatSessionStream`, `materializeSnapshotFromDurableStream` (ElectricSQL \"Durable Sessions\").\n- `@tanstack/ai@0.10.x` + `-anthropic` / `-openai` (`/compatible`) / `-preact` / `-mcp` — provider adapters + `useChat` + `chat()` agent loop.\n- `@durable-streams/{client,server,state}` — the underlying durable-stream transport already used by NetScript streams.\n- `@modelcontextprotocol/sdk` + `@mcp-ui/client` — MCP tool transport + `ui://` widget rendering.\n\n**Live consumer reference (private)**\n- eis-chat @ HEAD `26e1b65` (2026-07-02) — key files: `apps/dashboard/islands/ChatPane.tsx`, `routes/api/chat.ts`, `routes/api/chat-stream.ts`, `routes/api/streams/[...path].ts`, `lib/stream-loaders.ts`, `lib/chat-render.ts`, `components/ui/{message,markdown,mcp-widget,chart-block,code-block,tool-call-card}.tsx`, `lib/{models,paced-reveal,mcp}.ts`, `services/eischat/src/{embeddings,vision}.ts`, `packages/channel/mod.ts`. The three `Accept-Encoding: identity` #219 workaround sites (`chat-stream.ts:72`, `streams/[...path].ts:60`, `stream-loaders.ts:82`) are the Slice-0 acceptance test.\n\n**Related tooling PR** (context, not a dependency)\n- #237 — release-publish automation (merged) — unrelated feature, listed only because it landed in the same window.\n\n---\n\n# Architecture plan (Fable 5, rev. 2) — verbatim\n\n_The remainder of this issue is the research artifact as delivered. Sub-issues will be carved from §7 (migration slices) and §6 (open questions)._\n\n# NetScript AI Stack — Architecture Plan (rev. 2)\n\n**Author:** Principal framework architect (Fable 5). Architecture/design pass only, **no implementation**.\n**Anchor:** issue #219 (durable-CHAT primitive gap + gzip-mislabel bug).\n**References:** auth plugin (emulation target), workers (gold-standard plugin), `@netscript/kv` (standalone-core precedent), `@netscript/fresh-ui` `ai` registry collection (already-shipping chat primitives).\n**Scope basis:** the LIVE eis-chat repo @ HEAD `26e1b65` (2026-07-02), incl. mcp-ui DS-token theming, the react-markdown pipeline, paced-reveal streaming, hybrid KB retrieval.\n**Every decision below is mine, with rationale.** Items needing eventual human *product* sign-off are tagged **[PRODUCT SIGN-OFF]**; I still give a recommendation.\n\n---\n\n## 0. The decisive re-architecture (what changed in rev. 2)\n\nRev. 1 put \"everything in `plugins/ai`.\" That was wrong. The live-repo evidence forces three corrections:\n\n1. **eis-chat runs the agent loop IN-PROCESS, not through a plugin HTTP service.** `apps/dashboard/routes/api/chat.ts` calls `@tanstack/ai` `chat({adapter, tools, mcp, agentLoopStrategy})` directly in the Fresh route, and workers jobs (`workers/jobs/embed-document.ts`) + the eischat oRPC service (`services/eischat/src/embeddings.ts`) call embeddings directly. This is fundamentally unlike auth, where the backend is *only* ever reached through the auth service. **The AI engine primitives are runtime-agnostic library code, used in-process across Fresh routes / workers / services — not service-bound.** ⇒ they belong in a standalone core package, not a plugin.\n\n2. **`@netscript/fresh-ui` already ships the presentational chat surface.** Its `registry.manifest.ts:1102-1116` defines a named `ai` collection (`message`, `tool-call-card`, `code-block`, `chart-block`, `citation-chip`, `model-selector`, `prompt-input`, `command-palette`, `search`, `theme-seed`), and eis-chat's `apps/dashboard/components/ui/*` ARE those copy-source components — extended locally. ⇒ presentational primitives belong in the fresh-ui registry (extend the existing collection), NOT in a plugin or a new package.\n\n3. **`@netscript/kv`/`@netscript/sdk` prove the standalone runtime-agnostic core-package pattern is idiomatic** (`packages/kv/deno.json`, `packages/sdk/deno.json` — zero `@netscript/*` deps, adapter-registration-by-subpath-import at `packages/kv/redis.ts:1-20`). ⇒ the AI engine should be a peer core package `@netscript/ai`, with provider adapters as *subpath-registered* adapters (`@netscript/ai/anthropic`), NOT a proliferation of `packages/ai-*` packages.\n\n**Net topology (five homes, each justified in §3):**\n\n| Capability | Home | Why |\n|---|---|---|\n| Provider routing, agent loop, tool + MCP registry, embeddings/vision ports + adapters, model registry, reasoning/token-cap normalization, telemetry | **NEW `@netscript/ai`** (standalone core, archetype 2) | runtime-agnostic; used in-process by Fresh routes, workers, services — like `@netscript/kv` |\n| Durable-chat client connection, SSR snapshot/resume, the `/api/chat-stream` proxy recipe | **`@netscript/fresh` new `./ai` subpath** (archetype 4) | Fresh/island client-runtime; sibling to the existing `./streams` seam |\n| Message renderer, markdown, tool-call card, chart/code block, citation chip, model selector, prompt input, mcp-ui widget, typing indicator, paced-reveal hooks | **`@netscript/fresh-ui` `ai` registry** (archetype 4, copy-source) | presentational; the collection already exists — extend it |\n| The oRPC contract for an *optional* centralized AI-gateway service | **`packages/plugin-ai-core`** (archetype 2, thin) | only needed to back the plugin; re-exports `@netscript/ai` types |\n| The *optional* AI-gateway plugin service (centralized BYOK key custody, shared tool/MCP registry, cross-app usage accounting, rate limiting) | **`plugins/ai`** (archetype 5) | multi-app / centralized-key deployment topology; NOT required for the single-app embedded case |\n\nThe plugin is now **optional infrastructure**, not the center of gravity. The center is `@netscript/ai` (engine) + `@netscript/fresh/ai` (chat runtime) + the fresh-ui `ai` registry (chat UI).\n\n---\n\n## 1. `@netscript/ai` — the standalone AI engine core (NEW package)\n\n**Archetype 2 (integration): wraps `@tanstack/ai-*` + provider SDKs behind ports + adapters.** Modeled structurally on `@netscript/kv` (`packages/kv/deno.json:6-11`): a root port/lifecycle API plus subpath-registered adapters. Zero Fresh coupling — usable in Fresh routes, workers jobs, oRPC services, or standalone scripts, exactly as eis-chat uses `@tanstack/ai` today.\n\n### 1.1 Exports map (kv-shaped, adapter-by-subpath)\n\n```\n@netscript/ai\n . → mod.ts — createAiRuntime(), getAiRuntime(), ports, registries, model-registry, config, presets, telemetry\n ./anthropic → anthropic.ts — registers 'anthropic' ModelProvider adapter (side-effect, wraps @tanstack/ai-anthropic)\n ./openai-compatible → openai-compatible.ts — registers 'openai-compatible' adapter (wraps @tanstack/ai-openai/compatible; OpenAI/OpenRouter/LiteLLM)\n ./openai-embeddings → openai-embeddings.ts — registers embedding + vision adapters (OpenAI-compatible /v1/embeddings + vision)\n ./mcp → mcp.ts — McpTransport adapters (stdio/http) wrapping @tanstack/ai-mcp\n ./tools → tools.ts — defineAiTool(zod-input).server(fn), createToolRegistry\n ./agent → agent.ts — createAgentLoop(), maxIterations, AgentLoopPort (the @tanstack/ai chat() wrapper as a state machine)\n ./contracts → contracts/mod.ts — runtime-agnostic message/part types shared with the plugin contract\n ./testing → src/testing/mod.ts — in-memory ports\n```\n\nThe `@netscript/kv/redis` self-registration pattern (`registerKvAdapter`, `packages/kv/redis.ts:1-20`, consumed by `getKv()` auto-detect at `packages/kv/mod.ts:11-22`) is copied verbatim: importing `@netscript/ai/anthropic` self-registers the provider so `createAiRuntime()` resolves it, and an app that never uses Anthropic never pays for `@tanstack/ai-anthropic`. **This is the key reason adapters are subpaths not packages** — AI provider SDKs are heavy optional deps, precisely kv's situation.\n\n### 1.2 Ports (the `AuthBackendPort` analogue, cf. `packages/plugin-auth-core/src/ports/mod.ts:211-241`)\n\n```ts\nexport interface ModelProviderPort {\n readonly name: string; // 'anthropic' | 'openai-compatible'\n readonly capabilities: ModelProviderCapabilities; // supportsReasoning, supportsVision, ...\n buildChat(opts: BuildChatOptions): BuiltChat; // { adapter, modelOptions } — normalizes reasoning + token caps\n}\nexport interface AgentLoopPort {\n run(input: AgentRunInput, signal?: AbortSignal): AsyncIterable; // A12 state machine; F-13 AbortSignal + stop()\n}\nexport interface ToolRegistryPort { register(t: AiToolDefinition): void; list(): readonly AiToolDefinition[]; resolve(name: string): AiToolDefinition | undefined; }\nexport interface McpTransportPort { connect(cfg): Promise; /* keep-alive pools */ }\nexport interface EmbeddingProviderPort { embed(texts: string[]): Promise; }\nexport interface VisionProviderPort { transcribe(bytes: Uint8Array, mime: string): Promise; }\n```\n\n`createAiRuntime(config)` is the **composition root** (A10, `docs/architecture/doctrine/07-composition-and-extension.md:14-81`): constructor-injects the registered adapters, model registry, and telemetry; no module-load side effects except the opt-in adapter self-registration. Model registry = `ModelEntry {provider, id, label, reasoning?}` (from `apps/dashboard/lib/models.ts:17-26`), env-overridable via config, replacing eis-chat's `EISCHAT_MODELS` scraper (`lib/models.ts:43-57`). Reasoning normalization (Anthropic `thinking:{type:'adaptive'}` + `output_config.effort` vs OpenAI-compat `reasoning:{effort}` — `apps/dashboard/routes/api/chat.ts:90-126`) and token caps (`ANSWER_MAX_TOKENS=8192`/`REASONING_MAX_TOKENS=16384`, `chat.ts:66-67`) live in `-core` per the thinness law, hidden behind `buildChat`.\n\n**No provider SDK type ever leaks to userland** — userland imports `@netscript/ai` + optionally `@netscript/ai/anthropic` (registration only). This is the auth invariant (adapters import only `@netscript/plugin-auth-core/contracts/v1`).\n\n### 1.3 Why NOT fold this into `packages/plugin-ai-core` (the auth shape)?\n\nAuth folds engine+contract into one `-core` because the auth backend is *only* invoked via the auth service. The AI engine is invoked **in-process, independent of any service** (three call sites in eis-chat prove it). Doctrine A9/A11: a package earns its own identity when its consumers are broader than one plugin. `@netscript/ai` has three non-plugin consumers already (Fresh routes, workers, services), so it is a peer core package, and `plugin-ai-core` shrinks to just the service contract that re-exports it. **This is the single most important structural call in this plan.**\n\n---\n\n## 2. `@netscript/fresh/ai` — the durable-chat client runtime (NEW subpath)\n\n**Archetype 4, sits at `packages/fresh/src/runtime/ai/`, sibling to `runtime/streams/`.** It is the exact analogue of `createNetScriptStreamDB` (`packages/fresh/src/runtime/streams/create-stream-db.ts:100-114`): a Fresh-runtime factory that composes the streams URL/auth seam. Precedent that this dependency direction is allowed: `@netscript/fresh` **already imports** `buildStreamUrl/getStreamsAuth/getStreamsUrl` from `@netscript/plugin-streams-core` (`create-stream-db.ts:18`). Added to `packages/fresh/deno.json` exports (currently `.`, `./server`, `./streams`, `./query`, ... at `:6-17`; new dep `@durable-streams/tanstack-ai-transport@^0.0.8` + `@tanstack/ai-preact`; `@durable-streams/state` already present).\n\n### 2.1 The distinction that must be documented (root-cause fix for #219)\n\nNetScript ships two stream consumers; they are NOT interchangeable. The `@module` JSDoc (F-5 mandatory) must lead with this table:\n\n| | **StreamDB shapes** (data tables) | **Durable Sessions** (AI chat) |\n|---|---|---|\n| Surface | `createNetScriptStreamDB` + `useLiveQuery` (`create-stream-db.ts:100-114`) | **NEW** `@netscript/fresh/ai` |\n| Pkg | `@durable-streams/state/db` | `@durable-streams/tanstack-ai-transport` + `@tanstack/ai-preact` |\n| Shape | rows keyed by PK, upsert/delete | ordered append-only chunk log, offset-addressed |\n| Consumer | `{data, status, error}` | `{messages, sendMessage, isLoading, stop}` + optimistic + resume + multi-tab |\n| **#219 failure if misused** | — | shapes-for-transcript ⇒ `TypeError: Decoding failed` (Electric `TextDecoder` on gzip'd multibyte) |\n\n### 2.2 Surface\n\n```ts\n// @netscript/fresh/ai (island-safe, preact/compat like ./streams)\n\n// CLIENT — wraps durableStreamConnection with NetScript URL/auth resolution\nexport function createNetScriptChatConnection(opts: {\n sessionId: string;\n streamPath?: (id: string) => string; // default '/ai/sessions/${id}/messages'\n baseUrl?: string; // default same-origin proxy\n initialOffset?: string; // from resolveChatSnapshot\n outputSchema?: unknown; // §6-Q2 typed structured-output passthrough\n}): DurableStreamConnection; // { subscribe, send } — satisfies TanStack SubscribeConnectionAdapter\n\n// SERVER — wraps toDurableChatSessionResponse; resolves writeUrl via buildStreamUrl + getStreamsAuth\nexport function toNetScriptChatResponse(opts: {\n sessionId: string;\n streamPath?: (id: string) => string;\n newMessages: DurableSessionMessage[];\n responseStream: AsyncIterable; // AgentLoopPort.run() output\n mode?: 'immediate' | 'await'; // default 'await'\n authorize?: (req: Request, sessionId: string) => Promise; // §6-Q5 ownership hook\n}): Promise;\n\n// SSR resume/snapshot\nexport function resolveChatSnapshot(sessionId: string, streamPath?): Promise<{ messages: UIMessage[]; offset?: string }>;\n// internally ensureDurableChatSessionStream({writeUrl,headers,createIfMissing:true})\n// then materializeSnapshotFromDurableStream({readUrl,headers}) → {messages, offset}\n\n// the canonical /api/chat-stream proxy recipe (one impl, replaces eis-chat's 3 hand-rolled proxies)\nexport function createChatStreamProxyHandler(opts?: {\n streamPath?; authorize?: (req: Request, sessionId: string) => Promise;\n}): (req: Request) => Promise;\n\n// MCP-UI sandbox route recipe (backs the fresh-ui mcp-ui-widget; §4)\nexport function createMcpSandboxHandler(opts?: { csp?: string }): (req: Request) => Promise;\n```\n\n**Verified transport API** (`@durable-streams/tanstack-ai-transport@0.0.8`): `durableStreamConnection({sendUrl,readUrl?,initialOffset?,...})→{subscribe,send}`; `toDurableChatSessionResponse({stream:Pick, newMessages, responseStream, mode})→Promise` (202 immediate / 200 await); `ensureDurableChatSessionStream`, `materializeSnapshotFromDurableStream({readUrl,headers,offset?})→{messages,offset}`. `useChat({connection, initialMessages, live:true, forwardedProps})` (`@tanstack/ai-preact@0.10.1`); `live:true` holds the subscription open for the component lifetime (multi-tab + resume-in-progress). Offsets are opaque `_`; the stream IS the log so a mid-generation reload catches in-flight tokens.\n\n### 2.3 The proxy recipe (`createChatStreamProxyHandler`)\n\neis-chat hand-wrote three same-origin read proxies (`routes/api/chat-stream.ts`, `routes/api/streams/[...path].ts`, `lib/stream-loaders.ts`). Ship ONE that: maps `?id=`→`buildStreamUrl(chatStreamPath(id))`, forwards State-Protocol params (`offset/live/handle/cursor`) except `id` (`chat-stream.ts:54-56`); attaches `getStreamsAuth()` **server-side only** (the security reason the proxy exists — keeps `STREAMS_SECRET` off the browser); strips hop-by-hop + `content-encoding`/`content-length` on the way back (`streams/[...path].ts:24-31`); bridges disconnect via `cancel()` not `req.signal` (`chat-stream.ts:76-114`). After the §3 bug fix it drops the `Accept-Encoding: identity` request header but keeps the response-header strip as defense-in-depth.\n\n---\n\n## 3. #219 gzip-mislabel bug — root cause, fix, verification\n\n**Root cause (empirically reproduced, Deno 2.9.0): decompress-but-don't-relabel at the streams proxy hop** (`plugins/streams/services/src/main.ts`). The engine (`@durable-streams/server@0.3.7`) gzips *correctly* only for bodies ≥1024 B; Deno's inner `fetch` transparently decompresses but retains `content-encoding: gzip`; the proxy returns it verbatim (`main.ts:70-85`, `return await fetch(proxyReq)` at `:81`, even CORS-exposes the header at `:110-123`). Compliant decoders then try to gunzip `[{...` → throw. Size-gated ⇒ intermittent (why it looked random). The `identity` workaround only makes the engine skip compression.\n\n**Fix location: `plugins/streams/services/src/main.ts` `proxyHandler`** — after the inner fetch, rebuild the Response stripping `content-encoding`/`content-length`/hop-by-hop (exactly eis-chat's own client-proxy `STRIP` set, `routes/api/streams/[...path].ts:24-31`). NOT engine compression-disable (discards real wire compression, leaves the latent Deno bug), NOT a client change. The engine and client are both correct; the proxy is the wrong actor.\n\n**Verification:** `curl -sD - --compressed '/v1/stream/netscript/'` on a >1KB snapshot (pre-fix: header says gzip, body magic `5b 7b` not `1f 8b`; post-fix: no header, valid JSON). Add a >1KB read case to the `scaffold.runtime` E2E with a compliant decoder. **Acceptance = deleting all three `identity` sites** (`chat-stream.ts:72`, `stream-loaders.ts:82`, `streams/[...path].ts:60`). Ships FIRST, ~15 LOC, standalone — unblocks eis-chat before any AI package exists.\n\n---\n\n## 4. `@netscript/fresh-ui` `ai` registry — the presentational surface (EXTEND existing)\n\n**These are copy-source components** (`netscript ui:add `) — an app owns the code after copying, which is exactly why eis-chat could extend them. Preact function components, `class?:string` merged via `cn()`, `@layer 2`, `@depends theme-seed`, themed only through semantic `--ns-*` CSS custom properties (`packages/fresh-ui/registry/theme/tokens.css`), never JS-side.\n\n**Already shipping** (`packages/fresh-ui/registry.manifest.ts:1102-1116` + `registry/components/ui/`): `message.tsx` (+`TypingIndicator`, `renderInline`, `packages/fresh-ui/registry/components/ui/message.tsx:100-108`), `tool-call-card.tsx`, `code-block.tsx`, `chart-block.tsx`, `citation-chip.tsx`, `model-selector.tsx`, `prompt-input.tsx`.\n\n**Gaps to add to the collection** (all proven-needed by the live eis-chat build, currently hand-rolled there):\n- **`markdown` primitive** — the biggest gap. eis-chat added `apps/dashboard/components/ui/markdown.tsx` (react-markdown@9 under `preact/compat`, remark-gfm/math, rehype-katex/highlight/**sanitize**, a `remarkCitations` mdast plugin `[n]`→`` `markdown.tsx:53-82`, mid-stream `stripIncompleteSyntax` `:287-303`). fresh-ui's `message.tsx renderInline` is inline-only (bold/code/citation); a real Markdown renderer belongs in the registry. **Decision:** add `markdown` as a registry item that emits the sanitize-hardened pipeline, with the citations plugin wired to the existing `citation-chip`.\n- **`mcp-ui-widget` primitive** — eis-chat's `mcp-widget.tsx` + `mcp-sandbox.html.ts` (the new HEAD feature) render `ui://` resources in a themed sandboxed iframe. The DS-token theming (`?theme=` query → `mcp-sandbox.html.ts:351-354`, guest-token `