@atolis-hq/wake 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,12 +1,16 @@
1
1
  # Wake
2
2
 
3
- Wake is a local autonomous agent control plane for software development. It
4
- watches the work channels your team already uses, such as GitHub Issues,
5
- decides each item's next lifecycle step with deterministic rules, and launches
6
- local coding-agent CLIs only when agentic execution is actually needed.
3
+ Wake is a control plane for autonomous software engineering. It watches the
4
+ channels your team already uses, coordinates agent activity and involves humans
5
+ when needed, and keeps the durable record attached to the work instead of the
6
+ terminal session that happened to run it.
7
7
 
8
- Wake is the control plane and decision-maker. It launches and manages local
9
- agent sessions for each unit of agentic work.
8
+ Create an issue, assign Wake, and keep doing your own work. Wake investigates,
9
+ asks for input when human judgment matters, proposes a plan, launches local
10
+ coding-agent CLIs to implement changes, opens pull requests, and carries the
11
+ conversation forward wherever the work is already happening.
12
+
13
+ Wake owns coordination. Coding agents execute the work.
10
14
 
11
15
  ## The Problem
12
16
 
@@ -27,10 +31,11 @@ out of the token-burning path wherever possible.
27
31
 
28
32
  ## Vision
29
33
 
30
- Wake should make reliable, resumable, token-aware local agent execution
34
+ Wake should make reliable, resumable, token-aware autonomous engineering
31
35
  practical. The default operating model is asynchronous and channel-driven: work
32
- enters and progresses through durable external systems, while execution happens
33
- locally in an inspectable workspace or sandbox.
36
+ enters through durable external systems, Wake keeps humans in the loop at useful
37
+ decision points, and execution happens locally in an inspectable workspace or
38
+ sandbox.
34
39
 
35
40
  Wake is not trying to replace coding agents, issue trackers, or source control.
36
41
  It coordinates across them. Over time it should become the layer that picks
@@ -37,7 +37,8 @@ export const indexHtml = `<!DOCTYPE html>
37
37
  .statusbar .meta { color: rgba(255, 255, 255, 0.72); }
38
38
  .pill { padding: 0.15rem 0.5rem; border-radius: 999px; font-size: 0.75rem; font-weight: 600; }
39
39
  .pill-idle { background: #1f3d2c; color: #7fe3a3; }
40
- .pill-ticking { background: #1f3350; color: #7fb3ff; }
40
+ .pill-polling { background: #1f3350; color: #7fb3ff; }
41
+ .pill-working { background: #2d1f50; color: #c79bff; }
41
42
  .pill-paused { background: #4a3510; color: #ffcf7f; }
42
43
  nav { display: flex; gap: 0.25rem; padding: 0.4rem 1rem 0 0.3rem; background: var(--brand-darker); border-bottom: 1px solid #2c313a; }
43
44
  nav button { background: none; border: none; border-bottom: 2px solid transparent; color: rgba(255, 255, 255, 0.65); padding: 0.4rem 0.7rem 0.45rem; margin-bottom: -1px; cursor: pointer; font-size: 0.85rem; transition: color 0.12s ease; }
@@ -112,16 +112,26 @@ export async function buildStatus(input) {
112
112
  input.stateStore.listRecentRunRecords(1),
113
113
  buildBoard(input),
114
114
  ]);
115
- const lock = await readLockInfo(input.stateStore.paths.tickLockFile, input.now);
116
- const lockLive = lock.present && lock.pidAlive === true;
115
+ const [tickLock, runnerLock] = await Promise.all([
116
+ readLockInfo(input.stateStore.paths.tickLockFile, input.now),
117
+ readLockInfo(input.stateStore.paths.runnerLockFile, input.now),
118
+ ]);
119
+ const tickLockLive = tickLock.present && tickLock.pidAlive === true;
120
+ const runnerLockLive = runnerLock.present && runnerLock.pidAlive === true;
117
121
  // A quota-paused runner (#67) no longer stops the loop - routing falls
118
122
  // sideways to another candidate in the tier, so only the manual pause file
119
123
  // is a hard stop here. Per-runner health is surfaced separately below.
124
+ //
125
+ // Intake (tick.lock) and agent execution (runner.lock) are separate locks -
126
+ // an in-flight agent run holds only runner.lock, so both must be checked or
127
+ // the pill reads "idle" for the entire duration of a run.
120
128
  const loopState = paused
121
129
  ? 'paused'
122
- : lockLive
123
- ? 'ticking'
124
- : 'idle';
130
+ : runnerLockLive
131
+ ? 'working'
132
+ : tickLockLive
133
+ ? 'polling'
134
+ : 'idle';
125
135
  const runnerHealth = ledger?.runners ?? {};
126
136
  const lastEvent = recentEvents[0];
127
137
  const lastRun = recentRuns[0];
@@ -155,7 +165,8 @@ export async function buildStatus(input) {
155
165
  loopState,
156
166
  paused,
157
167
  runnerHealth,
158
- lock,
168
+ lock: tickLock,
169
+ runnerLock,
159
170
  lastEvent: lastEvent === undefined
160
171
  ? undefined
161
172
  : {
@@ -1 +1 @@
1
- export const wakeVersion = "0.1.17+gdbc29dc";
1
+ export const wakeVersion = "0.1.19+ga9612b2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atolis-hq/wake",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "Local autonomous agent control plane for software development",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {