Repository navigation
feat(frontend): bring obol-stack-front-end into monorepo - #888
Merged
Merged
Conversation
… 16.2.6 (lockfile regen pending)
… regen pending)
…act-ui 1.57.1)
feat(dashboard): add storefront link in header and agent registration…
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.59.1 to 8.59.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.2/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.59.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.100.9 to 5.100.10. - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/HEAD/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-version: 5.100.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.59.1 to 1.60.0. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](microsoft/playwright@v1.59.1...v1.60.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.60.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [thread-stream](https://github.com/mcollina/thread-stream) from 4.0.0 to 4.2.0. - [Release notes](https://github.com/mcollina/thread-stream/releases) - [Commits](pinojs/thread-stream@v4.0.0...v4.2.0) --- updated-dependencies: - dependency-name: thread-stream dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@copilotkit/runtime](https://github.com/CopilotKit/CopilotKit) from 1.56.3 to 1.57.1. - [Release notes](https://github.com/CopilotKit/CopilotKit/releases) - [Changelog](https://github.com/CopilotKit/CopilotKit/blob/main/changelog.txt) - [Commits](CopilotKit/CopilotKit@v1.56.3...v1.57.1) --- updated-dependencies: - dependency-name: "@copilotkit/runtime" dependency-version: 1.57.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.6.2 to 25.9.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 25.9.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [viem](https://github.com/wevm/viem) from 2.48.11 to 2.49.3. - [Release notes](https://github.com/wevm/viem/releases) - [Commits](https://github.com/wevm/viem/compare/viem@2.48.11...viem@2.49.3) --- updated-dependencies: - dependency-name: viem dependency-version: 2.49.3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 16.4.0 to 17.0.5. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](lint-staged/lint-staged@v16.4.0...v17.0.5) --- updated-dependencies: - dependency-name: lint-staged dependency-version: 17.0.5 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) from 19.2.5 to 19.2.6. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom) --- updated-dependencies: - dependency-name: react-dom dependency-version: 19.2.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.2 to 3.4.5. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.4.2...3.4.5) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
- The dashboard image (ghcr.io/obolnetwork/obol-stack-front-end) is published by docker-publish-frontend.yml and pinned like the x402 images; the release gate checks it. - OBOL_DEVELOPMENT=true obol stack up builds it locally (alias frontend); just dev-frontend builds from web/frontend and imports it. - Old-repo scaffolding removed (k8s, skaffold, compose, its workflows, dependabot, husky); Renovate covers its npm deps. - OpenClaw code removed from the UI; unused deps dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…runs - ci.yml replaces lint-test.yaml and helm-template-smoke.yml: Go build/vet/test + generate + goreleaser, golangci-lint on new code, helm template + lint of the embedded charts, storefront and front-end lint/test/typecheck/build, shellcheck for obolup. Jobs run only for the areas a change touches; the aggregate check keeps the name lint-test. - Runs on PRs and pushes to integration/** with cancel-in-progress. - Image workflows never cancel a main commit's publish (each needs its images for the release gate). - Renovate runs on its Monday schedule plus every 4 hours, not hourly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… defaults tree - ~1.4k lines of unused Go removed (OpenClaw-era test harness, unused helpers left by removed features); staticcheck U1000 is clean. - buy.py unit tests updated to current behaviour and run from go test. - Storefront lint uses the ESLint CLI (next lint is gone in Next 16). - stack export includes the defaults tree and its manifest so hand-edits survive a backup/restore. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e requests - network status: eRPC table per chain with local/remote upstreams and which one is serving now, reth pipeline stages (no more syncing 0/0), Lighthouse sync states and backfill, pod problems shown once with a cause and hint, data size and a Grafana link. Exit code 3 when a node is degraded or unreachable. --watch redraws with rates and ETAs (NDJSON under -o json). - network stop|start <network>/<id> (and --all): scale the node to zero and back, keep its data, deregister/re-register it with eRPC; sync and stack up respect a stopped node. - Execution and consensus pods get memory/CPU requests sized per network, client and mode (overridable), so their footprint is visible to the scheduler. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t-end history Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt clean-up - network stop/start only accept an installed <type>/<id> with a valid id, and the values path must stay under the networks dir. - stack import path rewriting and the defaults hand-edit check walk the config dir through os.Root; a symlink in the defaults tree counts as a hand-edit and isn't followed. - Constants for the ethereum network type and repeated command strings; small modernisations from golangci-lint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… budget The non-zero price rule on every payments[].price field pushed the ServiceOffer CRD over the apiserver's CEL cost budget because payments had no maxItems, so `obol stack up` failed to apply it (found live on k3s v1.35.9). payments is now capped at 16 (routes keeps its 128 cap); the CLI rejects more with a clear error. - embed test: every list/map/string carrying a CEL rule must be bounded. - CI crd-apply job: server-side applies every embedded CRD to a k3s apiserver (same image as k3d-config.yaml) so budget errors fail CI.
…atus and doctor wording - buy.py pay: --data (or --type inference) implies POST, and the 402 probe sends the request body, so LiteLLM-backed offers can be paid. - The 402 lists each payment option once (plus the legacy chain-name alias); buy.py collapses duplicates too. - sell inference refusal skips `model setup custom` when the model is already configured, avoiding a second model_list entry. - sell status shows a healthy offer's Draining condition as OK. - doctor counts the default agent's wallet (address only) and reports an unreadable keystore as present. - Non-interactive sell delete examples pass --force.
Export captured agent keystores only through a node fallback while the cluster was up, failing quietly otherwise, and import never used the archive's wallets/ copy, so a fresh host could end up with a signer and no key while the CLI reported the wallets as restored. - Export writes every Hermes (and leftover OpenClaw) wallet to wallets/<ns>.json|.enc, names each captured wallet by address, and warns loudly about any it could not capture. - Import, in every mode, re-creates a missing keystore from wallets/ after decrypting it in-process and matching the derived address (--passphrase, a TTY prompt, or a clear manual command), restarts an already-running signer, and reports per wallet what was restored where.
goreleaser's .ShortCommit follows git's auto abbreviation, which grew to 8 characters, while every image publisher tags the first 7. The CLI then pinned tags that did not exist. - pinCommit() cuts the commit to 7 characters, whatever built the binary; goreleaser and `just build` pass 7 characters explicitly. - stack up fails before applying anything when GHCR says a pinned tag does not exist (network errors keep the offline fallback). - `obol version -o json` reports image_tag; the release job checks the built binary's tag against GHCR instead of re-deriving it from git. - The front-end image is stamped with its short SHA and build time.
A wrong or missing passphrase used to restore everything except the wallet keystores and exit 0, leaving agents without their keys. - Before touching host state, every wallets/ backup the data/ copy does not cover must decrypt; otherwise the import stops with nothing restored. A terminal is asked up to three times. - A keystore that still fails to restore stops the import before any cluster work, with a non-zero exit and the command to retry. - New --skip-wallets restores without those keystores, explicitly. - Clearer export wording for keystores copied out through the k3d node.
- reth reports stages alphabetically; sort them into pipeline order before deciding which stage is current. - --watch waits 5 minutes of no progress before "stalled?" (reth only moves a checkpoint when it commits) and averages over 10 minutes. - Data sizes the CLI cannot read show "unknown" instead of "≥0 B". - JSON time is UTC.
- stack up checks every pinned image tag on the registry before it starts or upgrades anything, so a broken build no longer starts a stopped cluster first. - network status JSON reports sizes it could not read as null, matching "unknown" in the human output.
…image The dev-only services-catalog route returned 404 in production builds; it is removed. The runtime image no longer ships .map files.
Keep the full front-end publish workflow over main's dispatch-only copy.
OisinKyne
enabled auto-merge (rebase)
October 15, 2026 00:12
- Front-end agent API routes log runtime/id through a constant format string with control characters stripped. - The sign-in verifier strips line breaks from logged verify errors. - sanitizeNextPath checks the leading "/" explicitly and rejects control characters; tests cover the rejected forms. - design-audit script uses a private temp dir; the price test checks the URL's host and path exactly.
- defaults: read, write and prune the defaults tree through os.Root. - Exhaustive switches, string constants, modernize/revive fixes, canonical header names in tests. - nilerr: document the two intentional nil returns.
|
|
||
| return NextResponse.json<AgentInstanceHealth>(health); | ||
| } catch (error) { | ||
| console.error('[Agent Status] Error for %s/%s:', logSafe(runtime), logSafe(id), error); |
|
|
||
| return NextResponse.json({ token }); | ||
| } catch (error) { | ||
| console.error('[Agent Token] Error for %s/%s:', logSafe(runtime), logSafe(id), error); |
| const metadata = await client.getWalletMetadata(instance); | ||
| return NextResponse.json<WalletMetadata>(metadata); | ||
| } catch (error) { | ||
| console.error('[Agent Wallet] Error for %s/%s:', logSafe(runtime), logSafe(id), error); |
OisinKyne
disabled auto-merge
October 15, 2026 11:28
OisinKyne
added a commit
that referenced
this pull request
Oct 15, 2026
…de (#891) * fix(llm): turn LiteLLM metrics on for stacks upgraded with obol upgrade The base chart keeps an existing stack's live LiteLLM config, so older stacks only gain the Prometheus settings when obol adds them. Only `obol stack up` did; `obol upgrade`, which obolup suggested after an install, never did, so /metrics kept requiring the master key and the LLM dashboards stayed empty. - model.EnsureLiveLiteLLMObservability adds the missing settings to the live ConfigMap (never overriding operator values) and restarts LiteLLM. - obol upgrade calls it after syncing the base release; stack up calls it when its config snapshot/restore did not run. - obolup now suggests `obol stack up` for a running stack. * ci(gitleaks): ignore the known false positives at the #888 squash commit * feat: finish the update — obolup offers stack up, CLI flags a stale stack - `obol stack up` records the obol version that brought the stack up ($CONFIG/.stack-version). - obolup, finding the stack running on an older version, explains what restarts and asks to upgrade it now (default yes). Without a terminal it only runs with --yes or OBOL_UPGRADE_STACK=true, else prints the command. - `obol doctor` gains a "Stack version" check, and other commands print a one-line notice while the stack has not been brought up by this version (not for stack/doctor/version/passthroughs, JSON or --quiet).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
To improve velocity the front end repo is merged here.