@stage5/lumine 0.2.17 → 0.2.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
@@ -9,8 +9,11 @@ npx @stage5/lumine@latest new "Daily Reflection App"
9
9
  npx @stage5/lumine@latest new --title "Daily Reflection App" --description "Private journal with streaks"
10
10
  npx @stage5/lumine@latest rename "My New Build Title"
11
11
  npx @stage5/lumine@latest rename "New Title" --target 123
12
+ npx @stage5/lumine@latest describe "A welcoming place to build together"
13
+ npx @stage5/lumine@latest describe --no-description --target 123
12
14
  npx @stage5/lumine@latest projects
13
15
  npx @stage5/lumine@latest branches 884
16
+ npx @stage5/lumine@latest suggestions 884
14
17
  npx @stage5/lumine@latest explore --sort forks
15
18
  npx @stage5/lumine@latest reference https://www.twin-kle.com/app/123
16
19
  npx @stage5/lumine@latest fork https://www.twin-kle.com/app/123
@@ -31,6 +34,12 @@ local workspace, but it does not auto-start a Lumine greeting or prompt run, so
31
34
  creating a project from the CLI does not spend AI battery. Add project files
32
35
  locally, including `/index.html`, then run `lumine save`.
33
36
 
37
+ Use `lumine rename` to change an existing Build title and `lumine describe` to
38
+ change its description through the same canonical metadata route as the
39
+ website. Both commands target the current workspace or selected Build; pass
40
+ `--target <build-url-or-id>` to update another Build you own. Run
41
+ `lumine describe --no-description` to clear a description explicitly.
42
+
34
43
  For team projects, Lumine mirrors the website workspace flow: choosing or
35
44
  pulling the owner's main project creates or reuses your contribution branch and
36
45
  checks out that branch locally. Saves go to your branch, so the project owner
@@ -40,6 +49,17 @@ Use `lumine branches <build-url-or-id>` to list the contribution branches you
40
49
  can review, including each contributor, branch number, status, and URL. Then use
41
50
  `lumine diff <branch-url>` to inspect one branch.
42
51
 
52
+ Branch contributors can nudge the project owner from their pulled branch with
53
+ `lumine suggest branch [message]` or `lumine suggest thumbnail`. The thumbnail
54
+ command offers the thumbnail currently saved on that branch. Project owners can
55
+ run `lumine suggestions <build-url-or-id>` to see their open suggestion inbox.
56
+ The inbox prints canonical follow-up commands for merging or replacing Main and
57
+ for applying the exact frozen thumbnail shown in a suggestion. The same actions
58
+ are also available directly as `lumine suggestions merge <id>`,
59
+ `lumine suggestions replace-main <id>`, and
60
+ `lumine suggestions adopt-thumbnail <id>`. Large inboxes are cursor-paginated;
61
+ the CLI prints the exact `--cursor` command for the next page.
62
+
43
63
  Use `lumine explore` to list public open-source Build apps that can be used as
44
64
  examples or starting points. It supports `--search` and `--sort forks`,
45
65
  `--sort popular`, or `--sort recent`. Use `lumine reference <build-url-or-id>`
@@ -133,6 +153,64 @@ claude "Read CLAUDE.md, then make the requested change."
133
153
  The login command uses a browser approval code and stores a scoped token and the
134
154
  selected project at `~/.twinkle/lumine-cli-auth.json`.
135
155
 
156
+ ## Privileged website administration
157
+
158
+ `lumine admin` reuses Mikey's saved CLI login while keeping the visible public
159
+ actor separate. The server reloads Mikey's current authority from the writer,
160
+ resolves Zero/Ciel by immutable IDs, and binds every operation to an expiring,
161
+ purpose-scoped daily run. Flags, usernames, token claims, and local state never
162
+ grant delegation. Delegated work does not create a bot login or presence
163
+ session, but its public content changes use Twinkle's normal real-time socket
164
+ events.
165
+
166
+ ```bash
167
+ lumine admin identity list --json
168
+ lumine admin daily-run start --identity auto --comment-mode off --json
169
+ lumine admin recommendations list --cursor '<cursor>' --json
170
+ lumine admin subjects candidates --after 2026-08-01T00:00:00Z --json
171
+ lumine admin subjects candidates --effort unassigned --json
172
+ lumine admin subject get 123 --include-comments --json
173
+ lumine admin post get https://www.twin-kle.com/ai-stories/88 --json
174
+ lumine admin post comments dailyReflection:99 --json
175
+ lumine admin subject comments 123 --cursor '<cursor>' --json
176
+ lumine admin subject reveal 123 --json
177
+ lumine admin subject effort set 123 --level 3 --json
178
+ lumine admin subject creator set-made-by-poster 123 --json
179
+ lumine admin featured list --json
180
+ lumine admin subject feature 123 --json
181
+ lumine admin subject unfeature 123 --json
182
+ lumine admin featured reorder --subject-ids 30,20,10 --json
183
+ lumine admin post recommend comment:456 --anyone-can-reward --reward-twinkles 3 --json
184
+ lumine admin post reward comment:456 --twinkles 3 --json
185
+ lumine admin daily-run complete --json
186
+ ```
187
+
188
+ Numeric recommendation targets default to subjects. Use `comment:<id>`,
189
+ `aiStory:<id>`, `dailyReflection:<id>`, a canonical URL, or the matching
190
+ `--type` for another post kind. Commenting is always `off` for a new run unless
191
+ `--comment-mode draft` or `--comment-mode post` is explicitly supplied. Drafts
192
+ and posts use the selected bot's server-owned canonical persona; a later human
193
+ reply is handled by Twinkle's existing autonomous Zero/Ciel responder without
194
+ Lumine remaining active.
195
+
196
+ Every operation is noninteractive when its required arguments are present.
197
+ `--json` prints exactly one uncolored JSON value and returns a nonzero status
198
+ for forbidden, not-found, validation, and partial-failure responses. Pass a
199
+ stable `--idempotency-key` when retrying one mutation across processes; the
200
+ server also enforces canonical no-duplicate invariants. Failed mutation JSON
201
+ includes `error.details.retryIdempotencyKey` so a partial attempt can be
202
+ resumed with the exact generated key.
203
+
204
+ Subject and recommendation-queue listings use opaque, stable snapshot cursors.
205
+ Pass the returned `data.pagination.nextCursor` back through `--cursor` until
206
+ `data.pagination.exhausted` is true. Subject `--after` is inclusive and cursors
207
+ are bound to the original date and effort filters.
208
+
209
+ The complete run lifecycle, command contracts, nullable fields, Karma approval
210
+ behavior, pagination semantics, secret-subject behavior, presence isolation,
211
+ and retry rules are documented in
212
+ [`sdk/LUMINE_ADMIN.md`](sdk/LUMINE_ADMIN.md).
213
+
136
214
  `lumine login` opens the Twinkle approval page automatically. If you are running
137
215
  in SSH, CI, or an agent environment, use:
138
216
 
package/bin/lumine.js CHANGED
@@ -1,7 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { main } from "../lib/commands.js";
3
+ import { formatAdminJsonError, isAdminJsonInvocation } from "../lib/admin.js";
3
4
 
4
5
  main().catch((error) => {
5
- console.error(`lumine: ${error?.message || error}`);
6
+ if (isAdminJsonInvocation(process.argv.slice(2))) {
7
+ console.log(JSON.stringify(formatAdminJsonError(error)));
8
+ } else {
9
+ console.error(`lumine: ${error?.message || error}`);
10
+ }
6
11
  process.exitCode = 1;
7
12
  });