@ghostpaw/questlog 0.9.0 → 0.9.2
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 +66 -18
- package/SKILL.md +136 -29
- package/dist/{questlog_skill_spec-JLZH3JL2.js → chunk-6KTQK3ZE.js} +1 -52
- package/dist/chunk-DKH623HU.js +17 -0
- package/dist/chunk-QYSIJ2YN.js +47 -0
- package/dist/{chunk-3Y5F3SMB.js → chunk-UTUQPSGO.js} +179 -77
- package/dist/cli.js +2 -2
- package/dist/{cli_main-ED5BJPSR.js → cli_main-XNZP4TY2.js} +68 -14
- package/dist/index.cjs +147 -2
- package/dist/index.js +147 -2
- package/dist/mcp-server.js +149 -10
- package/dist/mcp.cjs +158 -46
- package/dist/mcp.js +158 -46
- package/dist/questlog_skill_spec-EM6DGGVN.js +74 -0
- package/dist/{serve_questlog_mcp-J4ZHNEOT.js → serve_questlog_mcp-KFUYJB2P.js} +12 -3
- package/dist/{skill_markdown-7HCMSJYR.js → skill_markdown-HXYQ3K6U.js} +34 -6
- package/package.json +6 -3
- package/skills/questlog/SKILL.md +136 -29
- package/dist/chunk-RUSE7ZFF.js +0 -58
package/skills/questlog/SKILL.md
CHANGED
|
@@ -1,15 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: questlog
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use the release binary ghostpaw-questlog to manage local tasks, calendar commitments, and recurring work. Use when planning, executing, reviewing, or organizing work."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "
|
|
5
|
+
compatibility: "Release binary ghostpaw-questlog (no runtime needed); MCP stdio via ghostpaw-questlog mcp."
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# questlog
|
|
9
9
|
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
Linux/macOS:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
curl -fsSL https://raw.githubusercontent.com/GhostPawJS/questlog/main/install.sh | sh
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Installs `~/.local/bin/ghostpaw-questlog` after checking SHA256SUMS.
|
|
19
|
+
|
|
20
|
+
Windows x64 (PowerShell):
|
|
21
|
+
|
|
22
|
+
```powershell
|
|
23
|
+
irm https://raw.githubusercontent.com/GhostPawJS/questlog/main/install.ps1 | iex
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Run tools as `ghostpaw-questlog ...`; use `~/.local/bin/ghostpaw-questlog` if it is not on PATH.
|
|
27
|
+
|
|
10
28
|
`questlog` and `ghostpaw-questlog` are the same binary.
|
|
11
29
|
|
|
12
|
-
- `questlog
|
|
30
|
+
- `questlog search <words>` before `add` to avoid duplicates.
|
|
31
|
+
- `ghostpaw-questlog add "..." --tag a,b --due tomorrow`
|
|
13
32
|
- `questlog list [--view <view>]`: questlines, quests.active, quests.available, quests.blocked, quests.deferred, quests.due_soon, quests.in_progress, quests.missed_scheduled, quests.open, quests.overdue, quests.resolved, quests.scheduled_for_day, quests.scheduled_now, repeatables.due_anchors, rumors.
|
|
14
33
|
- `questlog done <id> --outcome "..."`
|
|
15
34
|
- `questlog search <words>`
|
|
@@ -27,7 +46,7 @@ Questlog manages local tasks, calendar commitments, and recurring work. Search b
|
|
|
27
46
|
|
|
28
47
|
MCP: connect to ghostpaw-questlog, then call a tool by name with its JSON arguments.
|
|
29
48
|
|
|
30
|
-
CLI: `ghostpaw-questlog call <tool> '<JSON object>'` or `ghostpaw-questlog <tool> --parameter value
|
|
49
|
+
CLI: `ghostpaw-questlog call <tool> '<JSON object>'` or `ghostpaw-questlog <tool> --parameter value`.
|
|
31
50
|
|
|
32
51
|
Inspect schemas with `ghostpaw-questlog describe <tool>`. Use `--db <path>` to select a database.
|
|
33
52
|
|
|
@@ -48,6 +67,10 @@ Read-only.
|
|
|
48
67
|
| kinds | array | no | Optional entity kinds to search. |
|
|
49
68
|
| mode | string | no | browse, identify_one. Whether to browse results normally or ask for clarification when several matches are found. |
|
|
50
69
|
|
|
70
|
+
```sh
|
|
71
|
+
ghostpaw-questlog call search_questlog '{"query":"release"}'
|
|
72
|
+
```
|
|
73
|
+
|
|
51
74
|
### review_questlog
|
|
52
75
|
|
|
53
76
|
Review one operational questlog surface such as available quests, open rumors, blocked work, or due repeatable anchors.
|
|
@@ -62,8 +85,16 @@ Read-only.
|
|
|
62
85
|
| --- | --- | --- | --- |
|
|
63
86
|
| view | string | yes | questlines, quests.active, quests.available, quests.blocked, quests.deferred, quests.due_soon, quests.in_progress, quests.missed_scheduled, quests.open, quests.overdue, quests.resolved, quests.scheduled_for_day, quests.scheduled_now, repeatables.due_anchors, rumors. Which operational review surface to return. |
|
|
64
87
|
| filters | object | no | Optional filters for supported review surfaces. |
|
|
88
|
+
| filters.questlineId | integer | no | Optional questline id used by quest views. |
|
|
89
|
+
| filters.tagNames | array | no | Optional tag names used by quest views. |
|
|
90
|
+
| filters.includeDeleted | boolean | no | Whether deleted quests should be included in quest views. |
|
|
91
|
+
| filters.dayAt | integer | no | UTC timestamp within the day to review for scheduled-for-day. |
|
|
65
92
|
| now | integer | no | Optional evaluation timestamp for time-sensitive views. |
|
|
66
93
|
|
|
94
|
+
```sh
|
|
95
|
+
ghostpaw-questlog call review_questlog '{"view":"questlines"}'
|
|
96
|
+
```
|
|
97
|
+
|
|
67
98
|
### inspect_questlog_item
|
|
68
99
|
|
|
69
100
|
Inspect one specific questlog item in depth and return its richer structured detail and important related refs.
|
|
@@ -77,9 +108,15 @@ Read-only.
|
|
|
77
108
|
| Parameter | Type | Required | Values / description |
|
|
78
109
|
| --- | --- | --- | --- |
|
|
79
110
|
| target | object | yes | The specific item to inspect. |
|
|
111
|
+
| target.kind | string | yes | quest, questline, repeatable_quest, rumor. The kind of item to inspect. |
|
|
112
|
+
| target.id | integer | yes | The numeric id of the item to inspect. |
|
|
80
113
|
| detailLevel | string | no | compact, full. How much detail to return. |
|
|
81
114
|
| now | integer | no | Optional evaluation timestamp for time-sensitive detail. |
|
|
82
115
|
|
|
116
|
+
```sh
|
|
117
|
+
ghostpaw-questlog call inspect_questlog_item '{"target":{"kind":"quest","id":1}}'
|
|
118
|
+
```
|
|
119
|
+
|
|
83
120
|
### capture_rumor
|
|
84
121
|
|
|
85
122
|
Capture uncertain incoming work as a rumor so it can be triaged later without prematurely turning it into committed execution.
|
|
@@ -96,6 +133,10 @@ Writes: writes_state.
|
|
|
96
133
|
| details | string | no | Optional supporting context that explains why the rumor might matter. |
|
|
97
134
|
| now | integer | no | Optional creation timestamp for the rumor. |
|
|
98
135
|
|
|
136
|
+
```sh
|
|
137
|
+
ghostpaw-questlog call capture_rumor '{"title":"Review release notes"}'
|
|
138
|
+
```
|
|
139
|
+
|
|
99
140
|
### shape_work
|
|
100
141
|
|
|
101
142
|
Create a quest (with timing, tags, and objective in one call), create a questline, settle a rumor into concrete work, or manage quest-questline membership. Use create_quest for clear commitments — include tags and timing directly to avoid follow-up calls.
|
|
@@ -112,7 +153,11 @@ Writes: writes_state.
|
|
|
112
153
|
| questId | integer | no | Quest to attach or detach. |
|
|
113
154
|
| questlineId | integer | no | Questline that should receive the quest. |
|
|
114
155
|
| quest | object | no | |
|
|
156
|
+
| quest.title | string | yes | Title for the new quest. |
|
|
157
|
+
| quest.objective | string | yes | Objective for the new quest. |
|
|
115
158
|
| questline | object | no | |
|
|
159
|
+
| questline.title | string | yes | Questline title. |
|
|
160
|
+
| questline.description | string | no | Optional questline description. |
|
|
116
161
|
| rumorId | integer | no | Rumor to settle, dismiss, or reopen. |
|
|
117
162
|
| dismissedAt | integer | no | Optional dismissal timestamp. |
|
|
118
163
|
| settledAt | integer | no | Optional settlement timestamp. |
|
|
@@ -121,6 +166,12 @@ Writes: writes_state.
|
|
|
121
166
|
| title | string | no | New title for the update_rumor action. |
|
|
122
167
|
| details | string | no | New or enriched context text for the update_rumor action. |
|
|
123
168
|
|
|
169
|
+
```sh
|
|
170
|
+
ghostpaw-questlog call shape_work '{"action":"attach_quest_to_questline","questId":1,"questlineId":1}'
|
|
171
|
+
ghostpaw-questlog call shape_work '{"action":"create_quest","quest":{"title":"Review release notes","objective":"Check changes against the release"}}'
|
|
172
|
+
ghostpaw-questlog call shape_work '{"action":"create_questline","questline":{"title":"Review release notes"}}'
|
|
173
|
+
```
|
|
174
|
+
|
|
124
175
|
### plan_quest
|
|
125
176
|
|
|
126
177
|
Refine a quest by revising its objective before actual start or by changing its temporal planning fields.
|
|
@@ -144,6 +195,11 @@ Writes: writes_state.
|
|
|
144
195
|
| estimateSeconds | integer | no | Optional active-effort estimate in seconds. |
|
|
145
196
|
| now | integer | no | Optional update timestamp. |
|
|
146
197
|
|
|
198
|
+
```sh
|
|
199
|
+
ghostpaw-questlog call plan_quest '{"action":"revise_objective","questId":1,"objective":"Check changes against the release"}'
|
|
200
|
+
ghostpaw-questlog call plan_quest '{"action":"set_time","questId":1}'
|
|
201
|
+
```
|
|
202
|
+
|
|
147
203
|
### run_quest
|
|
148
204
|
|
|
149
205
|
Run quest lifecycle actions such as starting, logging effort, finishing, abandoning, or abandoning and spawning follow-up quests atomically.
|
|
@@ -166,6 +222,12 @@ Writes: writes_state.
|
|
|
166
222
|
| resolvedAt | integer | no | Optional resolved timestamp for finish or abandon actions. |
|
|
167
223
|
| followups | array | no | Follow-up quests to create atomically. Required for abandon_and_spawn_followups. |
|
|
168
224
|
|
|
225
|
+
```sh
|
|
226
|
+
ghostpaw-questlog call run_quest '{"action":"start","questId":1}'
|
|
227
|
+
ghostpaw-questlog call run_quest '{"action":"log_effort","questId":1,"effortSeconds":1}'
|
|
228
|
+
ghostpaw-questlog call run_quest '{"action":"finish","questId":1,"outcome":"release"}'
|
|
229
|
+
```
|
|
230
|
+
|
|
169
231
|
### organize_work
|
|
170
232
|
|
|
171
233
|
Organize grouping and dependency structure by updating questlines or changing hard unlock prerequisites between concrete quests.
|
|
@@ -190,6 +252,12 @@ Writes: writes_state.
|
|
|
190
252
|
| fromQuestIds | array | no | Full prerequisite quest id set. |
|
|
191
253
|
| now | integer | no | Optional timestamp. |
|
|
192
254
|
|
|
255
|
+
```sh
|
|
256
|
+
ghostpaw-questlog call organize_work '{"action":"add_unlock","fromQuestId":1,"toQuestId":2}'
|
|
257
|
+
ghostpaw-questlog call organize_work '{"action":"archive_questline","questlineId":1}'
|
|
258
|
+
ghostpaw-questlog call organize_work '{"action":"remove_unlock","fromQuestId":1,"toQuestId":2}'
|
|
259
|
+
```
|
|
260
|
+
|
|
193
261
|
### manage_repeatable
|
|
194
262
|
|
|
195
263
|
Manage recurring work definitions by creating, updating, previewing, spawning, or archiving repeatable quests.
|
|
@@ -205,6 +273,10 @@ Writes: writes_state.
|
|
|
205
273
|
| action | string | yes | archive, create, preview_due, spawn_due, update. Action to perform. |
|
|
206
274
|
| repeatableQuestId | integer | no | Repeatable quest to archive or update. |
|
|
207
275
|
| repeatableQuest | object | no | |
|
|
276
|
+
| repeatableQuest.title | string | yes | Title for the new repeatable quest. |
|
|
277
|
+
| repeatableQuest.objective | string | yes | Objective for the new repeatable quest. |
|
|
278
|
+
| repeatableQuest.rrule | string | yes | RRULE describing recurrence. |
|
|
279
|
+
| repeatableQuest.anchorAt | integer | yes | Recurrence anchor timestamp. |
|
|
208
280
|
| title | string | no | Optional new title for the update action. |
|
|
209
281
|
| objective | string | no | Optional new objective for the update action. |
|
|
210
282
|
| questlineId | integer | no | Optional new questline id. |
|
|
@@ -219,6 +291,12 @@ Writes: writes_state.
|
|
|
219
291
|
| archivedAt | integer | no | Optional archive timestamp. |
|
|
220
292
|
| now | integer | no | Evaluation or update timestamp. |
|
|
221
293
|
|
|
294
|
+
```sh
|
|
295
|
+
ghostpaw-questlog call manage_repeatable '{"action":"archive","repeatableQuestId":1}'
|
|
296
|
+
ghostpaw-questlog call manage_repeatable '{"action":"create","repeatableQuest":{"title":"Review release notes","objective":"Check changes against the release","rrule":"FREQ=WEEKLY","anchorAt":1800000000000}}'
|
|
297
|
+
ghostpaw-questlog call manage_repeatable '{"action":"preview_due"}'
|
|
298
|
+
```
|
|
299
|
+
|
|
222
300
|
### tag_work
|
|
223
301
|
|
|
224
302
|
Classify work by adding, removing, or replacing tags on quests and by replacing the future tag template set on repeatable quests.
|
|
@@ -233,9 +311,17 @@ Writes: writes_state.
|
|
|
233
311
|
| --- | --- | --- | --- |
|
|
234
312
|
| action | string | yes | add, remove, replace. Action to perform. |
|
|
235
313
|
| target | object | yes | |
|
|
314
|
+
| target.id | integer | yes | Target entity id. |
|
|
315
|
+
| target.kind | string | yes | quest, repeatable_quest. Target kind. |
|
|
236
316
|
| tagNames | array | yes | Tag names to add, remove, or replace. |
|
|
237
317
|
| now | integer | no | Optional timestamp for the tag mutation. |
|
|
238
318
|
|
|
319
|
+
```sh
|
|
320
|
+
ghostpaw-questlog call tag_work '{"action":"add","target":{"id":1,"kind":"quest"},"tagNames":["release"]}'
|
|
321
|
+
ghostpaw-questlog call tag_work '{"action":"remove","target":{"id":1,"kind":"quest"},"tagNames":["release"]}'
|
|
322
|
+
ghostpaw-questlog call tag_work '{"action":"replace","target":{"id":1,"kind":"quest"},"tagNames":["release"]}'
|
|
323
|
+
```
|
|
324
|
+
|
|
239
325
|
### reward_work
|
|
240
326
|
|
|
241
327
|
Manage rewards by adding, updating, removing, or claiming quest rewards, or by replacing future reward templates on repeatable quests.
|
|
@@ -250,11 +336,22 @@ Writes: writes_state.
|
|
|
250
336
|
| --- | --- | --- | --- |
|
|
251
337
|
| action | string | yes | add, claim, remove, replace_repeatable_template, update. Action to perform. |
|
|
252
338
|
| target | object | yes | |
|
|
339
|
+
| target.id | integer | yes | Target entity id. |
|
|
340
|
+
| target.kind | string | yes | quest, reward, repeatable_quest. Target kind. |
|
|
253
341
|
| reward | object | no | |
|
|
342
|
+
| reward.kind | string | yes | Reward kind. |
|
|
343
|
+
| reward.name | string | yes | Reward name. |
|
|
344
|
+
| reward.now | integer | no | Optional update timestamp for the update action. |
|
|
254
345
|
| rewards | array | no | Full future reward template set. Required for replace_repeatable_template. |
|
|
255
346
|
| claimedAt | integer | no | Optional claim timestamp. |
|
|
256
347
|
| now | integer | no | Optional timestamp for removal or template replacement. |
|
|
257
348
|
|
|
349
|
+
```sh
|
|
350
|
+
ghostpaw-questlog call reward_work '{"action":"add","target":{"id":1,"kind":"quest"},"reward":{"kind":"release","name":"release"}}'
|
|
351
|
+
ghostpaw-questlog call reward_work '{"action":"claim","target":{"id":1,"kind":"quest"}}'
|
|
352
|
+
ghostpaw-questlog call reward_work '{"action":"remove","target":{"id":1,"kind":"quest"}}'
|
|
353
|
+
```
|
|
354
|
+
|
|
258
355
|
### retire_work
|
|
259
356
|
|
|
260
357
|
Hide an item from normal active operation without rewriting history by soft-deleting a rumor, quest, questline, or repeatable quest.
|
|
@@ -269,35 +366,41 @@ Writes: writes_state.
|
|
|
269
366
|
| --- | --- | --- | --- |
|
|
270
367
|
| action | string | yes | hide. The retirement action to perform. |
|
|
271
368
|
| target | object | yes | The target to hide. |
|
|
369
|
+
| target.kind | string | yes | quest, questline, repeatable_quest, rumor. The kind of item to hide. |
|
|
370
|
+
| target.id | integer | yes | The numeric id of the item to hide. |
|
|
272
371
|
| deletedAt | integer | no | Optional timestamp to record when the item became hidden. |
|
|
273
372
|
|
|
373
|
+
```sh
|
|
374
|
+
ghostpaw-questlog call retire_work '{"action":"hide","target":{"kind":"quest","id":1}}'
|
|
375
|
+
```
|
|
376
|
+
|
|
274
377
|
### Workflow guides
|
|
275
378
|
|
|
276
|
-
- [archive-delete-and-prune](references/archive-delete-and-prune.md): Choose the right retirement action for each kind of work so history stays honest and hiding does not get confused with archival or terminal execution truth.
|
|
277
|
-
- [choose-work-shape](references/choose-work-shape.md): Choose the right structure for new work by separating uncertainty, one-shot execution, multi-step arcs, and recurring patterns.
|
|
278
|
-
- [clarify-ambiguous-requests](references/clarify-ambiguous-requests.md): Treat ambiguity as a real state, capture uncertainty honestly, and only commit work structure once the next executable shape is clear.
|
|
279
|
-
- [close-work-and-claim-outcomes](references/close-work-and-claim-outcomes.md): Close work with the correct terminal lifecycle action, then handle any concrete reward claim as a separate explicit step.
|
|
280
|
-
- [create-concrete-quest](references/create-concrete-quest.md): Create real, bounded executable quests only when the objective is concrete enough to execute without interpretive guesswork.
|
|
281
|
-
- [detect-slips-and-staleness](references/detect-slips-and-staleness.md): Detect work that is slipping or going stale by reading overdue, deferred, in-progress, and related operational views before choosing one recovery move.
|
|
282
|
-
- [escalate-and-unblock](references/escalate-and-unblock.md): Diagnose blockers honestly, then remove or realign hard gates when the model is wrong instead of treating every delay as generic escalation theater.
|
|
283
|
-
- [frame-initiative-questline](references/frame-initiative-questline.md): Use questlines for shared initiative context, then attach concrete quests and maintain the structure without confusing one quest with one arc.
|
|
284
|
-
- [handle-exceptions-and-weird-cases](references/handle-exceptions-and-weird-cases.md): Handle weird cases by diagnosing the actual tool outcome, routing into clarification or recovery when needed, and refusing to fake a clean normal-state story.
|
|
285
|
-
- [intake-triage](references/intake-triage.md): Triage new asks, ideas, and vague incoming work into the right next step without prematurely committing execution structure.
|
|
286
|
-
- [maintain-clear-ownership](references/maintain-clear-ownership.md): Keep ownership explicit through quest content and classification because Questlog does not provide a separate assignee field or ownership tool.
|
|
287
|
-
- [manage-approvals-and-promises](references/manage-approvals-and-promises.md): Treat approvals and commitments as modeled work with timing and dependencies instead of burying them as vague narrative promises.
|
|
288
|
-
- [plan-successor-work](references/plan-successor-work.md): Create explicit successor work after closure by spawning follow-ups or shaping new work, while keeping uncertain next steps in intake instead of faking certainty.
|
|
289
|
-
- [plan-time-correctly](references/plan-time-correctly.md): Use quest planning fields honestly so availability, due pressure, and schedule intent stay meaningful instead of getting collapsed into one generic date.
|
|
290
|
-
- [prioritize-across-streams](references/prioritize-across-streams.md): Prioritize across competing work streams by reading real candidate sets, distinguishing available from blocked work, and then reflecting the choice in planning.
|
|
291
|
-
- [protect-capacity-and-focus](references/protect-capacity-and-focus.md): Protect capacity and focus by reading the real in-progress and scheduled-now load, then using planning to rebalance instead of silently overcommitting.
|
|
292
|
-
- [recover-from-modeling-mistakes](references/recover-from-modeling-mistakes.md): Recover from modeling mistakes by diagnosing the exact current state first, then applying the smallest honest corrective tool instead of rewriting history blindly.
|
|
293
|
-
- [report-status-and-manage-expectations](references/report-status-and-manage-expectations.md): Build status reporting from the real questlog state, separating available, blocked, in-progress, slipping, and resolved work without relying on memory.
|
|
294
|
-
- [revise-or-reshape-commitment](references/revise-or-reshape-commitment.md): Revise a quest objective before execution starts, but reshape commitments honestly with lifecycle tools once real execution history exists.
|
|
295
|
-
- [run-operational-review](references/run-operational-review.md): Drive daily or weekly operational review from structured list views, then move from diagnosis into actual planning or execution changes.
|
|
296
|
-
- [run-recurring-rhythms](references/run-recurring-rhythms.md): Model recurring work as repeatable definitions that spawn fresh concrete quests over time instead of living forever as one immortal task.
|
|
297
|
-
- [search-and-retrieve-context](references/search-and-retrieve-context.md): Find relevant questlog context quickly, then switch from discovery to exact inspection without confusing free-text search with structured review surfaces.
|
|
298
|
-
- [sequence-with-unlocks](references/sequence-with-unlocks.md): Model hard sequencing with unlocks between concrete quests so blocked and available work stay truthful and reviewable.
|
|
299
|
-
- [settle-rumor-into-structure](references/settle-rumor-into-structure.md): Turn a ready rumor into committed quest or questline structure without losing provenance or pretending vague intake is settled.
|
|
300
|
-
- [tag-and-filter-portfolios](references/tag-and-filter-portfolios.md): Use tags for cross-cutting classification and portfolio filtering without confusing tags for status, timing, or dependency modeling.
|
|
379
|
+
- `ghostpaw-questlog skill archive-delete-and-prune` ([archive-delete-and-prune](references/archive-delete-and-prune.md)): Choose the right retirement action for each kind of work so history stays honest and hiding does not get confused with archival or terminal execution truth.
|
|
380
|
+
- `ghostpaw-questlog skill choose-work-shape` ([choose-work-shape](references/choose-work-shape.md)): Choose the right structure for new work by separating uncertainty, one-shot execution, multi-step arcs, and recurring patterns.
|
|
381
|
+
- `ghostpaw-questlog skill clarify-ambiguous-requests` ([clarify-ambiguous-requests](references/clarify-ambiguous-requests.md)): Treat ambiguity as a real state, capture uncertainty honestly, and only commit work structure once the next executable shape is clear.
|
|
382
|
+
- `ghostpaw-questlog skill close-work-and-claim-outcomes` ([close-work-and-claim-outcomes](references/close-work-and-claim-outcomes.md)): Close work with the correct terminal lifecycle action, then handle any concrete reward claim as a separate explicit step.
|
|
383
|
+
- `ghostpaw-questlog skill create-concrete-quest` ([create-concrete-quest](references/create-concrete-quest.md)): Create real, bounded executable quests only when the objective is concrete enough to execute without interpretive guesswork.
|
|
384
|
+
- `ghostpaw-questlog skill detect-slips-and-staleness` ([detect-slips-and-staleness](references/detect-slips-and-staleness.md)): Detect work that is slipping or going stale by reading overdue, deferred, in-progress, and related operational views before choosing one recovery move.
|
|
385
|
+
- `ghostpaw-questlog skill escalate-and-unblock` ([escalate-and-unblock](references/escalate-and-unblock.md)): Diagnose blockers honestly, then remove or realign hard gates when the model is wrong instead of treating every delay as generic escalation theater.
|
|
386
|
+
- `ghostpaw-questlog skill frame-initiative-questline` ([frame-initiative-questline](references/frame-initiative-questline.md)): Use questlines for shared initiative context, then attach concrete quests and maintain the structure without confusing one quest with one arc.
|
|
387
|
+
- `ghostpaw-questlog skill handle-exceptions-and-weird-cases` ([handle-exceptions-and-weird-cases](references/handle-exceptions-and-weird-cases.md)): Handle weird cases by diagnosing the actual tool outcome, routing into clarification or recovery when needed, and refusing to fake a clean normal-state story.
|
|
388
|
+
- `ghostpaw-questlog skill intake-triage` ([intake-triage](references/intake-triage.md)): Triage new asks, ideas, and vague incoming work into the right next step without prematurely committing execution structure.
|
|
389
|
+
- `ghostpaw-questlog skill maintain-clear-ownership` ([maintain-clear-ownership](references/maintain-clear-ownership.md)): Keep ownership explicit through quest content and classification because Questlog does not provide a separate assignee field or ownership tool.
|
|
390
|
+
- `ghostpaw-questlog skill manage-approvals-and-promises` ([manage-approvals-and-promises](references/manage-approvals-and-promises.md)): Treat approvals and commitments as modeled work with timing and dependencies instead of burying them as vague narrative promises.
|
|
391
|
+
- `ghostpaw-questlog skill plan-successor-work` ([plan-successor-work](references/plan-successor-work.md)): Create explicit successor work after closure by spawning follow-ups or shaping new work, while keeping uncertain next steps in intake instead of faking certainty.
|
|
392
|
+
- `ghostpaw-questlog skill plan-time-correctly` ([plan-time-correctly](references/plan-time-correctly.md)): Use quest planning fields honestly so availability, due pressure, and schedule intent stay meaningful instead of getting collapsed into one generic date.
|
|
393
|
+
- `ghostpaw-questlog skill prioritize-across-streams` ([prioritize-across-streams](references/prioritize-across-streams.md)): Prioritize across competing work streams by reading real candidate sets, distinguishing available from blocked work, and then reflecting the choice in planning.
|
|
394
|
+
- `ghostpaw-questlog skill protect-capacity-and-focus` ([protect-capacity-and-focus](references/protect-capacity-and-focus.md)): Protect capacity and focus by reading the real in-progress and scheduled-now load, then using planning to rebalance instead of silently overcommitting.
|
|
395
|
+
- `ghostpaw-questlog skill recover-from-modeling-mistakes` ([recover-from-modeling-mistakes](references/recover-from-modeling-mistakes.md)): Recover from modeling mistakes by diagnosing the exact current state first, then applying the smallest honest corrective tool instead of rewriting history blindly.
|
|
396
|
+
- `ghostpaw-questlog skill report-status-and-manage-expectations` ([report-status-and-manage-expectations](references/report-status-and-manage-expectations.md)): Build status reporting from the real questlog state, separating available, blocked, in-progress, slipping, and resolved work without relying on memory.
|
|
397
|
+
- `ghostpaw-questlog skill revise-or-reshape-commitment` ([revise-or-reshape-commitment](references/revise-or-reshape-commitment.md)): Revise a quest objective before execution starts, but reshape commitments honestly with lifecycle tools once real execution history exists.
|
|
398
|
+
- `ghostpaw-questlog skill run-operational-review` ([run-operational-review](references/run-operational-review.md)): Drive daily or weekly operational review from structured list views, then move from diagnosis into actual planning or execution changes.
|
|
399
|
+
- `ghostpaw-questlog skill run-recurring-rhythms` ([run-recurring-rhythms](references/run-recurring-rhythms.md)): Model recurring work as repeatable definitions that spawn fresh concrete quests over time instead of living forever as one immortal task.
|
|
400
|
+
- `ghostpaw-questlog skill search-and-retrieve-context` ([search-and-retrieve-context](references/search-and-retrieve-context.md)): Find relevant questlog context quickly, then switch from discovery to exact inspection without confusing free-text search with structured review surfaces.
|
|
401
|
+
- `ghostpaw-questlog skill sequence-with-unlocks` ([sequence-with-unlocks](references/sequence-with-unlocks.md)): Model hard sequencing with unlocks between concrete quests so blocked and available work stay truthful and reviewable.
|
|
402
|
+
- `ghostpaw-questlog skill settle-rumor-into-structure` ([settle-rumor-into-structure](references/settle-rumor-into-structure.md)): Turn a ready rumor into committed quest or questline structure without losing provenance or pretending vague intake is settled.
|
|
403
|
+
- `ghostpaw-questlog skill tag-and-filter-portfolios` ([tag-and-filter-portfolios](references/tag-and-filter-portfolios.md)): Use tags for cross-cutting classification and portfolio filtering without confusing tags for status, timing, or dependency modeling.
|
|
301
404
|
|
|
302
405
|
### Principles
|
|
303
406
|
|
|
@@ -305,3 +408,7 @@ Writes: writes_state.
|
|
|
305
408
|
- Read before you prescribe.
|
|
306
409
|
- Protect history when reality changes.
|
|
307
410
|
- Close the last mile, not just the main work.
|
|
411
|
+
|
|
412
|
+
## Without the binary
|
|
413
|
+
|
|
414
|
+
Use `npx -y @ghostpaw/questlog ...` in npm-based environments (Node 24+). Harnesses that embed it in code can import `@ghostpaw/questlog` as a library.
|
package/dist/chunk-RUSE7ZFF.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
function resolveQuestlogDbPath(options = {}) {
|
|
6
|
-
return options.flag ?? ((options.env ?? process.env).GHOSTPAW_QUESTLOG_DB || join(homedir(), ".ghostpaw", "questlog.db"));
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// src/version.ts
|
|
10
|
-
var questlogVersion = "0.9.0";
|
|
11
|
-
|
|
12
|
-
// src/surfaces/surface_types.ts
|
|
13
|
-
function isErrorResult(result) {
|
|
14
|
-
return typeof result === "object" && result !== null && "ok" in result && result.ok === false;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// src/surfaces/validate_input.ts
|
|
18
|
-
function validateInput(schema, input, path = "$") {
|
|
19
|
-
const errors = [];
|
|
20
|
-
const matchesType = (type) => {
|
|
21
|
-
switch (type) {
|
|
22
|
-
case "object":
|
|
23
|
-
return typeof input === "object" && input !== null && !Array.isArray(input);
|
|
24
|
-
case "array":
|
|
25
|
-
return Array.isArray(input);
|
|
26
|
-
case "integer":
|
|
27
|
-
return typeof input === "number" && Number.isInteger(input);
|
|
28
|
-
case "number":
|
|
29
|
-
return typeof input === "number" && Number.isFinite(input);
|
|
30
|
-
case "null":
|
|
31
|
-
return input === null;
|
|
32
|
-
default:
|
|
33
|
-
return typeof input === type;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
if (schema.type && !(Array.isArray(schema.type) ? schema.type : [schema.type]).some(matchesType)) {
|
|
37
|
-
return [`${path}: expected ${String(schema.type)}`];
|
|
38
|
-
}
|
|
39
|
-
if (schema.enum && !schema.enum.some((value) => JSON.stringify(value) === JSON.stringify(input)))
|
|
40
|
-
errors.push(`${path}: expected one of ${JSON.stringify(schema.enum)}`);
|
|
41
|
-
if (schema.oneOf && !schema.oneOf.some((branch) => validateInput(branch, input, path).length === 0))
|
|
42
|
-
errors.push(`${path}: must match at least one schema branch`);
|
|
43
|
-
if (typeof input === "object" && input !== null && !Array.isArray(input)) {
|
|
44
|
-
const record = input;
|
|
45
|
-
for (const name of schema.required ?? [])
|
|
46
|
-
if (!Object.hasOwn(record, name)) errors.push(`${path}.${name}: required`);
|
|
47
|
-
for (const [name, property] of Object.entries(schema.properties ?? {}))
|
|
48
|
-
if (Object.hasOwn(record, name))
|
|
49
|
-
errors.push(...validateInput(property, record[name], `${path}.${name}`));
|
|
50
|
-
}
|
|
51
|
-
if (Array.isArray(input) && schema.items)
|
|
52
|
-
input.forEach((value, index) => {
|
|
53
|
-
errors.push(...validateInput(schema.items, value, `${path}[${index}]`));
|
|
54
|
-
});
|
|
55
|
-
return errors;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export { isErrorResult, questlogVersion, resolveQuestlogDbPath, validateInput };
|