Commit Graph

69 Commits

Author SHA1 Message Date
zumayaaustin 30d7366a31 Recompute path in kanban dispatch error handler to avoid unbound local
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-09 01:18:05 +00:00
zumayaaustin 9e6ec12acd Merge main: consolidate JSON reads into enhanced read_json, keep error-handling improvements
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-09 01:15:14 +00:00
zumayaaustin-creator 8253f78e69 Merge pull request #14 from zumayaaustin-creator/devin/1783552205-dedup-shared-utils
* Refactor duplicated patterns into shared utilities

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* Harden user-controlled paths with containment check (CodeQL)

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* Limit shared JSON helpers to fixed-path callers to avoid path-injection alerts

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: zumayaaustin <zumayaaustin@gmail.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 18:10:41 -07:00
zumayaaustin 7b8c81ea49 Resolve existing skills via iterdir match to break path-injection taint (CodeQL)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-09 00:13:39 +00:00
zumayaaustin e3b625a967 Merge remote kanban daemon fix; standardize skill resolution on skill_dir_path
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-09 00:10:45 +00:00
zumayaaustin 7f0c104aea Merge origin/main into error-handling branch; standardize on skill_dir_path
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-09 00:09:34 +00:00
zumayaaustin-creator 71650cbc0b Merge pull request #10 from zumayaaustin-creator/claude/agentic-os-setup-5ubuao
* Run dashboard Terminal commands through PowerShell on Windows

subprocess.run(..., shell=True) uses cmd.exe on Windows by default,
which doesn't understand PowerShell syntax like $env:VAR or
$env:USERPROFILE - commands using it failed with 'cannot find the
file specified' since cmd took it as a literal filename. Invoke
powershell.exe explicitly on Windows instead; POSIX behavior is
unchanged.

* Replace command-runner Terminal with a real interactive PTY

