Repository navigation
Tags: codejunction/shelldeck
Tags
feat: ? menu, Ask, plugins; v0.0.11 (#19) * feat: ? menu, ask, plugins - ? on empty shell prompt opens inline menu at cursor: commands, bookmarks, plugin commands, Ask - Ask: agent's model writes one command for terminal's shell+OS, typed not run; sd ask - ask_agent / ask_model settings - plugins via shelldeck.plugins entry points: commands (?docker ps, sd docker ps), event handlers - sd plugin list|enable|disable|run; reference plugin examples/shelldeck-docker - fix: shelldeck skill frontmatter not valid YAML, agents hid skill - fix: empty Enter left terminal marked running until next command * fix(ask): first ? in new terminal, in-menu progress, Ctrl+I - ignore xterm auto-replies (CPR, DA, focus, OSC) in keystroke tracking; new ConPTY made first line look edited, ? went to shell - Ask keeps menu open: spinner, then command (Enter inserts, Shift+Enter runs), edit question to ask again, errors in place - Ctrl+I at empty prompt opens Ask box, like Devin Desktop terminal Command - menu placed from cursor cell, not xterm textarea (stale in new pane) - long generated commands wrap - decode agent output as UTF-8 * feat(plugins): Plugins page, command args, Ask uses plugins - Plugins page (sidebar More): status, package, errors, commands with Run, events, enable/disable - @command(usage="<container>"): ? menu fills `docker logs ` to type args, Run asks for them, CLI shows usage - Ask sees plugin commands; model may answer `?docker logs web`, menu runs it, sd ask prints `sd docker logs web` - plugin code runs through PluginError guard: sys.exit/any error never stops server; entry point name must match plugin - server tells page on connect if shell at prompt (replayed screen has no prompt marks): ? after page load works - input typed while socket connects is queued, not dropped - typed command name ranks above Ask in ? menu - docs/plugins.md: writing a plugin guide * chore(release): v0.0.11
fix: restore machine picker and remotes work lost in 0.0.9; v0.0.10 (#18 ) * feat: git changes, remote systems, replay, background terminals, agent notes and task manager - git: ±N chip on projects, Changes tab with per-file line counts and diffs - remotes: saved ssh hosts (terminal) and rdp desktops (mstsc/xfreerdp/remmina), validated, no passwords - replay last command (Ctrl+Alt+P, pane button, palette) - send terminal to background (Ctrl+Alt+W, pane button); close offers background while a command runs - sd notes for the scratchpad, live in open pages - sd top / ps / kill for the task manager, only inside shelldeck terminals - skill teaches notes and task manager * feat(machines): machine picker, remote projects, add machine with connection test - picker above New terminal: Local, ssh machines, Add machine, Manage machines - projects, terminals and agents list follow the picked machine - add machine dialog with Test connection (network, then key/agent login; password logins reported) - LDAP/NTID users (CORP\jdoe, jdoe@corp.com) via ssh -l, quoted per shell; key optional - a machine starts with a / project; folders on it are projects; terminals ssh -t and cd there * test(remotes): windows-safe shell kind and process checks * test(remotes): skip ssh tests on windows for now * fix(remotes): no ssh machines on windows for now; windows-safe process test - ssh refused on windows hosts (ssh_unsupported_on_windows), picker hidden, rdp kept - drop cmd quoting from ssh_line - process test spawns the base interpreter: a venv python.exe on windows is a launcher * docs: machines are linux/macos only for now * feat(machines): picker on every host; ssh targets linux, windows targets rdp - undo the windows-host ssh block: windows uses its openssh client - cmd quoting for ssh lines again - rdp desktops listed in the picker menu - ssh tests run on windows again * feat(machines): test connection with a password - password field in add machine, used once via SSH_ASKPASS, never saved or on argv - wrong password reported as refused - verified against a real sshd: test login, then terminal prompts and logs in * chore(release): v0.0.10 --------- Co-authored-by: Claude <noreply@anthropic.com>
feat: agent lifecycle, integrations and shared context (v0.0.7) (#14) * feat: catalog herdr agent integrations * feat: add agent lifecycle domain model * expanded agent enhancement doc and task * feat(agents): server-owned lifecycle, report api, waits, context store - agent_state registry + report validation; heuristic is fallback - POST /api/agent-reports with per-terminal token, /api/agent-status, /api/agent-wait - context.py: tasks/state/memory/decisions/events, fts5 recall, stale, redaction, md projection - sd agent status|wait|report, sd context|recall|memory|remember|discover|decide|task update|knowledge verify - update task.md * feat(skill): teach agents shared context workflow - sd context at start, recall/remember/decide during, task update before stop - update task.md * docs(agents): lifecycle, report api, waits, context cli - readme, changelog, claude.md, agent-automation.md, report schema - update task.md * feat(integrations): lifecycle hooks for claude, gemini, cursor, copilot, opencode - python -m shelldeck.hook maps agent hook events to lifecycle reports - merged, backed-up, atomic installers; only shelldeck entries touched; outdated status - report token alone accepted from localhost only - sd integration detect|status|install|uninstall, /api/integrations/{agent}, agents page section - docs/agent-integrations.md; update task.md * feat(agents): codex and claude lifecycle from their own logs - codex rollout events -> native working/done + codex resume <id> - claude sessions/<pid>.json busy + claude --resume <id> - native reports expire fast so prompts fall back to screen - update task.md * feat(agents): resume stored agent sessions after restart - agent_resume setting never|ask|auto (default ask) - resumable sessions table, sd agent resume, POST /api/sessions/{id}/resume - argv revalidated, plain words only; skips open handoffs, missing cwd/cli - update task.md * docs(readme): agent resume setting row * feat(integrations): codex hooks, session hooks for qwen, qoder, droid, devin - codex hooks.json + [features] hooks = true (herdr format) - session-only reports store resumable session, no lifecycle claim - resume argv for codex, copilot, cursor, devin, droid, qwen, qodercli - install needs agent config folder; bulk install skips missing, reports each - update task.md * feat(integrations): kimi, mastracode, kilo, grok, antigravity - kimi marked toml hooks block; askuserquestion -> blocked question - mastracode flat hooks, antigravity named block, grok own file, kilo plugin - hook accepts explicit state arg like herdr - 15 installable agents; update task.md * feat(integrations): letta session hook, hermes plugin - letta default conversation resumes per agent - hermes python plugin + plugins.enabled yaml edit, refuses unknown layouts - 17 installable agents; update task.md * feat(integrations): pi and omp extensions - shared extension template, herdr event names and tui gates - node-driven tests for opencode, kilo, pi, omp plugins - 19 installable agents; update task.md * feat(integrations): claude, codex, gemini, devin as supported set - devin full lifecycle from hooks, session from sessions.db fallback - gemini resume argv - priority tier; others marked later/preview, out of default install - update task.md * feat(agents): attention queue and project rollups - sidebar rollup needs you > working > done, text not color - agents sorted by urgency, elapsed time, open next across projects - done stays until terminal opened; new tabs get current states - update task.md * feat(agents): sd agent explain diagnostics - deciding source, report ages, heuristic inputs, integration hint - --file checks saved screen against question rules; never shows screen text - update task.md * feat(agents): prompt --wait, rename, event stream - POST /api/agent-prompt refuses blocked agents, waits for a state after the prompt - SSE /api/events with last-event-id; sd events subscribe - sd agent rename; update task.md * feat(agents): native cli flags for launch, spawn, resume - team.launch_line: model, prompt flag, per-run hooks - claude --settings per-run hooks file, skipped when global hook installed - POST /api/agent-start, sd agent start; page launch server-side - update task.md * feat(agents): native slash commands per agent - agent_commands: one action name -> claude/codex/gemini/devin native command - sd agent cmd, POST /api/sessions/{id}/agent-command, command menu on agents page - codex hooks add tool use, permission request, precompact (from codex source) - gemini --resume confirmed from docs; devin marked unverified (devin.ai blocked) - update task.md * feat(context): context page - task/state editor, memory verify/invalidate, decisions, relations, recall search - local-only note; not polled so edits stay - update task.md * feat(agents): versioned detection rules with local overrides - agent_detection/default.toml, detection.py load/match - per-agent overrides replace/disable/add; invalid ones ignored and reported - explain shows rule id and manifest; docs/agent-detection.md - update task.md * feat(agents): sd switch, message action, skill update - sd switch checkpoints and starts another agent from sd context - message button on agents page, refused while blocked - skill teaches agent prompt/cmd/wait/switch - drop claude StopFailure hook (not in claude 2.1.289) - update task.md * feat(context): agents extract their own facts on demand - POST /api/sessions/{id}/extract, sd agent extract, extract facts button - short prompt, no memory read needed (server dedups/redacts) - sd remember takes several facts per call - update task.md * docs(integrations): support matrix with verification source - tier, method, exact state, resume, verified-against per agent - changelog links it; update task.md * fix(agents): heuristic verdict replaces the previous one - stale screen 'blocked' could win a timestamp tie on windows (16ms clock) - update task.md * docs(task): record 0.0.7rc1 release * feat(context): deterministic capture of agent commands, tests, edits, sessions - hooks attach finished tool call (command+ok or file), never output - events, tests line, last error; session md per agent run on exit - people's shell commands captured too; zero tokens - fix: redact per value so event json can't break - update task.md * feat(agents): devin cli commands and hooks cross-checked from web sources - devin slash commands expanded and verified; exec shell tool captured - test guards devin hook events (devin rejects unknown ones) - update task.md * docs(task): tick ci matrix and docs items * feat(context): smart recall via agent small models, no embeddings - recall_agent setting, sd recall --smart, context page toggle - claude -p haiku / gemini flash-lite / codex exec / devin -p small, query only - keywords parsed and cached; falls back to plain search - update task.md * docs(task): claude verified with real cli; prepare rc2 * docs(task): record 0.0.7rc2 release * feat(ui): declutter sidebar footer - terminals, ai agents, context always shown; other views under a remembered More fold - settings on its own line; context gets layers icon - update task.md * feat(context): human friendly context page, pick agent and model for search - working-on summary with edit on demand, compact facts/decisions, plain-words activity - search widens with chosen installed agent + model (cheapest default) - sd recall --agent --model, GET /api/context/recall-agents - update task.md * docs(task): record 0.0.7rc3 release * feat(context): sd init sets up .shelldeck in a project - adds project if new, writes STATE/TASK/MEMORY/DECISIONS, AGENTS.md, .gitignore - AGENTS.md never overwrites user edits; --task records first task; idempotent - update task.md * docs(readme): refresh screenshots, one actions menu per agent row * docs(agents): restructure enhancement doc around what shipped * chore(release): 0.0.7 --------- Co-authored-by: Claude <noreply@anthropic.com>
feat(share): server-run tunnel, share UI, terms consent; v0.0.6 (#12) * feat(share): server-run tunnel, share UI, terms consent; v0.0.6 - server runs cloudflared; share lives until stopped (`sd share stop`) - Share dialog + Sharing pill, QR, new link, allow/deny from any host browser - terms of sharing gate first share; consent kept in <config>/share-consent - server-side agent state, remote logins, push tokens, embed view (app groundwork) * test(share): hint check os-independent
PreviousNext