| feat(always-on): add Dashboard sub-tab with cross-workspace event timeline
Emit phase-level events (discovery/plan/execution/report) from
DiscoveryFire and CronFire into a per-project events.jsonl, aggregate
them via a new GET /api/always-on/events endpoint, and render a
Dashboard tab inside the Always-On view showing stats cards and a
chronological event feed across all workspaces.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 19 天前 |
| refactor(always-on): introduce Work Cycle as first-class entity for Apply/Archive
Workspace ownership moves from individual plans to Work Cycles. Apply and
Archive now operate at the cycle level, aligning the product model with the
underlying single-workspace-per-project constraint.
Key changes:
- New WorkCycleRecord type and WorkCycleStore (CRUD + lazy migration)
- DiscoveryFire: ensureAlwaysOnWorkspace → ensureActiveWorkCycle
- Gateway/CLI: applyPlan → applyCycle (workCycleId replaces planId)
- Web service: per-plan apply/archive replaced by cycle-level methods
- UI: plans grouped under cycle headers with cycle-level action buttons
- Tests updated across all affected modules (141 pass, 0 fail)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 12 天前 |
| refactor(always-on): introduce Work Cycle as first-class entity for Apply/Archive
Workspace ownership moves from individual plans to Work Cycles. Apply and
Archive now operate at the cycle level, aligning the product model with the
underlying single-workspace-per-project constraint.
Key changes:
- New WorkCycleRecord type and WorkCycleStore (CRUD + lazy migration)
- DiscoveryFire: ensureAlwaysOnWorkspace → ensureActiveWorkCycle
- Gateway/CLI: applyPlan → applyCycle (workCycleId replaces planId)
- Web service: per-plan apply/archive replaced by cycle-level methods
- UI: plans grouped under cycle headers with cycle-level action buttons
- Tests updated across all affected modules (141 pass, 0 fail)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 12 天前 |
| feat(always-on): implement Gateway-native Always-On module
- Add src/always-on with protocol, config, contracts, runtime, workspace,
storage, and tool subpackages per docs/always-on/02 design.
- Wire alwaysOn into PolitConfig + loadPolitConfig; politdeck server boots
AlwaysOnRuntime, injects extra tools and per-session cwd/permissionMode
overrides through createLocalGateway.
- Single isolated workspace per project: state.currentWorkspace tracks the
handle; ensureAlwaysOnWorkspace reuses it across fires; runtime never
auto-disposes (user manually rm to reset).
- Discovery and execution turns both run inside the workspace cwd; execution
turn is pinned to bypassPermissions with assertWorkspaceCwdSafe.
- Discovery prompt now embeds workspace cwd, strategy, and the project's
PolitDeck chat transcript directory.
- Lease is reverse-only: no_fresh_lease and workspace_capacity gates
removed; agent_busy / recent_user_msg only fire when a lease exists.
- Workspace config trimmed: maxConcurrentEnvs / retainSuccessfulEnvs /
retainFailedEnvs flagged as ALWAYS_ON_FIELD_REMOVED diagnostics.
- Add tests/always-on covering config, gates, contracts, state store,
ensureAlwaysOnWorkspace, channel leases, and config loader integration.
Co-authored-by: Cursor <cursoragent@cursor.com>
| 24 天前 |
| refactor(always-on): introduce Work Cycle as first-class entity for Apply/Archive
Workspace ownership moves from individual plans to Work Cycles. Apply and
Archive now operate at the cycle level, aligning the product model with the
underlying single-workspace-per-project constraint.
Key changes:
- New WorkCycleRecord type and WorkCycleStore (CRUD + lazy migration)
- DiscoveryFire: ensureAlwaysOnWorkspace → ensureActiveWorkCycle
- Gateway/CLI: applyPlan → applyCycle (workCycleId replaces planId)
- Web service: per-plan apply/archive replaced by cycle-level methods
- UI: plans grouped under cycle headers with cycle-level action buttons
- Tests updated across all affected modules (141 pass, 0 fail)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 12 天前 |
| refactor(always-on): introduce Work Cycle as first-class entity for Apply/Archive
Workspace ownership moves from individual plans to Work Cycles. Apply and
Archive now operate at the cycle level, aligning the product model with the
underlying single-workspace-per-project constraint.
Key changes:
- New WorkCycleRecord type and WorkCycleStore (CRUD + lazy migration)
- DiscoveryFire: ensureAlwaysOnWorkspace → ensureActiveWorkCycle
- Gateway/CLI: applyPlan → applyCycle (workCycleId replaces planId)
- Web service: per-plan apply/archive replaced by cycle-level methods
- UI: plans grouped under cycle headers with cycle-level action buttons
- Tests updated across all affected modules (141 pass, 0 fail)
Co-authored-by: Cursor <cursoragent@cursor.com>
| 12 天前 |