• First concrete code commit for DevLoop. Implements all 7 services that
    P0.A tools will depend on, per plan-migration P0.0.
    
    Services (server/services/devloop/, ~900 lines):
    - path-resolver.js   foundation — resolveProjectRoot + 12 derived paths;
                         sandbox + linked-new mode support; sensitive path
                         blacklist (with /tmp + os.tmpdir() exemptions);
                         ~/.devloop/linked-projects.json registry
    - doc-store.js       PRD/SDD multi-file site IO + cheerio validateHTML +
                         validateUnitsSchema + canonical-JSON hashContract
                         + automatic history/ archival
    - unit-registry.js   FSM (M-2: pending→coding→testing→passed/failed/blocked);
                         l2GateOpen; diffUnits (added/changed/removed);
                         reset semantics for L2 + L3
    - bug-tracker.js     bugs.ndjson append-only + dedupKey + P-9 transition
                         state machine + list/stats/history aggregation
    - timeline-logger.js M-13 ProcessTimeline — append/read/tail;
                         summary truncate to 280; payload oversize → ref form
    - changelog-writer.js M-15 — append/read/latest for prd/sdd/units revs
    - sse-broker.js      per-pid pub/sub + 25s heartbeat + stream.log replay
                         via Last-Event-ID; emit returns monotonic id
    - git-vault.js       spawn-git wrapper — init/commit/tag/log/diff/status/
                         resetWorkingTree/revert/archive; per-pid mutex;
                         nothing-to-commit returns {skipped:true} not throw
    
    Tests (server/tests/devloop/, 71 passing):
    - path-resolver.test.js  (17 cases) — sensitive path · sandbox alloc · linked-new
    - doc-store.test.js      (12 cases) — validateHTML · validateUnitsSchema · hashContract
    - unit-registry.test.js  (15 cases) — FSM transitions · l2GateOpen · diffUnits
    - bug-tracker.test.js    (10 cases) — open dedup · transition · list filter · history
    - timeline-logger.test.js (9 cases) — append/read/tail · summary truncate · oversize
    - git-vault.test.js      (8 cases)  — init idempotent · commit · tag · status · archive
    
    vitest config (`globals: true`) means tests use describe/it/expect globally,
    no `require('vitest')` needed (and would fail under vitest 4).
    
    Dep added: cheerio@^1.0.0 (used by docStore.validateHTML; HTML parsing).
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • The 50-page PRD HTML totals ~520KB; loading it all costs Claude ~222K
    tokens just for context. This adds a token-efficient sibling layer:
    
    - scripts/extract-spec.js → npm run spec:extract / spec:check
      Walks docs/prd/newfunction/*.html and produces stripped MD into _spec/.
      Strategy varies per page (full-extract for SDD/process/data,
      shell-strip for agents to keep long system prompts intact).
      Result: 327.9KB MD (~84K tokens) — 38% of full load, saves ~138K tokens
      for every Agent invocation that reads the spec.
    
    - scripts/git-hooks/pre-commit + scripts/install-hooks.sh
      Pre-commit guard: when any docs/prd/newfunction/*.html changes, the
      hook checks the corresponding _spec/*.md is up to date; fails commit
      if stale, telling user to `npm run spec:extract`. Auto-installed via
      package.json `prepare` script on `npm install`.
    
    - docs/prd/newfunction/_spec/ (51 .md files + CONVENTIONS.md)
      Machine-readable mirror of HTML. Used by:
      - Coder/Architect/Tester agents when reading spec at runtime
      - External Claude Code sessions doing reproducibility
      - CI checks (npm run spec:check)
      NOT hand-edited; regenerated from HTML by extract-spec.js.
    
    - CLAUDE.md: 1-line note directing future agents to read _spec/*.md
      preferentially, fall back to *.html only for wireframes/SVG/full
      human-readable context.
    
    This is the user's pre-existing scaffolding that the previous commits
    hadn't pulled in yet. Now tracked + enforced by hook.
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »

  • Architecture fix for long-running tool execution:
    
    1. ClaudeCliProtocol: Two-tier idle timeout
       - Chat mode: 45s (detect API hang/silent rate limit)
       - Tool execution mode: 5min (Bash long tasks like pip install)
       - Automatically switches on tool_use_start / content_block_stop events
    
    2. Provision API: POST /templates/:templateId/provision
       - Runs shell commands directly via child_process.exec
       - Bypasses Claude ACP entirely (no idle timeout issue)
       - 10min per-command timeout, security blocklist
       - Frontend button with prompt for custom commands
    
    3. Template UI: Added 🔧 安装依赖 button (teal)
    yibo authored
     
    Browse File »
  • …aruncreate skill paths
    
    - Upload skill files to .claude/skills/ (Claude Code ACP reads from here)
    - Add conversation type filter (user/callback/task/train) to AgentChat
    - Parse messages.log for richer conversation history display
    - Fix idearuncreate template & company agent skill directory structure
    - Add adm-zip dependency for ZIP extraction
    - Add fs/path top-level requires in company.js
    yibo authored
     
    Browse File »

  • - Agent as Micro-Container: each agent lives in data/agents/{id}/ with full encapsulation
    - Persona vs Capability split: agent.md (identity) + .claude/skills/main_skill/SKILL.md (workflow)
    - Conversations co-located: data/agents/{id}/conversations/ replaces global dir
    - Meta Skills renamed: meta_hunt, meta_digest, meta_creator, meta_evolving, meta_benchmark, meta_research
    - Dynamic Hot-Reload: AgentManager.getAgentConfig() falls back to filesystem scan
    - Parallel Sub-Agent orchestration via Promise.all with multi-terminal UI
    - Removed SQLite dependency, global skills/ directory, and legacy conversations/
    - Full architecture docs: 18-local-filesystem-first-agent-encapsulation.md
    yibo authored
     
    Browse File »