@stage5/lumine 0.2.57 → 0.2.59

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
@@ -243,13 +243,16 @@ lumine sponsor status
243
243
  ```
244
244
 
245
245
  After Mikey approves an application, configure conservative limits based on
246
- the subscription you are contributing, then start one shared foreground duty:
246
+ the subscription you are contributing. From the Codex or Claude Code session
247
+ that will personally monitor and perform the work, start one shared duty and
248
+ keep renewing its short watch:
247
249
 
248
250
  ```bash
249
251
  lumine sponsor capacity --concurrency 1 --helpers 0 \
250
252
  --daily-limit 3 --weekly-limit 10
251
253
  lumine sponsor duty start --provider codex \
252
254
  --model gpt-5.6-sol --effort max --service-tier priority
255
+ lumine sponsor duty watch --json
253
256
  ```
254
257
 
255
258
  Sponsor commands use the same browser-approval login as the rest of Lumine.
@@ -258,21 +261,54 @@ using that browser to approve their own account, and then resumes. Any Twinkle
258
261
  account may authenticate this way, but login never grants sponsor duty:
259
262
  `sponsor duty start` still requires that exact account to have a canonical,
260
263
  server-approved sponsor profile.
264
+ When the sponsor agreement changes, an already-approved sponsor must read the
265
+ new version and explicitly renew it before opening duty:
261
266
 
262
- While that foreground process has a fresh server lease, both Zero and Ciel can
263
- delegate user-approved Build work to the shared worker pool. The user chooses
264
- the assistant for each request, and may see the named sponsor and canonical
265
- shared queue.
266
- With no live duty, the website stays in its ordinary chat state and shows none
267
- of the Workshop UI. Press Ctrl-C to stop accepting work and drain already
268
- claimed jobs before duty ends; `pause`, `resume`, and `stop` are also available
269
- without a Zero/Ciel argument.
270
-
271
- Zero or Ciel remains the user-facing teammate. The local coding agent receives
272
- only the initial relay and active-job Build follow-ups covered by the user’s
273
- explicit Workshop consent, the assigned contribution branch, and its scoped
274
- Build Forum—not the raw assistant chat. It
275
- cannot merge into Main, publish, or use website-management APIs. Lumine records
267
+ ```bash
268
+ lumine sponsor agreement
269
+ lumine sponsor agreement accept --accept-agreement
270
+ ```
271
+
272
+ Each `duty watch` is deliberately bounded. The same agent session runs it again
273
+ to remain present. If that session stops checking in, its short server lease
274
+ expires and the Workshop no longer advertises it as available. A detached
275
+ heartbeat, supervisor, or provider-spawning daemon is not sponsor duty. The CLI
276
+ rejects a provider name that differs from the agent session actually running
277
+ the command.
278
+
279
+ When a user approves a plan, `duty watch` returns the scoped assignment file and
280
+ contribution workspace to that same session. It does not launch a fresh Codex
281
+ or Claude process. The on-duty agent uses this explicit lifecycle while it
282
+ works:
283
+
284
+ ```bash
285
+ lumine sponsor job begin 42
286
+ lumine sponsor job pulse 42
287
+ lumine sponsor job relay-applied 42 101
288
+ lumine sponsor job complete 42 --summary "Implemented and tested the approved change"
289
+ ```
290
+
291
+ `pulse` renews the duty/job leases and returns any newly approved follow-up.
292
+ Run it between substantial work steps. `relay-applied` is an explicit receipt;
293
+ completion is rejected until every delivered relay has actually been applied
294
+ and acknowledged. Use `helper-start` and `helper-complete` to record native
295
+ same-session subagents within the configured helper limit—the CLI records them
296
+ but never spawns a replacement provider. Use `job fail --reason` for a real
297
+ terminal failure, and `duty pause|resume|stop` to control admission.
298
+ If the provider reroutes the session after duty starts, report the actual
299
+ runtime on `helper-complete` or `job complete` with `--resolved-model`,
300
+ `--resolved-effort`, and (when applicable) `--resolved-service-tier`.
301
+
302
+ Both Zero and Ciel delegate to this shared capacity. The user chooses the
303
+ visible assistant for each request and may see the named sponsor and canonical
304
+ queue. With no live duty, the website stays in its ordinary chat state and
305
+ shows none of the Workshop UI.
306
+
307
+ Zero or Ciel remains the user-facing teammate. The on-duty agent session
308
+ receives only the initial relay and active-job Build follow-ups covered by the
309
+ user’s explicit Workshop consent, the assigned contribution branch, and its
310
+ scoped Build Forum—not the raw assistant chat. It cannot merge into Main,
311
+ publish, or use website-management APIs. Lumine records
276
312
  the requested and provider-reported model, effort, service tier, runtime/usage
277
313
  evidence, coordinator/helper tree, saved artifact, and branch notice. Every
278
314
  completed handoff enters the daily integrity flow; probationary, hard-flagged,
package/lib/commands.js CHANGED
@@ -1118,13 +1118,15 @@ export async function save(options) {
1118
1118
  lastSavedAt: new Date().toISOString(),
1119
1119
  filesHash: typeof result.filesHash === "string" ? result.filesHash : null,
1120
1120
  });
1121
- printSaveResult({
1122
- result,
1123
- build,
1124
- dir,
1125
- files,
1126
- publishRequested: Boolean(options.publish),
1127
- });
1121
+ if (!options.quiet) {
1122
+ printSaveResult({
1123
+ result,
1124
+ build,
1125
+ dir,
1126
+ files,
1127
+ publishRequested: Boolean(options.publish),
1128
+ });
1129
+ }
1128
1130
 
1129
1131
  if (options.publish) {
1130
1132
  if (build?.canPublish === false) {
@@ -1488,12 +1490,12 @@ export async function pullBuildFiles({ options, auth, buildId }) {
1488
1490
  });
1489
1491
  await writeProjectFiles({ dir, files });
1490
1492
  const stashDirLabel = path.join(PROJECT_METADATA_DIR, "removed");
1491
- if (movedPaths.length > 0) {
1493
+ if (!options.quiet && movedPaths.length > 0) {
1492
1494
  console.log(
1493
1495
  `Moved ${movedPaths.length} local file${movedPaths.length === 1 ? "" : "s"} not in the server project to ${stashDirLabel}/: ${movedPaths.join(", ")}`,
1494
1496
  );
1495
1497
  }
1496
- if (backedUpPaths.length > 0) {
1498
+ if (!options.quiet && backedUpPaths.length > 0) {
1497
1499
  console.log(
1498
1500
  `Backed up ${backedUpPaths.length} locally modified file${backedUpPaths.length === 1 ? "" : "s"} to ${stashDirLabel}/ before overwriting with the server version: ${backedUpPaths.join(", ")}`,
1499
1501
  );
@@ -2403,6 +2405,19 @@ export function parseArgs(args) {
2403
2405
  sponsorWeeklyLimit: raw.weeklyLimit,
2404
2406
  sponsorEffort: raw.effort ? String(raw.effort) : "",
2405
2407
  sponsorServiceTier: raw.serviceTier ? String(raw.serviceTier) : "",
2408
+ sponsorWaitMs: raw.waitMs ? String(raw.waitMs) : "",
2409
+ sponsorAgentOrdinal: raw.ordinal,
2410
+ sponsorOutcome: raw.outcome ? String(raw.outcome) : "",
2411
+ sponsorFailureReason: raw.reason ? String(raw.reason) : "",
2412
+ sponsorResolvedModel: raw.resolvedModel
2413
+ ? String(raw.resolvedModel)
2414
+ : "",
2415
+ sponsorResolvedEffort: raw.resolvedEffort
2416
+ ? String(raw.resolvedEffort)
2417
+ : "",
2418
+ sponsorResolvedServiceTier: raw.resolvedServiceTier
2419
+ ? String(raw.resolvedServiceTier)
2420
+ : "",
2406
2421
  sponsorPollMs: raw.pollMs
2407
2422
  ? Math.min(Math.max(Number(raw.pollMs) || 0, 1_000), 60_000)
2408
2423
  : 3_000,
@@ -2730,8 +2745,14 @@ export function printHelp() {
2730
2745
  lumine agent --provider <codex|claude-code> "<build request>"
2731
2746
  lumine sponsor agreement|apply|status|withdraw
2732
2747
  lumine sponsor capacity [--concurrency <n>] [--helpers <n>] [--daily-limit <n>] [--weekly-limit <n>]
2733
- lumine sponsor duty start --provider <codex|claude-code> [--model <name>] [--effort <level>] [--service-tier <tier>]
2748
+ lumine sponsor duty start [--provider <codex|claude-code>] --model <name> --effort <level> [--service-tier <tier>]
2749
+ lumine sponsor duty watch [--wait-ms <ms>] [--json]
2734
2750
  lumine sponsor duty pause|resume|stop
2751
+ lumine sponsor job status|pulse|begin <job-id>
2752
+ lumine sponsor job relay-applied <job-id> <relay-id...>
2753
+ lumine sponsor job helper-start|helper-complete <job-id> [options]
2754
+ lumine sponsor job complete <job-id> --summary <text>
2755
+ lumine sponsor job fail <job-id> --reason <text>
2735
2756
  lumine sponsor jobs
2736
2757
  lumine app-mcp <published-app-url-or-id> [--no-open]
2737
2758
  lumine new [title]
@@ -2918,7 +2939,7 @@ Options:
2918
2939
  --review-context <f> Private JSON understanding from the reviewed Build
2919
2940
  --severity <level> Run escalation severity: attention or urgent
2920
2941
  --status <state> Private escalation or todo lifecycle filter/state
2921
- --wait-ms <ms> Managed Build runtime observation time (1000-45000)
2942
+ --wait-ms <ms> Managed Build observation or sponsor watch duration
2922
2943
  --browser-path <path> Chrome/Chromium executable for managed Build review
2923
2944
  --effort unassigned Admin subjects: show only unassigned effort
2924
2945
  --unviewed Admin content lists: retain unviewed and unknown items