mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
chore(config): clean up and reorganize configuration files
This commit is contained in:
1 parent
0da56bed45
commit
fba17a9a56
25 files changed
+34
-598
No files matched your search
@@ -20,6 +20,7 @@ television
|
|||||||
.config/lazygit/.omc/**
|
.config/lazygit/.omc/**
|
||||||
.config/yazi/plugins/**
|
.config/yazi/plugins/**
|
||||||
.config/tmux/plugins/**
|
.config/tmux/plugins/**
|
||||||
|
!.config/tmux/plugins/tpm
|
||||||
.config/fish/fish_variables
|
.config/fish/fish_variables
|
||||||
.config/nvim/lazy-lock.json
|
.config/nvim/lazy-lock.json
|
||||||
.config/nvim/.git
|
.config/nvim/.git
|
||||||
|
|||||||
@@ -2,11 +2,6 @@
|
|||||||
# Post-apply housekeeping. Re-runs when this file's rendered content changes.
|
# Post-apply housekeeping. Re-runs when this file's rendered content changes.
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
# tmux plugin manager — tmux.conf expects tpm at this path
|
|
||||||
if command -v tmux >/dev/null 2>&1 && [ ! -d "$HOME/.config/tmux/plugins/tpm" ]; then
|
|
||||||
git clone --depth=1 https://github.com/tmux-plugins/tpm "$HOME/.config/tmux/plugins/tpm" || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v bat >/dev/null 2>&1; then bat cache --build >/dev/null || true; fi
|
if command -v bat >/dev/null 2>&1; then bat cache --build >/dev/null || true; fi
|
||||||
|
|
||||||
{{ if eq .chezmoi.os "linux" -}}
|
{{ if eq .chezmoi.os "linux" -}}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ function fish_user_key_bindings
|
|||||||
# prompt back in place (or below any output) afterwards. ctrl-a:
|
# prompt back in place (or below any output) afterwards. ctrl-a:
|
||||||
# omp-session resumes or starts omp for the repo (same in zsh); when it
|
# omp-session resumes or starts omp for the repo (same in zsh); when it
|
||||||
# opens the omp-sessions cable and it is cancelled, it steps back up.
|
# opens the omp-sessions cable and it is cancelled, it steps back up.
|
||||||
|
# ctrl-n: always a new omp session.
|
||||||
bind -M $mode ctrl-e '_tv_inline git-files; commandline -f repaint'
|
bind -M $mode ctrl-e '_tv_inline git-files; commandline -f repaint'
|
||||||
bind -M $mode ctrl-b purple repaint
|
bind -M $mode ctrl-b purple repaint
|
||||||
bind -M $mode ctrl-y clip-last
|
bind -M $mode ctrl-y clip-last
|
||||||
@@ -23,6 +24,7 @@ function fish_user_key_bindings
|
|||||||
bind -M $mode ctrl-o _gho_bind
|
bind -M $mode ctrl-o _gho_bind
|
||||||
bind -M $mode ctrl-p _pj_bind
|
bind -M $mode ctrl-p _pj_bind
|
||||||
bind -M $mode ctrl-a 'omp-session; commandline -f repaint'
|
bind -M $mode ctrl-a 'omp-session; commandline -f repaint'
|
||||||
|
bind -M $mode ctrl-n 'omp; commandline -f repaint'
|
||||||
bind -M $mode ctrl-w 'atuin ai inline; commandline -f repaint'
|
bind -M $mode ctrl-w 'atuin ai inline; commandline -f repaint'
|
||||||
# ctrl-z at the prompt: fg the only background job, or pick one from
|
# ctrl-z at the prompt: fg the only background job, or pick one from
|
||||||
# the jobs tv cable when there are several (_jobs_bind).
|
# the jobs tv cable when there are several (_jobs_bind).
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
# Font Configuration
|
# Font Configuration
|
||||||
font-size = 12.5
|
font-size = 13
|
||||||
font-family = Victor Mono NF
|
font-family = Victor Mono NF
|
||||||
background-blur = true
|
background-blur = true
|
||||||
|
|
||||||
# Window Configuration
|
# Window Configuration
|
||||||
window-decoration = false
|
window-decoration = false
|
||||||
window-padding-x = 12
|
window-padding-x = 0
|
||||||
window-padding-y = 12
|
window-padding-y = 0
|
||||||
background-opacity = 0.9
|
background-opacity = 0.9
|
||||||
|
|
||||||
# Cursor Configuration
|
# Cursor Configuration
|
||||||
@@ -37,6 +37,10 @@ gtk-titlebar = false
|
|||||||
|
|
||||||
quit-after-last-window-closed = false
|
quit-after-last-window-closed = false
|
||||||
quit-after-last-window-closed-delay = 5m
|
quit-after-last-window-closed-delay = 5m
|
||||||
|
# Every window and tab attaches to the tmux session "main", creating it
|
||||||
|
# when missing, so closing Ghostty detaches instead of killing the shells.
|
||||||
|
command = tmux new-session -A -s main
|
||||||
|
|
||||||
# Shell integration
|
# Shell integration
|
||||||
shell-integration = detect
|
shell-integration = detect
|
||||||
shell-integration-features = cursor,sudo,title,no-cursor
|
shell-integration-features = cursor,sudo,title,no-cursor
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ hl.unbind("SUPER + P") -- was: pseudo window
|
|||||||
hl.unbind("SUPER + SPACE") -- was: pseudo window
|
hl.unbind("SUPER + SPACE") -- was: pseudo window
|
||||||
|
|
||||||
-- Omarchy's SUPER + SPACE is ALT + SPACE, so the key is free in Omarchy.
|
-- Omarchy's SUPER + SPACE is ALT + SPACE, so the key is free in Omarchy.
|
||||||
o.bind("ALT + SPACE", "Toggle Launcher", "omarchy-menu toggle launcher")
|
-- o.bind("ALT + SPACE", "Toggle Launcher", "omarchy-menu toggle launcher")
|
||||||
|
|
||||||
-- Mod+Shift+Return was the vicinae window switcher. ScrollOverview on
|
-- Mod+Shift+Return was the vicinae window switcher. ScrollOverview on
|
||||||
-- ALT + TAB below takes that job, so SUPER + SHIFT + RETURN keeps its default
|
-- ALT + TAB below takes that job, so SUPER + SHIFT + RETURN keeps its default
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ hl.config({
|
|||||||
decoration = {
|
decoration = {
|
||||||
rounding = 0,
|
rounding = 0,
|
||||||
|
|
||||||
|
-- Backdrop behind every scratch (special) workspace: the desktop under it
|
||||||
|
-- is darkened by this fraction.
|
||||||
|
dim_special = 0.33,
|
||||||
|
|
||||||
blur = {
|
blur = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
-- Cheaper than the themes' size 6 / 3 passes; with only terminals
|
-- Cheaper than the themes' size 6 / 3 passes; with only terminals
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||||
-- List current monitors and supported resolutions with: hyprctl monitors all
|
-- List current monitors and supported resolutions with: hyprctl monitors all
|
||||||
|
|
||||||
local omarchy_gdk_scale = 2
|
local omarchy_gdk_scale = 3
|
||||||
local omarchy_monitor_scale = 2
|
local omarchy_monitor_scale = 3.2
|
||||||
|
|
||||||
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
|
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
|
||||||
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
|
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
|
||||||
|
|
||||||
-- Apple Studio Display on the left, laptop panel (eDP-1) on the right.
|
-- Laptop panel (eDP-1) on the left, Apple Studio Display on the right.
|
||||||
-- Logical widths at scale 2: 5120/2 = 2560, so eDP-1 starts at x=2560.
|
-- Logical widths at scale 2: 2560/2 = 1280, so DP-4 starts at x=1280.
|
||||||
hl.monitor({ output = "DP-4", mode = "5120x2880@60", position = "0x0", scale = 2 })
|
hl.monitor({ output = "eDP-1", mode = "2560x1600@180", position = "0x0", scale = 2 })
|
||||||
hl.monitor({ output = "eDP-1", mode = "2560x1600@180", position = "2560x0", scale = 2 })
|
hl.monitor({ output = "DP-4", mode = "5120x2880@60", position = "1280x0", scale = 2 })
|
||||||
|
|
||||||
-- Configure a specific monitor.
|
-- Configure a specific monitor.
|
||||||
-- hl.monitor({ output = "DP-2", mode = "2560x1440@144", position = "0x0", scale = 1 })
|
-- hl.monitor({ output = "DP-2", mode = "2560x1440@144", position = "0x0", scale = 1 })
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# ── base.conf · shared ──
|
# ── base.conf · shared ──
|
||||||
font_family VictorMono Nerd Font
|
font_family VictorMono Nerd Font
|
||||||
|
font_size 13.0
|
||||||
bold_italic_font auto
|
bold_italic_font auto
|
||||||
window_padding_width 8
|
window_padding_width 8
|
||||||
hide_window_decorations yes
|
hide_window_decorations yes
|
||||||
|
|||||||
@@ -104,3 +104,12 @@ set -g message-style "bg=default,fg=blue"
|
|||||||
set -g message-command-style "bg=default,fg=blue"
|
set -g message-command-style "bg=default,fg=blue"
|
||||||
set -g mode-style "bg=blue,fg=black"
|
set -g mode-style "bg=blue,fg=black"
|
||||||
setw -g clock-mode-colour blue
|
setw -g clock-mode-colour blue
|
||||||
|
|
||||||
|
# Plugins (tpm, cloned by .chezmoiexternal.toml). prefix + I installs,
|
||||||
|
# prefix + U updates, prefix + alt + u removes unlisted ones.
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
set -g @plugin 'vaaleyard/tmux-dotbar'
|
||||||
|
|
||||||
|
# Keep at the very bottom.
|
||||||
|
run '~/.config/tmux/plugins/tpm/tpm'
|
||||||
@@ -16,7 +16,7 @@ _zle-run() {
|
|||||||
$cmd </dev/tty
|
$cmd </dev/tty
|
||||||
zle reset-prompt
|
zle reset-prompt
|
||||||
}
|
}
|
||||||
for _cmd in purple clip-last omp-session yy lazygit; do
|
for _cmd in purple clip-last omp-session omp yy lazygit; do
|
||||||
zle -N "run-$_cmd" _zle-run
|
zle -N "run-$_cmd" _zle-run
|
||||||
done
|
done
|
||||||
unset _cmd
|
unset _cmd
|
||||||
@@ -85,6 +85,8 @@ bindkey '^P' pj-inline
|
|||||||
# ctrl-a: omp-session resumes or starts omp for the repo; after a cancelled
|
# ctrl-a: omp-session resumes or starts omp for the repo; after a cancelled
|
||||||
# omp-sessions picker it moves the cursor back up itself.
|
# omp-sessions picker it moves the cursor back up itself.
|
||||||
bindkey '^A' run-omp-session
|
bindkey '^A' run-omp-session
|
||||||
|
# ctrl-n: always a new omp session.
|
||||||
|
bindkey '^N' run-omp
|
||||||
# ctrl-f: yazi; yy cd's to yazi's exit dir on quit.
|
# ctrl-f: yazi; yy cd's to yazi's exit dir on quit.
|
||||||
bindkey '^F' run-yy
|
bindkey '^F' run-yy
|
||||||
bindkey '^G' run-lazygit
|
bindkey '^G' run-lazygit
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
# Loop 1 — answer-engine gap (green)
|
|
||||||
# Cadence: Thu 07:00 weekly · Tool: Exa
|
|
||||||
|
|
||||||
You are one round of a weekly answer-gap loop: questions developers ask that
|
|
||||||
WalletBase should be the answer to, but isn't.
|
|
||||||
|
|
||||||
## Question universe (rotate through, same check per question)
|
|
||||||
Seed: "how do I give my AI agent a wallet", "how to sponsor gas for users",
|
|
||||||
"passkey signing for smart accounts", "how to limit what an AI agent can spend",
|
|
||||||
"ERC-4337 vs EIP-7702 for agents", "revoke an AI agent's permissions onchain".
|
|
||||||
Plus: new questions harvested from previous rounds (see state file ## queue).
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file. Find the first question in ## queue not yet processed
|
|
||||||
(or the next seed question on first runs).
|
|
||||||
2. For that ONE question: search what currently answers it (docs, blogs, SO,
|
|
||||||
competitor pages). Log who owns the answer today.
|
|
||||||
3. Write ONE full content brief under ## queue: exact target question, current
|
|
||||||
best answer's weakness, outline, code-example requirements, internal
|
|
||||||
docs/GUIDE.md sections to link. Brief only — a human writes and ships it.
|
|
||||||
4. Harvest up to 3 NEW adjacent questions discovered during research; append
|
|
||||||
to ## queue unprocessed.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
Never escalate. Gap analysis is routine work.
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
ONE question per round, ONE brief. Max 15 fetches. Two failures → ## blocked.
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# run-loop.sh <loop-name> — one round of a loop, cheap-model-first with Fable escalation.
|
|
||||||
# Green loops only: prompts are read-only + write-to-own-state-file by design.
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
LOOP="${1:?usage: run-loop.sh <loop-name>}"
|
|
||||||
DIR="$HOME/.omp/loops/$LOOP"
|
|
||||||
PROMPT="$DIR/loop.md"
|
|
||||||
STATE="$DIR/state.md"
|
|
||||||
LOG="$DIR/runs.log"
|
|
||||||
[[ -f "$PROMPT" ]] || { echo "no such loop: $LOOP" >&2; exit 1; }
|
|
||||||
[[ -f "$STATE" ]] || printf '# %s — state\n\n## queue\n\n## done\n\n## blocked\n' "$LOOP" > "$STATE"
|
|
||||||
|
|
||||||
# Hard caps (loop #21 escalation policy + the article's stop rules):
|
|
||||||
# - smol model runs the routine round, 10 min wall clock
|
|
||||||
# - Fable (default model) only re-runs on an explicit ESCALATE marker, 20 min cap
|
|
||||||
# - one escalation max per round; never more than one round per invocation
|
|
||||||
SMOL_MAX=600
|
|
||||||
FABLE_MAX=1200
|
|
||||||
|
|
||||||
ts() { date -Is; }
|
|
||||||
run() { # run <model-flag...> — returns the model's stdout
|
|
||||||
omp -p --no-session --max-time "$2" ${1:+--model "$1"} \
|
|
||||||
"$(cat "$PROMPT")
|
|
||||||
|
|
||||||
Loop directory: $DIR
|
|
||||||
State file (read it first, append to it, never rewrite history): $STATE
|
|
||||||
Round timestamp: $(ts)"
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "[$(ts)] round start (smol)" >> "$LOG"
|
|
||||||
OUT="$(run "kimi-for-coding" "$SMOL_MAX" 2>>"$LOG" || true)"
|
|
||||||
printf '%s\n' "$OUT" >> "$LOG"
|
|
||||||
|
|
||||||
if grep -q '^ESCALATE' <<<"$OUT"; then
|
|
||||||
echo "[$(ts)] escalating to default model" >> "$LOG"
|
|
||||||
OUT="$(run "" "$FABLE_MAX" 2>>"$LOG" || true)"
|
|
||||||
printf '%s\n' "$OUT" >> "$LOG"
|
|
||||||
# Escalation ledger (loop #21): every Fable call must be visible and countable
|
|
||||||
echo "[$(ts)] $LOOP escalated" >> "$HOME/.omp/loops/escalations.log"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[$(ts)] round end" >> "$LOG"
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# Loop 10 — brand-mention feature radar (green)
|
|
||||||
# Cadence: Wed 07:00 weekly · Tools: HN Algolia API (no key), Exa
|
|
||||||
|
|
||||||
You are one round of a weekly mention-sweep for WalletBase and its problem
|
|
||||||
space. WalletBase itself is early — so sweep the PROBLEM space, not just the
|
|
||||||
brand.
|
|
||||||
|
|
||||||
## Queries (same check every round)
|
|
||||||
- HN Algolia (https://hn.algolia.com/api/v1/search_by_date?query=...):
|
|
||||||
"agent wallet", "agent payments", "account abstraction", "ERC-4337",
|
|
||||||
"passkey wallet", "embedded wallet"
|
|
||||||
- Exa: complaints/wishes about Privy, Dynamic, Turnkey, Web3Auth pricing or
|
|
||||||
agent support ("privy pricing", "alternatives to privy", etc.)
|
|
||||||
- Exa: "walletbase" brand mentions (expect ~0; log the count anyway — trend matters)
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file. Skip item IDs/URLs already logged.
|
|
||||||
2. Sweep last 7 days. Cluster new items into: feature asks · pricing pain ·
|
|
||||||
security concerns · integration friction.
|
|
||||||
3. Log clusters with counts and 1–2 representative links each.
|
|
||||||
4. ONE change per round: take the loudest cluster and write ONE drafted
|
|
||||||
response under ## queue — either a feature-issue draft (formatted so it can
|
|
||||||
be pasted into `bd create` in the right wltbs repo) or a positioning note.
|
|
||||||
Draft only. Never create the issue yourself.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
`ESCALATE:` only for a security-relevant discussion of a dependency WalletBase
|
|
||||||
uses (ERC-4337 EntryPoint, passkey/WebAuthn, UCAN libs).
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
One sweep, one draft, stop. Max 30 API calls. Two failures → ## blocked, stop.
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Loop 4 — competitor-content watch (green)
|
|
||||||
# Cadence: Fri 07:00 weekly · Tool: Exa web search
|
|
||||||
|
|
||||||
You are one round of a weekly competitor-content loop for WalletBase.
|
|
||||||
|
|
||||||
## Watched competitors (same check every round)
|
|
||||||
- Privy (privy.io/blog), Dynamic (dynamic.xyz/blog), Turnkey (turnkey.com/blog)
|
|
||||||
- Crossmint (blog.crossmint.com), Para (getpara.com/blog), Pimlico (pimlico.io/blog)
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file. Skip URLs already logged.
|
|
||||||
2. Find posts published in the last 7 days from each competitor.
|
|
||||||
3. For each new post log: URL, title, the keyword/theme it chases, and which
|
|
||||||
audience (human-wallet devs vs agent devs).
|
|
||||||
4. ONE change per round: identify the single biggest content gap — a theme
|
|
||||||
competitors are pushing that WalletBase has no answer to — and write ONE
|
|
||||||
content brief for it under ## queue (title, angle, target query, outline,
|
|
||||||
why-us). One brief, not a list.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
`ESCALATE:` only if a competitor announces an agent-economy product (agent
|
|
||||||
wallets, delegation, agent payments) — that reprioritizes the whole queue.
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
Six competitors, one pass, one brief, stop. Max 20 page fetches. Two
|
|
||||||
consecutive tool failures → log under ## blocked, stop.
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# /goal templates — kill-criteria (#22) and pre-mortem (#23)
|
|
||||||
|
|
||||||
Not scheduled. Paste into an interactive omp session when facing a decision.
|
|
||||||
Both end with pasted proof per the goal contract: the judge only sees the
|
|
||||||
conversation, so "done" = the artifact is IN the chat.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## kill-criteria (#22)
|
|
||||||
|
|
||||||
/goal For the decision "[DECISION]", produce a kill-criteria table for every
|
|
||||||
live option. For each option: (1) state the option in one line, (2) write the
|
|
||||||
SINGLE measurable condition that would disqualify it — a number, a date, or a
|
|
||||||
named event, not vibes, (3) hunt for evidence for/against that condition using
|
|
||||||
web search and the repos under ~/Developer/github.com/wltbs, citing every
|
|
||||||
claim, (4) verdict: ALIVE / KILLED / NEEDS-DATA with what data and where to
|
|
||||||
get it. Done when the full table is pasted in this chat with a citation per
|
|
||||||
verdict, and every KILLED verdict quotes the evidence that tripped its
|
|
||||||
condition. If evidence can't be found for an option, paste what you searched
|
|
||||||
and mark it NEEDS-DATA — do not guess. Hard cap: 40 tool calls.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## pre-mortem (#23)
|
|
||||||
|
|
||||||
/goal It is 12 months from now and the decision "[DECISION]" failed badly.
|
|
||||||
Write the post-mortem as if it already happened: (1) the headline of the
|
|
||||||
failure, (2) the 3–5 causal chains that led there, each traced back to a
|
|
||||||
specific assumption we hold TODAY (quote the assumption from our notes/repos
|
|
||||||
where possible), (3) for each chain, the earliest observable warning sign and
|
|
||||||
where it would show up first (a metric, a log, a competitor move, a regulator
|
|
||||||
page), (4) the one cheapest mitigation per chain that we could start this
|
|
||||||
week. Done when the full pre-mortem is pasted in this chat and every causal
|
|
||||||
chain names its present-day assumption explicitly. No generic risks ("market
|
|
||||||
turns") — every chain must be specific to WalletBase's architecture, GTM, or
|
|
||||||
regulatory surface. Hard cap: 30 tool calls.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# Loop 19 — overnight intel refresh (green)
|
|
||||||
# Cadence: Mon 06:00 weekly · Tool: Exa web search
|
|
||||||
|
|
||||||
You are one round of a weekly intel loop for WalletBase — embedded wallet
|
|
||||||
infrastructure for the agent economy (ERC-4337 smart accounts, passkeys,
|
|
||||||
UCAN delegation, in-house bundler/paymaster on Base).
|
|
||||||
|
|
||||||
## Tracked beats (same check every round)
|
|
||||||
1. ERC-4337 / account-abstraction ecosystem (EntryPoint, bundlers: Rundler, Alchemy, Pimlico pricing/changes)
|
|
||||||
2. EIP-7702 adoption and wallet implementations
|
|
||||||
3. Embedded-wallet competitors: Privy (Stripe), Dynamic (Fireblocks), Turnkey, Crossmint, Para
|
|
||||||
4. Agent-payments protocols: x402, UCAN ecosystem, agent wallet SDKs
|
|
||||||
5. Base chain: fees, precompiles (RIP-7212), infra changes
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file first. Skip anything already logged in ## done.
|
|
||||||
2. Search each beat for items from the last 7 days ONLY.
|
|
||||||
3. Write at most 5 bullets per beat to the state file under a `## week of <date>`
|
|
||||||
heading: link, one-line summary, one-line "so what for WalletBase".
|
|
||||||
4. ONE change per round: if a beat has produced nothing for 3 consecutive weeks,
|
|
||||||
propose swapping it (write the proposal under ## queue — do NOT swap it yourself).
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
If you find a development that plausibly invalidates a core assumption
|
|
||||||
(bundler economics, a competitor shipping agent-native delegation, an
|
|
||||||
EntryPoint breaking change), output a line starting with `ESCALATE:` and the
|
|
||||||
reason. Otherwise never escalate.
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
One pass over the 5 beats, then stop. If a search tool fails twice, log it
|
|
||||||
under ## blocked and stop. Never fetch more than 25 pages total.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# Loop 20 — regulatory / source digest (green)
|
|
||||||
# Cadence: Tue 07:00 weekly · Tool: Exa
|
|
||||||
# Maps to the WalletBase risk register: MSB/FinCEN, OFAC, MiCA/CASP, MEV policy.
|
|
||||||
|
|
||||||
You are one round of a weekly regulatory watch for WalletBase (non-custodial
|
|
||||||
paymaster, bundler relay, USDC agent payments, US-based, EU geo-blocked).
|
|
||||||
|
|
||||||
## Watched sources (same check every round)
|
|
||||||
1. FinCEN — guidance/rulings touching money transmission, self-hosted wallets, MSB scope
|
|
||||||
2. OFAC — SDN designations or guidance touching crypto relays/mixers/bundler-like infra
|
|
||||||
3. SEC/CFTC — enforcement touching wallet infra or AA providers
|
|
||||||
4. EU — MiCA/CASP implementation news relevant to non-custodial infra
|
|
||||||
5. Ethereum protocol governance — ERC-4337/EIP-7702 spec changes, EntryPoint audits
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file. Skip items already logged.
|
|
||||||
2. Search last 7 days per source. ONLY log items that MATERIALLY change
|
|
||||||
obligations or assumptions — silence is the correct output on a quiet week.
|
|
||||||
3. Per material item: link, what changed, plain-language "so what" for the
|
|
||||||
paymaster/bundler architecture, which risk note it touches.
|
|
||||||
4. ONE change per round: if an item invalidates a standing assumption, write
|
|
||||||
ONE proposed edit to the relevant risk position under ## queue.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
`ESCALATE:` if anything suggests non-custodial paymasters/bundler relays fall
|
|
||||||
under MSB registration, or an OFAC action names infra architecturally similar
|
|
||||||
to ours. These are existential — worth Fable's read.
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
Five sources, one pass, stop. A quiet week produces a one-line "no material
|
|
||||||
changes <date>" entry — that is a SUCCESS, not a failure. Max 20 fetches.
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# Loop 24 — repeat-offender digest (green)
|
|
||||||
# Cadence: Sun 18:00 weekly · Tools: beads (bd) in ~/Developer/github.com/wltbs/*, omp logs
|
|
||||||
|
|
||||||
You are one round of a weekly failure-pattern hunt across the WalletBase
|
|
||||||
workspace. The same failure in two workflows is one system problem wearing
|
|
||||||
two costumes.
|
|
||||||
|
|
||||||
## Sources (same check every round)
|
|
||||||
1. `bd list --all --json` in each of: ~/Developer/github.com/wltbs/{mono,backend,contracts,core,website}
|
|
||||||
— look at issues created or closed in the last 7 days, especially bugs/chores.
|
|
||||||
2. ~/.omp/loops/*/runs.log and ~/.omp/loops/*/state.md ## blocked sections
|
|
||||||
— the loop harness's own failures.
|
|
||||||
3. ~/.omp/loops/escalations.log — is any loop escalating too often?
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file. Note previously identified patterns.
|
|
||||||
2. Sweep the sources. Cluster failures by ROOT shape, not surface symptom
|
|
||||||
(e.g. "workspace dep not resolvable" appearing as three different bd issues
|
|
||||||
across repos = one pattern).
|
|
||||||
3. Log new/recurring patterns: name, occurrences (issue IDs / log lines), trend.
|
|
||||||
4. ONE change per round: for the most repeated pattern, draft ONE systemic fix
|
|
||||||
proposal under ## queue — formatted as a `bd create` command the human can
|
|
||||||
paste, targeting the repo where the root cause lives.
|
|
||||||
NEVER run bd create yourself — draft only; a human files it.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
`ESCALATE:` only if a pattern implicates data loss or a security boundary
|
|
||||||
(key handling, paymaster balance accounting, sync corruption).
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
One sweep, one proposal, stop. Read-only on beads (list/show only). Two
|
|
||||||
failures → ## blocked, stop.
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
# Loop 3 — share-of-model watch (green)
|
|
||||||
# Cadence: Mon 07:00 weekly · Tool: Exa (answer mode)
|
|
||||||
|
|
||||||
You are one round of a weekly share-of-model tracker: when buyers ask AI
|
|
||||||
engines about our category, who is in the answer?
|
|
||||||
|
|
||||||
## Fixed question set (NEVER reword — comparability is the point)
|
|
||||||
1. "best embedded wallet SDK for developers"
|
|
||||||
2. "best wallet infrastructure for AI agents"
|
|
||||||
3. "how to give an AI agent a crypto wallet"
|
|
||||||
4. "Privy alternatives"
|
|
||||||
5. "ERC-4337 bundler and paymaster providers"
|
|
||||||
6. "passkey wallet SDK"
|
|
||||||
|
|
||||||
## Round procedure
|
|
||||||
1. READ the state file for last week's table.
|
|
||||||
2. Ask each question via Exa answer/search. Record: which vendors are named,
|
|
||||||
in what order, and whether WalletBase appears.
|
|
||||||
3. Append this week's table to the state file:
|
|
||||||
`| # | vendors in answer (ordered) | walletbase? |`
|
|
||||||
4. ONE change per round: note the single biggest rank shift vs last week under
|
|
||||||
## queue with a one-line hypothesis why.
|
|
||||||
|
|
||||||
## Escalation contract
|
|
||||||
Never escalate. This loop only measures.
|
|
||||||
|
|
||||||
## Stop
|
|
||||||
Six questions, one table, stop. If Exa fails twice → ## blocked, stop.
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
---
|
|
||||||
description: Convert a LeetCode solution file into a Fumadocs MDX docs page
|
|
||||||
---
|
|
||||||
|
|
||||||
Convert the LeetCode solution file at `$1` into a Fumadocs-formatted MDX page.
|
|
||||||
|
|
||||||
Extra instructions (optional, may include output dir override): $@
|
|
||||||
|
|
||||||
## Input format
|
|
||||||
|
|
||||||
The source file follows the standard on-disk format:
|
|
||||||
- A `/* ... */` header block: problem number, title, difficulty, LeetCode URL, problem description, examples, constraints
|
|
||||||
- A JSDoc `@param`/`@return` block
|
|
||||||
- One or more solution functions (possibly with line-by-line beginner comments and `// ====` banners)
|
|
||||||
|
|
||||||
## Output location
|
|
||||||
|
|
||||||
Default: write next to the content root at `content/docs/leetcode/<difficulty>/<category>/<number>-<slug>.mdx`, mirroring the source tree (e.g. `Easy/Array/1365.how-many-numbers.js` → `content/docs/leetcode/easy/array/1365-how-many-numbers.mdx`). Lowercase all path segments. If the extra instructions specify a different output path or content root, use that instead. Create directories as needed.
|
|
||||||
|
|
||||||
## Page structure
|
|
||||||
|
|
||||||
Produce exactly this shape:
|
|
||||||
|
|
||||||
```mdx
|
|
||||||
---
|
|
||||||
title: 1365. How Many Numbers Are Smaller Than the Current Number
|
|
||||||
description: <one-sentence summary of the technique, e.g. "Frequency map + prefix count — the counting hammer.">
|
|
||||||
---
|
|
||||||
|
|
||||||
<Callout title="Easy · Array · Hash Table">
|
|
||||||
[View on LeetCode](https://leetcode.com/problems/how-many-numbers-are-smaller-than-the-current-number/)
|
|
||||||
</Callout>
|
|
||||||
|
|
||||||
## Problem
|
|
||||||
|
|
||||||
<problem description from the header block, reflowed into clean Markdown prose — no hard-wrapped 70-char lines>
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
<each example as a fenced code block:>
|
|
||||||
|
|
||||||
```txt title="Example 1"
|
|
||||||
Input: nums = [8,1,2,2,3]
|
|
||||||
Output: [4,0,1,1,3]
|
|
||||||
```
|
|
||||||
|
|
||||||
<if an example has an Explanation, put it as plain prose under its code block>
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
|
|
||||||
<bulleted list from the header block, with values in inline code: `2 <= nums.length <= 500`>
|
|
||||||
|
|
||||||
## Solution
|
|
||||||
|
|
||||||
<one-paragraph intuition: name the pattern (frequency map, prefix sum, two pointers, etc.) and the key insight in 2–3 sentences. Derive this from the code itself.>
|
|
||||||
|
|
||||||
```js title="solution.js" lineNumbers
|
|
||||||
<the solution function, verbatim — including any existing beginner comments>
|
|
||||||
```
|
|
||||||
|
|
||||||
<Callout type="idea" title="Complexity">
|
|
||||||
**Time:** O(n log n) — **Space:** O(n)
|
|
||||||
</Callout>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
1. **Frontmatter `title` carries the h1** — Fumadocs renders it as the page title, so never emit a `# heading` in the body.
|
|
||||||
2. **Escape MDX hazards.** The header text may contain `<`, `>`, `{`, `}` (e.g. `j != i and nums[j] < nums[i]`, `2 <= nums.length <= 500`). Anything with these characters must be wrapped in inline code or fenced blocks, or the MDX compile will fail. When in doubt, inline-code it.
|
|
||||||
3. **Code is verbatim.** Copy the solution function(s) exactly — do not rewrite, reformat, or strip existing comments. The docs page documents the code as it exists.
|
|
||||||
4. **Multiple approaches → tab group:**
|
|
||||||
````mdx
|
|
||||||
```js tab="Frequency Map" tab-group="approach"
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
```js tab="Sort + Map"
|
|
||||||
...
|
|
||||||
```
|
|
||||||
````
|
|
||||||
5. **Complexity callout is derived, not guessed blindly.** Read the code: nested loop → O(n²), sort → O(n log n), single pass + map → O(n). If genuinely ambiguous, state the dominant term and why in one clause.
|
|
||||||
6. **Callout header line** = `<Difficulty> · <topic tags>`. Difficulty comes from the header block; infer 1–2 topic tags from the directory path and the technique used.
|
|
||||||
7. **No invented content.** Problem statement, examples, and constraints come only from the header block. The intuition paragraph and complexity are the only sections you author.
|
|
||||||
8. **After writing**, print one line: the output path. Nothing else.
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
---
|
|
||||||
description: Add super-simple line-by-line comments to a LeetCode solution file
|
|
||||||
---
|
|
||||||
|
|
||||||
Add beginner-level line-by-line comments to the LeetCode solution file at: $1
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
1. **Read the file first.** It follows the standard on-disk format:
|
|
||||||
- A `/* ... */` header block containing problem number, title, difficulty, URL, description, examples, and constraints
|
|
||||||
- A JSDoc `@param`/`@return` block
|
|
||||||
- The solution function(s)
|
|
||||||
|
|
||||||
2. **Never touch the header block or JSDoc block.** Preserve them byte-for-byte.
|
|
||||||
|
|
||||||
3. **Never change the code.** Do not rename variables, reformat logic, alter whitespace inside expressions, or "improve" anything. Comments only. The file must produce an identical AST after your edit.
|
|
||||||
|
|
||||||
4. **Comment style — explain as if to a complete beginner who has never programmed:**
|
|
||||||
- One comment line (or short block) ABOVE each meaningful line/statement
|
|
||||||
- Use plain everyday language and physical metaphors:
|
|
||||||
- object/map → "box" ("Create an empty box to count how many times each number appears")
|
|
||||||
- increment → "add 1 to its count"
|
|
||||||
- `(freq[x] || 0) + 1` → "If we already saw this number, add 1 to its count. If we never saw it before, start counting from 1"
|
|
||||||
- sort comparator → spell out the rule in words ("put the letter that appears MORE times first; if tied, alphabetical order")
|
|
||||||
- return → say WHAT is being returned and WHY in plain words
|
|
||||||
- Explain the WHY, not just the WHAT ("so the next bigger numbers know there are more smaller ones")
|
|
||||||
- Inline comments (`// ...` at end of line) are fine for short trailing clarifications like `.join('')` → "glue the sorted letters back into a string"
|
|
||||||
- No jargon without immediate translation: if you must say "index", follow with "(its position)"
|
|
||||||
|
|
||||||
5. **Add a section banner** above the solution function in this exact style:
|
|
||||||
```js
|
|
||||||
// ============================================
|
|
||||||
// <problem number>. <problem title>
|
|
||||||
// ============================================
|
|
||||||
```
|
|
||||||
Pull the number and title from the header block.
|
|
||||||
|
|
||||||
6. **Multiple solutions in one file:** comment every one of them, each with its own banner (append "– Approach 2" etc. to the banner title).
|
|
||||||
|
|
||||||
7. **Extra instructions** (if provided after the file path): $@
|
|
||||||
|
|
||||||
8. **After editing**, print a one-line confirmation: file path + number of comment lines added. Nothing else.
|
|
||||||
|
|
||||||
## Example transformation
|
|
||||||
|
|
||||||
Input body:
|
|
||||||
```js
|
|
||||||
var smallerNumbersThanCurrent = function (nums) {
|
|
||||||
const freq = {};
|
|
||||||
for (let x of nums) freq[x] = (freq[x] || 0) + 1;
|
|
||||||
return nums.map((x) => smaller[x]);
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
Output body:
|
|
||||||
```js
|
|
||||||
// ============================================
|
|
||||||
// 1365. How Many Numbers Are Smaller Than the Current Number
|
|
||||||
// ============================================
|
|
||||||
|
|
||||||
var smallerNumbersThanCurrent = function (nums) {
|
|
||||||
// Create an empty box to store how many times each number appears
|
|
||||||
const freq = {};
|
|
||||||
|
|
||||||
// Go through every number in the list one by one
|
|
||||||
// If we already saw this number, add 1 to its count
|
|
||||||
// If we never saw it before, start counting from 1
|
|
||||||
for (let x of nums) freq[x] = (freq[x] || 0) + 1;
|
|
||||||
|
|
||||||
// Go through the original list and replace each number
|
|
||||||
// with "how many numbers are smaller than it"
|
|
||||||
return nums.map((x) => smaller[x]);
|
|
||||||
};
|
|
||||||
```
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
app.editor.external: Ctrl+E
|
|
||||||
app.exit: Ctrl+Q
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
theme:
|
|
||||||
dark: titanium
|
|
||||||
light: light
|
|
||||||
symbolPreset: nerd
|
|
||||||
setupVersion: 2
|
|
||||||
hideThinkingBlock: false
|
|
||||||
modelRoles:
|
|
||||||
plan: anthropic/claude-fable-5
|
|
||||||
composer:
|
|
||||||
shape: rule
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json",
|
|
||||||
"mcpServers": {
|
|
||||||
"exa": {
|
|
||||||
"type": "http",
|
|
||||||
"url": "https://mcp.exa.ai/mcp"
|
|
||||||
},
|
|
||||||
"cloudflare-api": {
|
|
||||||
"type": "http",
|
|
||||||
"url": "https://mcp.cloudflare.com/mcp",
|
|
||||||
"auth": {
|
|
||||||
"type": "oauth",
|
|
||||||
"credentialId": "mcp_oauth:profile:default:https://mcp.cloudflare.com/mcp",
|
|
||||||
"tokenUrl": "https://mcp.cloudflare.com/token",
|
|
||||||
"clientId": "TOBx2IoGZW-gU-f_",
|
|
||||||
"resource": "https://mcp.cloudflare.com/mcp"
|
|
||||||
},
|
|
||||||
"oauth": {
|
|
||||||
"clientId": "TOBx2IoGZW-gU-f_"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"github": {
|
|
||||||
"type": "http",
|
|
||||||
"url": "https://api.githubcopilot.com/mcp/",
|
|
||||||
"headers": {
|
|
||||||
"Authorization": "!printf 'Bearer %s' \"$(gh auth token)\""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
|
||||||
"name": "cyberdream",
|
|
||||||
"vars": {
|
|
||||||
"bg": "#16181a",
|
|
||||||
"bgAlt": "#1e2124",
|
|
||||||
"bgHighlight": "#3c4048",
|
|
||||||
"fg": "#ffffff",
|
|
||||||
"grey": "#7b8496",
|
|
||||||
"blue": "#5ea1ff",
|
|
||||||
"green": "#5eff6c",
|
|
||||||
"cyan": "#5ef1ff",
|
|
||||||
"red": "#ff6e5e",
|
|
||||||
"yellow": "#f1ff5e",
|
|
||||||
"magenta": "#ff5ef1",
|
|
||||||
"pink": "#ff5ea0",
|
|
||||||
"orange": "#ffbd5e",
|
|
||||||
"purple": "#bd5eff"
|
|
||||||
},
|
|
||||||
"colors": {
|
|
||||||
"accent": "blue",
|
|
||||||
"border": "blue",
|
|
||||||
"borderAccent": "cyan",
|
|
||||||
"borderMuted": "grey",
|
|
||||||
"success": "green",
|
|
||||||
"error": "red",
|
|
||||||
"warning": "yellow",
|
|
||||||
"muted": "grey",
|
|
||||||
"dim": "grey",
|
|
||||||
"text": "",
|
|
||||||
"thinkingText": "grey",
|
|
||||||
|
|
||||||
"selectedBg": "bgHighlight",
|
|
||||||
"userMessageBg": "bgAlt",
|
|
||||||
"userMessageText": "fg",
|
|
||||||
"customMessageBg": "bgAlt",
|
|
||||||
"customMessageText": "fg",
|
|
||||||
"customMessageLabel": "cyan",
|
|
||||||
"toolPendingBg": "bgAlt",
|
|
||||||
"toolSuccessBg": "bgAlt",
|
|
||||||
"toolErrorBg": "bgAlt",
|
|
||||||
"toolTitle": "cyan",
|
|
||||||
"toolOutput": "fg",
|
|
||||||
|
|
||||||
"mdHeading": "orange",
|
|
||||||
"mdLink": "cyan",
|
|
||||||
"mdLinkUrl": "blue",
|
|
||||||
"mdCode": "cyan",
|
|
||||||
"mdCodeBlock": "fg",
|
|
||||||
"mdCodeBlockBorder": "grey",
|
|
||||||
"mdQuote": "grey",
|
|
||||||
"mdQuoteBorder": "grey",
|
|
||||||
"mdHr": "grey",
|
|
||||||
"mdListBullet": "cyan",
|
|
||||||
|
|
||||||
"toolDiffAdded": "green",
|
|
||||||
"toolDiffRemoved": "red",
|
|
||||||
"toolDiffContext": "grey",
|
|
||||||
|
|
||||||
"syntaxComment": "grey",
|
|
||||||
"syntaxKeyword": "magenta",
|
|
||||||
"syntaxFunction": "blue",
|
|
||||||
"syntaxVariable": "yellow",
|
|
||||||
"syntaxString": "green",
|
|
||||||
"syntaxNumber": "purple",
|
|
||||||
"syntaxType": "cyan",
|
|
||||||
"syntaxOperator": "pink",
|
|
||||||
"syntaxPunctuation": "grey",
|
|
||||||
|
|
||||||
"thinkingOff": "grey",
|
|
||||||
"thinkingMinimal": "blue",
|
|
||||||
"thinkingLow": "cyan",
|
|
||||||
"thinkingMedium": "green",
|
|
||||||
"thinkingHigh": "yellow",
|
|
||||||
"thinkingXhigh": "orange",
|
|
||||||
"thinkingMax": "red",
|
|
||||||
|
|
||||||
"bashMode": "yellow",
|
|
||||||
"pythonMode": "purple",
|
|
||||||
|
|
||||||
"statusLineBg": "bgAlt",
|
|
||||||
"statusLineSep": "grey",
|
|
||||||
"statusLineModel": "purple",
|
|
||||||
"statusLinePath": "blue",
|
|
||||||
"statusLineGitClean": "green",
|
|
||||||
"statusLineGitDirty": "yellow",
|
|
||||||
"statusLineContext": "cyan",
|
|
||||||
"statusLineSpend": "pink",
|
|
||||||
"statusLineStaged": "green",
|
|
||||||
"statusLineDirty": "yellow",
|
|
||||||
"statusLineUntracked": "red",
|
|
||||||
"statusLineOutput": "fg",
|
|
||||||
"statusLineCost": "orange",
|
|
||||||
"statusLineSubagents": "magenta"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user