The previous Terminal ran one command at a time via subprocess.run
and returned its output - it couldn't run interactive programs
(colors, live input, TUIs like gemini's chat/auth flow), which is
what a terminal actually needs to do.

Backend: new /ws/terminal WebSocket endpoint spawns a real shell
attached to a pseudo-terminal (stdlib pty on POSIX, pywinpty/ConPTY
on Windows) and streams raw I/O bidirectionally, with resize support.
Replaces the old POST /api/terminal/run and GET /api/terminal/session
endpoints entirely.

Frontend: terminal.js now loads xterm.js + the fit addon from CDN
and renders a real terminal emulator wired to the WebSocket, instead
of a scrollback div with a single input line.

Verified on this Linux sandbox via raw WebSocket tests: shell spawns
correctly, commands execute and echo real output, resize propagates
to the PTY (confirmed via ), and closing the connection
cleanly kills the shell process with no orphans (interactive bash
ignores SIGTERM by default, so cleanup uses SIGKILL). Could not
visually verify the xterm.js browser rendering in this sandbox since
its egress policy blocks the CDN (cdn.jsdelivr.net) outright - same
CDN this app already uses for chart.js, so expected to work on a
normal machine; please confirm on Windows.

* Remove demo/sample Kanban tasks

These were placeholder seed data shipped with the repo (a demo
'Fix login bug' task and a 'Test kanban task' with a canned
'Waiting for API review' block reason) - not real tasks. Clearing
them so the board starts empty.

* Add missing DELETE /api/kanban/tasks/{id} endpoint

The Kanban detail modal's Delete button called api.deleteKanbanTask(),
which didn't exist on the client, and there was no backend route for
it either - clicking Delete just threw 'api.deleteKanbanTask is not
a function'. Add both the client method and the backend endpoint.

* Bridge Hermes invocation through WSL when only installed there

The dashboard runs as a native Windows process, but Hermes' official
installer is Bash-only and typically only gets set up inside WSL -
a plain PATH lookup for 'hermes' on Windows will never find it there.

Add hermes_cli_args(), which checks the native PATH first (so Mac/
Linux/WSL-native setups are unaffected) and falls back to routing
through 'wsl -e bash -lc' (a login shell, so PATH additions like
uv's ~/.local/bin are sourced) only when hermes isn't found natively
but wsl.exe is available. Wire both the chat/dispatch invocation and
the agent-health check through it, replacing the plain shutil.which
check that always reported Hermes offline in this setup.

* Make Skills Hub context files editable and add skill creation

Two real gaps: the Skills Hub had no way to create a new skill (with
a SKILL.md) at all - the only 'Install' flow was the Plugin registry,
which just records a name in a JSON file, not an actual skill folder.
And the Context Files panel was read-only, just listing filenames
with no way to view, edit, add, or delete their contents.

Adds POST /api/skills (create, with SKILL.md content), PUT
/api/skills/{name} (edit SKILL.md), and GET/PUT/DELETE
/api/skills/{name}/context/{filename} for context files - all
validated through the same regex-allowlist + resolved-path
containment pattern already used for kanban tasks. Dashboard gets a
'+ New Skill' button, an editable SKILL.md view, and per-file
edit/delete plus 'Add File' in the Context Files panel.

* Verify native hermes is actually the right agent before trusting it

hermes_cli_args() previously trusted any 'hermes' found on native PATH
without checking what it actually was. Windows machines can have an
unrelated tool also named 'hermes' (softwarepub/HERMES, an academic
software-publication tool with harvest/process/curate/deposit
subcommands - confirmed to be what was actually on this machine's
PATH), which would silently get used instead of the real NousResearch
agent installed in WSL, producing the misleading 'Hermes needs setup'
message.

Now check that a native 'hermes' actually exposes the agent's 'chat'
subcommand before using it directly, falling back to the WSL bridge
otherwise.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-08 17:05:36 -07:00
devin-ai-integration[bot] 467419fdf4 Move kanban_task_path inside try block in daemon thread 2026-07-08 23:59:40 +00:00
zumayaaustin 031884ab6c Make aggregate listings tolerate a corrupt file (best_effort), keep single GETs strict
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:27:58 +00:00
zumayaaustin 13c77b497f Limit shared JSON helpers to fixed-path callers to avoid path-injection alerts
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:19:40 +00:00
zumayaaustin ba0e3d8e0b Resolve skill name via directory match to break path-injection taint (CodeQL)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:16:47 +00:00
zumayaaustin b6c1cd3389 Harden user-controlled paths with containment check (CodeQL)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:14:46 +00:00
zumayaaustin b7c7c254b0 Tighten skill name allowlist to exclude '.' (path traversal)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:13:23 +00:00
zumayaaustin 5a7bc1639d Validate skill name to prevent path traversal (CodeQL)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:11:13 +00:00
zumayaaustin 2e7bb73807 Refactor duplicated patterns into shared utilities
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:10:05 +00:00
zumayaaustin 3cf939c403 Improve error handling: propagate corrupt-JSON errors, stop swallowing failures
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-08 23:08:16 +00:00
Claude 2d131bfb8a Verify native hermes is actually the right agent before trusting it
hermes_cli_args() previously trusted any 'hermes' found on native PATH
without checking what it actually was. Windows machines can have an
unrelated tool also named 'hermes' (softwarepub/HERMES, an academic
software-publication tool with harvest/process/curate/deposit
subcommands - confirmed to be what was actually on this machine's
PATH), which would silently get used instead of the real NousResearch
agent installed in WSL, producing the misleading 'Hermes needs setup'
message.

Now check that a native 'hermes' actually exposes the agent's 'chat'
subcommand before using it directly, falling back to the WSL bridge
otherwise.
2026-07-08 23:03:44 +00:00
Claude d36785c7ee Make Skills Hub context files editable and add skill creation
Two real gaps: the Skills Hub had no way to create a new skill (with
a SKILL.md) at all - the only 'Install' flow was the Plugin registry,
which just records a name in a JSON file, not an actual skill folder.
And the Context Files panel was read-only, just listing filenames
with no way to view, edit, add, or delete their contents.

Adds POST /api/skills (create, with SKILL.md content), PUT
/api/skills/{name} (edit SKILL.md), and GET/PUT/DELETE
/api/skills/{name}/context/{filename} for context files - all
validated through the same regex-allowlist + resolved-path
containment pattern already used for kanban tasks. Dashboard gets a
'+ New Skill' button, an editable SKILL.md view, and per-file
edit/delete plus 'Add File' in the Context Files panel.
2026-07-07 17:22:41 +00:00
Claude 085e500908 Bridge Hermes invocation through WSL when only installed there
The dashboard runs as a native Windows process, but Hermes' official
installer is Bash-only and typically only gets set up inside WSL -
a plain PATH lookup for 'hermes' on Windows will never find it there.

Add hermes_cli_args(), which checks the native PATH first (so Mac/
Linux/WSL-native setups are unaffected) and falls back to routing
through 'wsl -e bash -lc' (a login shell, so PATH additions like
uv's ~/.local/bin are sourced) only when hermes isn't found natively
but wsl.exe is available. Wire both the chat/dispatch invocation and
the agent-health check through it, replacing the plain shutil.which
check that always reported Hermes offline in this setup.
2026-07-07 14:39:00 +00:00
Claude 2a5f0aee74 Add missing DELETE /api/kanban/tasks/{id} endpoint
The Kanban detail modal's Delete button called api.deleteKanbanTask(),
which didn't exist on the client, and there was no backend route for
it either - clicking Delete just threw 'api.deleteKanbanTask is not
a function'. Add both the client method and the backend endpoint.
2026-07-06 15:39:35 +00:00
Claude 9e632ab1dc Remove demo/sample Kanban tasks
These were placeholder seed data shipped with the repo (a demo
'Fix login bug' task and a 'Test kanban task' with a canned
'Waiting for API review' block reason) - not real tasks. Clearing
them so the board starts empty.
2026-07-06 15:29:31 +00:00
Claude d7a1cbd292 Replace command-runner Terminal with a real interactive PTY
The previous Terminal ran one command at a time via subprocess.run
and returned its output - it couldn't run interactive programs
(colors, live input, TUIs like gemini's chat/auth flow), which is
what a terminal actually needs to do.

Backend: new /ws/terminal WebSocket endpoint spawns a real shell
attached to a pseudo-terminal (stdlib pty on POSIX, pywinpty/ConPTY
on Windows) and streams raw I/O bidirectionally, with resize support.
Replaces the old POST /api/terminal/run and GET /api/terminal/session
endpoints entirely.

Frontend: terminal.js now loads xterm.js + the fit addon from CDN
and renders a real terminal emulator wired to the WebSocket, instead
of a scrollback div with a single input line.

Verified on this Linux sandbox via raw WebSocket tests: shell spawns
correctly, commands execute and echo real output, resize propagates
to the PTY (confirmed via ), and closing the connection
cleanly kills the shell process with no orphans (interactive bash
ignores SIGTERM by default, so cleanup uses SIGKILL). Could not
visually verify the xterm.js browser rendering in this sandbox since
its egress policy blocks the CDN (cdn.jsdelivr.net) outright - same
CDN this app already uses for chart.js, so expected to work on a
normal machine; please confirm on Windows.
2026-07-06 05:12:54 +00:00
Claude 22f8c710dd Run dashboard Terminal commands through PowerShell on Windows
subprocess.run(..., shell=True) uses cmd.exe on Windows by default,
which doesn't understand PowerShell syntax like $env:VAR or
$env:USERPROFILE - commands using it failed with 'cannot find the
file specified' since cmd took it as a literal filename. Invoke
powershell.exe explicitly on Windows instead; POSIX behavior is
unchanged.
2026-07-06 04:09:17 +00:00
zumayaaustin-creator fb3a1979dc Merge pull request #9 from zumayaaustin-creator/claude/agentic-os-setup-5ubuao
Auto-detect free port and add one-click Windows launcher
2026-07-05 20:04:48 -07:00
Claude d0ae2926e6 Add explicit path-containment check to kanban_task_path
The regex allow-list alone wasn't enough for CodeQL's path-injection
sanitizer recognition. Resolve the candidate path and verify it's
still a direct child of the resolved kanban directory before
returning it, which is the pattern CodeQL's py/path-injection query
recognizes as clearing taint.
2026-07-06 00:21:27 +00:00
Claude 52aa18b019 Validate kanban task_id before building filesystem paths
CodeQL flagged path-traversal risk (uncontrolled data used in path
expression) across the kanban endpoints: task_id/parent_id/child_id
path parameters were spliced directly into KANBAN_DIR paths with no
validation. Task ids are always server-generated 8-char hex strings,
so add kanban_task_path() which validates against that shape and
raises 400 otherwise, and route every kanban file path through it.
2026-07-05 23:30:43 +00:00
Claude b11da78097 Wire up autonomous agent dispatch for Kanban tasks
Assigning a task to opencode, hermes, or gemini now actually runs it:
creating or PATCHing a task with one of those assignees moves it to
in_progress and hands the title+body to execute_agent() in a
background thread. On completion the agent's response is appended as
a task comment and the task is marked done (success) or blocked
(timeout/error), matching the existing block/complete state machine.

Adds POST /api/kanban/tasks/{id}/dispatch for manual dispatch/retry,
and makes the previously-stubbed POST /api/kanban/dispatch actually
scan todo/ready tasks with an agent assignee and dispatch each one.

Dashboard: the assignee field is now a select of the three agents,
the task detail modal shows an activity log of past agent runs and a
Dispatch button, and polls every 3s while a task is in_progress. Also
fixed a pre-existing bug where the detail modal read a nonexistent
kanbanData.tasks field (the board API only returns columns), so
clicking a card silently did nothing before this fix.
2026-07-05 23:16:46 +00:00
Claude fec0601722 Add a Terminal page to the dashboard
Adds a real shell terminal to the dashboard sidebar: POST
/api/terminal/run executes a command via subprocess in a
server-tracked working directory (with cd support), and GET
/api/terminal/session returns the current cwd. The frontend renders
a scrollback panel with command history (up/down arrows) styled to
match the existing chat UI.

Local-only power feature: it executes arbitrary shell commands, same
trust model as the existing agent CLIs the dashboard already shells
out to.
2026-07-05 22:15:47 +00:00
Claude 9c1cac130a Address CodeRabbit review: harden port parsing and shortcut creation
- install.ps1: wrap desktop shortcut creation in try/catch so a COM
  failure doesn't abort the whole installer (ErrorActionPreference=Stop)
- start.ps1: coerce dashboard.port to int on the Python side so a float
  value in settings.json doesn't crash the [int] cast
- start.sh: fail loudly with a clear error if no free port is found in
  20 attempts, instead of silently launching on an unverified port
2026-07-05 21:49:19 +00:00
Claude f22b44a000 Auto-detect free port and add one-click launcher
start.ps1/start.sh now fall back to the next free port instead of
crashing when the configured port is already taken (e.g. by another
local app), and auto-open the dashboard in the browser once it's up.
install.ps1 also creates a desktop shortcut (Launch-Dashboard.bat) so
the dashboard can be started without typing any commands.
2026-07-05 21:05:14 +00:00
zumayaaustin-creator cf254b7b99 Merge pull request #8 from zumayaaustin-creator/claude/agentic-os-setup-5ubuao
Fix UnicodeDecodeError serving dashboard on Windows
2026-07-05 13:38:09 -07:00
Claude e05a065c4e Fix UnicodeDecodeError reading dashboard index.html on Windows
read_text() defaults to the platform locale encoding (cp1252 on
Windows), which fails on non-ASCII bytes in index.html. Specify
utf-8 explicitly.
2026-07-05 20:30:21 +00:00
zumayaaustin-creator 98e33ca0c0 Merge pull request #4 from zumayaaustin-creator/codex/create-cross-platform-launcher-strategy
Add cross-platform PowerShell launchers and unify Python launcher usage
2026-06-26 07:33:51 -07:00
zumayaaustin-creator cbac11cdcd Merge branch 'main' into codex/create-cross-platform-launcher-strategy 2026-06-26 04:20:33 -07:00
zumayaaustin-creator 69650556e8 Merge pull request #6 from zumayaaustin-creator/codex/update-cors-configuration-in-server.py
Configure CORS origins from dashboard settings
2026-06-26 04:19:31 -07:00
zumayaaustin-creator 16c133f78a Merge pull request #5 from zumayaaustin-creator/codex/update-readme.md-with-windows-prerequisites
docs: add Windows prerequisites to README
2026-06-26 04:16:04 -07:00
zumayaaustin-creator b3f2ee5a06 Configure CORS origins from dashboard settings 2026-06-23 08:59:48 -07:00
zumayaaustin-creator d5584a04b4 docs: add Windows prerequisites 2026-06-23 08:59:27 -07:00
zumayaaustin-creator fce57302de Add cross-platform launcher scripts 2026-06-23 08:50:04 -07:00
zumayaaustin-creator 208e174bbf Merge pull request #1 from zumayaaustin-creator/claude/youthful-planck-mxlkw8
Fix 500 error on dashboard load (/api/brain)
2026-06-23 05:08:23 -07:00
Claude 17cd918485 Fix 500 on dashboard load: /api/brain crashed on journal subdirectory
list_brain() tried to read_text() every entry in brain/, including the
journal/ directory, raising IsADirectoryError.
2026-06-23 11:51:18 +00:00
modimihir07 4b6229ba5f Update Hermes MEMORY.md with v0.2.0 features: 68 features, 58 endpoints, 20 pages 2026-06-05 16:39:43 +05:30
modimihir07 21a105bc34 Sanitize personal information from repo files
Remove: email, full name, education level, location, career goals,
personal project references (AgriAssist, EROS, Java OOP, SEM-2),
budget figures, Telegram/Discord channel details, system username paths

Keep only: public project names (CloudMart, Agentic OS), GitHub
username attribution, LICENSE copyright (required by MIT), and
standard open-source README attribution
2026-06-05 16:38:47 +05:30
modimihir07 465dd63de4 Update README and AGENTS.md for v0.2.0 features 2026-06-05 15:36:03 +05:30
modimihir07 1b14c2866b v0.2.0: 7 new features + UI modernization
New features:
- Kanban Board: Visual task management with drag-and-drop, filter, priority, block/unblock
- Goals: Project targets with progress tracking, auto-sync to brain/active-projects.md
- Journal: Daily entries stored as brain/journal/YYYY-MM-DD.md with search
- Agent Health: Real-time monitoring of 3 agents (opencode/hermes/gemini)
- Smart Router: Keyword-based task routing with confidence scoring
- Learning Analytics: Skill evaluation scores and performance trends
- Session Replay: Browse and replay past opencode sessions

Technical changes:
- 30 new API endpoints across all 7 features
- api.patch() method added for PATCH support
- UI modernization: glass morphism cards, gradients, glow effects, skeleton loaders, empty states
- New CSS section (v0.2.0) with kanban board, goal cards, journal entries, agent health cards, smart router suggestions, chart cards, session messages
- 7 new sidebar nav items under Workflow and Monitoring sections
- All changes are additive (zero breaking changes to existing 13 pages / 28 endpoints)
- Full smoke test verified: every endpoint returns correct data
2026-06-05 15:22:40 +05:30
modimihir07 a5a622f7ac Restore accidentally deleted agents/hermes/MEMORY.md 2026-05-20 20:19:23 +05:30
modimihir07 1cd6680d29 SEO: add hyphenated 'agentic-os' to title, meta, OG, Twitter, H1, JSON-LD, and README for dual keyword ranking 2026-05-20 20:18:47 +05:30
modimihir07 2bf866b0b1 Fix skill execution: wire run_skill to actually invoke agent, show results in modal 2026-05-18 11:22:34 +05:30
Mihir Modi 1c5ce61e4a Fix formatting and alignment in README architecture section 2026-05-18 02:24:59 +05:30
modimihir07 27eea83e84 Remove linkedin-post.md 2026-05-18 02:17:11 +05:30