lastlight 0.18.6 → 0.20.0
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/package.json +3 -3
- package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
- package/plugins/lastlight/README.md +1 -0
- package/plugins/lastlight/skills/lastlight-client/SKILL.md +3 -0
- package/plugins/lastlight/skills/lastlight-debug/SKILL.md +135 -0
- package/plugins/lastlight/skills/lastlight-guide/SKILL.md +7 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lastlight",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Last Light CLI — a lean global client + host-local `server` lifecycle for the Last Light GitHub maintenance agent, plus the Claude Code plugin.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"@clack/prompts": "^1.2.0",
|
|
34
34
|
"chalk": "^5.6.2",
|
|
35
35
|
"cli-table3": "^0.6.5",
|
|
36
|
-
"lastlight-workflow-engine": "0.1.
|
|
37
|
-
"lastlight-shared": "0.1.
|
|
36
|
+
"lastlight-workflow-engine": "0.1.2",
|
|
37
|
+
"lastlight-shared": "0.1.2"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.0.0",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin.json",
|
|
3
3
|
"name": "lastlight",
|
|
4
4
|
"displayName": "Last Light",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.20.0",
|
|
6
6
|
"description": "Install, configure and operate Last Light (GitHub maintenance agent) — its server, CLI client, deployment overlay, and the Last Light Evals harness.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Clifton Cunningham"
|
|
@@ -16,6 +16,7 @@ Light's *internal* sandbox skills under the repo's top-level `skills/` dir
|
|
|
16
16
|
| `lastlight-guide` | **Not sure which of the below you need** — orientation & router across all the Last Light skills. Start here (or `/lastlight-guide`). |
|
|
17
17
|
| `lastlight-server` | Install & configure a Last Light **server** (the agent + docker stack) on a host. |
|
|
18
18
|
| `lastlight-client` | Point the `lastlight` **CLI client** at an existing server and log in. |
|
|
19
|
+
| `lastlight-debug` | **Debug a running instance** over its admin API (no SSH): find failed/stuck workflows, tail sessions, read server/docker logs, crons, approvals, stats. |
|
|
19
20
|
| `lastlight-overlay` | Create a deployment **overlay** instance and fork/customize workflows, prompts, skills, or the agent persona. |
|
|
20
21
|
| `lastlight-evals` | Scaffold and run a **Last Light Evals** workspace (datasets, models, model comparisons). |
|
|
21
22
|
| `lastlight-evals-loop` | **Drive an eval toward a target score** with a disciplined, anti-gaming improvement loop — diagnose on a train split, validate on a blind held-out split, propose one generic fix at a time. |
|
|
@@ -76,6 +76,9 @@ lastlight logs search "<text>" # search errors / transcripts
|
|
|
76
76
|
lastlight approvals list|approve|reject
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
+
For a full debugging runbook (find a failed/stuck run, tail sessions, read
|
|
80
|
+
server/docker logs, crons, stats) use **`lastlight-debug`**.
|
|
81
|
+
|
|
79
82
|
## Done when
|
|
80
83
|
|
|
81
84
|
`lastlight status` reports the server healthy and the token valid. Report the
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lastlight-debug
|
|
3
|
+
description: Debug a running Last Light instance over its admin API with the `lastlight` CLI — no SSH. Use when the user wants to "look at / debug a failed or stuck workflow", "why didn't the bot do X", "check a bad agent run / phase error on <instance>", "tail a session", "search the logs", "read the server/docker logs", "list/trigger a cron", "resolve an approval", or "check stats/cost" against a deployed server. Needs a CLI already connected (see lastlight-client to log in). For standing up the server use lastlight-server; for editing config/workflows use lastlight-overlay.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [lastlight, debug, ops, cli, workflows, sessions, logs]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Debug a Last Light instance via the CLI
|
|
9
|
+
|
|
10
|
+
Read a running instance's state over its admin API with the `lastlight` CLI — no
|
|
11
|
+
SSH, no poking SQLite or jsonl files on the box. Every command takes `--json`
|
|
12
|
+
for machine-parseable output; prefer it when you need to extract fields.
|
|
13
|
+
|
|
14
|
+
This is the operator counterpart to **`lastlight-client`** (which logs the CLI
|
|
15
|
+
in). If `lastlight status` errors with no saved config, run `lastlight-client`
|
|
16
|
+
first.
|
|
17
|
+
|
|
18
|
+
## 1. Connect
|
|
19
|
+
|
|
20
|
+
The CLI talks to whatever instance you logged into (saved in
|
|
21
|
+
`~/.lastlight/config.json`). Confirm you're pointed at the right one and the
|
|
22
|
+
token is valid:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
lastlight status # instance URL, server health, token validity
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If the token is missing/expired, log in (`lastlight login https://<instance>`,
|
|
29
|
+
or `--password` for headless) — that's the **`lastlight-client`** flow. For
|
|
30
|
+
one-off targeting without saving, pass `--url` / `--token` on any command, or
|
|
31
|
+
set `LASTLIGHT_URL` / `LASTLIGHT_TOKEN` (env wins over the saved config).
|
|
32
|
+
|
|
33
|
+
## 2. Find the broken run
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
lastlight workflow list --status failed # recent failures
|
|
37
|
+
lastlight workflow list --status active # running + paused now
|
|
38
|
+
lastlight workflow list --workflow pr-review --limit 50
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Copy the run `ID` from the table. The `PHASE` column names the phase the run is
|
|
42
|
+
at (or failed on).
|
|
43
|
+
|
|
44
|
+
## 3. Inspect the run's phases
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
lastlight workflow log <run-id> # run header + per-phase table (✓/✗/…, duration, session id, error)
|
|
48
|
+
lastlight workflow log <run-id> --follow # then tail the current phase live
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The phase table shows which phase failed, its error snippet, and the `SESSION`
|
|
52
|
+
id you need for the transcript. A phase stuck at `…` never finished (still
|
|
53
|
+
`started`); a `✗` finished failed.
|
|
54
|
+
|
|
55
|
+
If it failed on a transient/infra hiccup, re-run from the failed phase:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
lastlight workflow retry <run-id> # resumes from the phase that failed (same workspace/context)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 4. Read / tail the agent transcript
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
lastlight session list # recent sandbox sessions (TYPE, MODEL, LIVE)
|
|
65
|
+
lastlight session log <session-id> # full transcript
|
|
66
|
+
lastlight session log <session-id> --follow # live tail (SSE) of an in-flight phase
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 5. Search across runs
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
lastlight logs search "ECONNREFUSED" # errors ledger (default)
|
|
73
|
+
lastlight logs search "rate limit" --scope all # errors + transcript content
|
|
74
|
+
lastlight logs search "could not clone" --scope messages --limit 20
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`--scope errors` (default) matches the executions ledger (error/skill/repo);
|
|
78
|
+
`messages` greps recent session transcripts; `all` does both.
|
|
79
|
+
|
|
80
|
+
## 6. Raw server / docker logs
|
|
81
|
+
|
|
82
|
+
When the workflow + session views aren't enough — a crash before any session was
|
|
83
|
+
written, a sidecar misbehaving, harness boot errors — read the actual container
|
|
84
|
+
logs (`docker logs`) over the API:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
lastlight server list # the lastlight-* containers + status
|
|
88
|
+
lastlight server logs # the agent harness (default), last 200 lines
|
|
89
|
+
lastlight server logs --tail 500 --since 10m
|
|
90
|
+
lastlight server logs --follow # live tail (Ctrl-C to stop)
|
|
91
|
+
lastlight server logs coredns-strict # a specific sidecar by service or container name
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 7. Crons
|
|
95
|
+
|
|
96
|
+
Scheduled workflows (health scans, PR-review fanout, dependabot merge, …):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
lastlight cron list # schedule, next/last run, status
|
|
100
|
+
lastlight cron trigger <name> # run one now (fire-and-forget; handy for repro)
|
|
101
|
+
lastlight cron disable <name> # pause a noisy/broken job (idempotent)
|
|
102
|
+
lastlight cron enable <name> # re-enable it
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 8. Approvals & stats
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
lastlight approvals list # paused gates waiting on a human
|
|
109
|
+
lastlight approvals approve <id> --reason "looks good"
|
|
110
|
+
lastlight approvals reject <id> --reason "wrong approach"
|
|
111
|
+
|
|
112
|
+
lastlight stats # totals + per-skill success/fail
|
|
113
|
+
lastlight stats --daily 14 # last 14 days of cost/tokens
|
|
114
|
+
lastlight stats --hourly 24 # last 24 hours (spot a spike / stuck loop)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Tips
|
|
118
|
+
|
|
119
|
+
- Add `--json` to any command to pipe into `jq` (e.g.
|
|
120
|
+
`lastlight workflow list --status failed --json | jq -r '.workflowRuns[].id'`).
|
|
121
|
+
- Per-command help is authoritative: `lastlight <cmd> help` (e.g.
|
|
122
|
+
`lastlight cron help`); the bare `lastlight --help` is a compact index.
|
|
123
|
+
- Triage flow: `workflow list --status failed` → `workflow log <id>` → grab the
|
|
124
|
+
failed phase's session → `session log <session-id>` → if it's a recurring
|
|
125
|
+
symptom, `logs search "<error text>"` to see how often it happens.
|
|
126
|
+
- These are read-only except `approvals approve/reject`, `cron
|
|
127
|
+
enable/disable/trigger`, `workflow retry`, and the trigger commands
|
|
128
|
+
(`build`/`triage`/`review`/…) — plain debugging never mutates the box.
|
|
129
|
+
|
|
130
|
+
## Done when
|
|
131
|
+
|
|
132
|
+
You've located the failing run/phase and its cause — named the phase, quoted the
|
|
133
|
+
error, and pointed at the session transcript (or server log) that shows it — and,
|
|
134
|
+
if asked, kicked off a `workflow retry` or resolved the approval. Report findings
|
|
135
|
+
concisely; don't dump whole transcripts.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: lastlight-guide
|
|
3
|
-
description: Orientation & router for the Last Light skills. Use ONLY when the user has NOT named a concrete Last Light task — i.e. they're unsure which skill/flow they need, ask "what can Last Light do / where do I start", say "help me with Last Light" with no specific goal, or want a guided tour across server / client / overlay / evals. Do NOT use when the ask already names a task — "set up/deploy a server" → lastlight-server, "connect/log in my CLI" → lastlight-client, "customize a workflow/prompt/persona/config" → lastlight-overlay, "run evals / compare models / author a case / build a PR-review dataset" → lastlight-evals, "iteratively improve an eval toward a target score" → lastlight-evals-loop: invoke that skill directly. This skill only routes and, when the goal is ambiguous, asks. Also invocable as /lastlight-guide.
|
|
3
|
+
description: Orientation & router for the Last Light skills. Use ONLY when the user has NOT named a concrete Last Light task — i.e. they're unsure which skill/flow they need, ask "what can Last Light do / where do I start", say "help me with Last Light" with no specific goal, or want a guided tour across server / client / overlay / debug / evals. Do NOT use when the ask already names a task — "set up/deploy a server" → lastlight-server, "connect/log in my CLI" → lastlight-client, "customize a workflow/prompt/persona/config" → lastlight-overlay, "debug a failed/stuck workflow or run on an instance" → lastlight-debug, "run evals / compare models / author a case / build a PR-review dataset" → lastlight-evals, "iteratively improve an eval toward a target score" → lastlight-evals-loop: invoke that skill directly. This skill only routes and, when the goal is ambiguous, asks. Also invocable as /lastlight-guide.
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
tags: [lastlight, guide, router, orientation, help]
|
|
6
6
|
---
|
|
@@ -43,6 +43,11 @@ first time; each is also usable on its own later.
|
|
|
43
43
|
(`agent-context`), and tune `config.yaml` — overriding only what you name,
|
|
44
44
|
layered over the packaged defaults. Reach for it whenever you want to change
|
|
45
45
|
*what the agent does or how it behaves* on an existing deployment.
|
|
46
|
+
4. **`lastlight-debug`** — inspect a **running** instance over its admin API
|
|
47
|
+
(no SSH): find a failed/stuck workflow, read the phase table, tail a session
|
|
48
|
+
transcript, search logs, read server/docker logs, trigger/pause crons,
|
|
49
|
+
resolve approvals, check stats. Reach for it when something already deployed
|
|
50
|
+
*misbehaved* and you need to see why.
|
|
46
51
|
|
|
47
52
|
## Flow 2 — measure quality with Last Light Evals
|
|
48
53
|
|
|
@@ -77,6 +82,7 @@ time (stopping for sign-off before it touches a gold answer).
|
|
|
77
82
|
|---|---|
|
|
78
83
|
| Stand up / install / deploy a server for the first time | **`lastlight-server`** |
|
|
79
84
|
| Connect my CLI to a server / log in / run commands against it | **`lastlight-client`** |
|
|
85
|
+
| Debug a failed/stuck workflow, tail a session, read logs, check crons/stats | **`lastlight-debug`** |
|
|
80
86
|
| Customize a workflow, prompt, skill, or the agent's persona; tune config | **`lastlight-overlay`** |
|
|
81
87
|
| Run evals, compare models, browse past runs | **`lastlight-evals`** |
|
|
82
88
|
| Author an eval case from a GitHub PR or issue | **`lastlight-evals`** (§6) |
|