linersh 0.5.6 → 1.0.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.
Files changed (98) hide show
  1. package/README.md +65 -165
  2. package/bin/liner.js +82 -44
  3. package/cli-update-docs/ABOUT.md +16 -16
  4. package/cli-update-docs/AI-HANDOFF.md +62 -190
  5. package/cli-update-docs/CURATION.md +48 -19
  6. package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +9 -12
  7. package/cli-update-docs/JTBD-MASTER-PROMPT.md +1 -1
  8. package/cli-update-docs/LINER-MASTER.md +77 -63
  9. package/cli-update-docs/LINER-MD-PRD.md +531 -0
  10. package/cli-update-docs/MIXTAPE-FORMAT.md +76 -44
  11. package/cli-update-docs/PLATFORM.md +47 -46
  12. package/cli-update-docs/README.md +6 -6
  13. package/cli-update-docs/SKILL.md +72 -37
  14. package/cli-update-docs/TUI-BACKLOG.md +205 -26
  15. package/cli-update-docs/quality-check-tests.md +256 -8
  16. package/cli-update-docs/source-finding-tactics.md +140 -3
  17. package/cli-update-docs/source-quality-hierarchy.md +83 -0
  18. package/cli-update-docs/synthesis-guidance.md +19 -5
  19. package/dist/agents/artifact-validation.js +440 -0
  20. package/dist/agents/artifact-validation.js.map +1 -0
  21. package/dist/agents/candidate-longlist.js +100 -0
  22. package/dist/agents/candidate-longlist.js.map +1 -0
  23. package/dist/agents/detect.js +3 -2
  24. package/dist/agents/detect.js.map +1 -1
  25. package/dist/agents/evaluation-assembly.js +270 -0
  26. package/dist/agents/evaluation-assembly.js.map +1 -0
  27. package/dist/agents/headless-runner.js +227 -0
  28. package/dist/agents/headless-runner.js.map +1 -0
  29. package/dist/agents/jtbd-clarify.js +42 -41
  30. package/dist/agents/jtbd-clarify.js.map +1 -1
  31. package/dist/agents/models.js +6 -7
  32. package/dist/agents/models.js.map +1 -1
  33. package/dist/agents/prompts.js +220 -20
  34. package/dist/agents/prompts.js.map +1 -1
  35. package/dist/agents/runner.js +462 -21
  36. package/dist/agents/runner.js.map +1 -1
  37. package/dist/phases.js +13 -13
  38. package/dist/phases.js.map +1 -1
  39. package/dist/source-inbox.js +297 -0
  40. package/dist/source-inbox.js.map +1 -0
  41. package/dist/version.js +3 -9
  42. package/dist/version.js.map +1 -1
  43. package/dist/yaml-io.js +42 -11
  44. package/dist/yaml-io.js.map +1 -1
  45. package/package.json +26 -23
  46. package/cli-update-docs/JOB-STORY-MIGRATION.md +0 -99
  47. package/dist/App.js +0 -220
  48. package/dist/App.js.map +0 -1
  49. package/dist/colors.js +0 -132
  50. package/dist/colors.js.map +0 -1
  51. package/dist/components/Header.js +0 -15
  52. package/dist/components/Header.js.map +0 -1
  53. package/dist/components/KeyHints.js +0 -17
  54. package/dist/components/KeyHints.js.map +0 -1
  55. package/dist/components/LabeledBox.js +0 -53
  56. package/dist/components/LabeledBox.js.map +0 -1
  57. package/dist/components/NextSteps.js +0 -18
  58. package/dist/components/NextSteps.js.map +0 -1
  59. package/dist/index.js +0 -17
  60. package/dist/index.js.map +0 -1
  61. package/dist/screens/AgentSetup.js +0 -224
  62. package/dist/screens/AgentSetup.js.map +0 -1
  63. package/dist/screens/BootSplash.js +0 -163
  64. package/dist/screens/BootSplash.js.map +0 -1
  65. package/dist/screens/CompileView.js +0 -567
  66. package/dist/screens/CompileView.js.map +0 -1
  67. package/dist/screens/FramingConfirmReview.js +0 -197
  68. package/dist/screens/FramingConfirmReview.js.map +0 -1
  69. package/dist/screens/Gate1Review.js +0 -147
  70. package/dist/screens/Gate1Review.js.map +0 -1
  71. package/dist/screens/Gate2Review.js +0 -162
  72. package/dist/screens/Gate2Review.js.map +0 -1
  73. package/dist/screens/ImportPrompt.js +0 -173
  74. package/dist/screens/ImportPrompt.js.map +0 -1
  75. package/dist/screens/JsSetup.js +0 -77
  76. package/dist/screens/JsSetup.js.map +0 -1
  77. package/dist/screens/LocalFilePicker.js +0 -139
  78. package/dist/screens/LocalFilePicker.js.map +0 -1
  79. package/dist/screens/NewMixtapeWizard.js +0 -662
  80. package/dist/screens/NewMixtapeWizard.js.map +0 -1
  81. package/dist/screens/PhaseRunner.js +0 -1203
  82. package/dist/screens/PhaseRunner.js.map +0 -1
  83. package/dist/screens/ProcessManifest.js +0 -160
  84. package/dist/screens/ProcessManifest.js.map +0 -1
  85. package/dist/screens/ProjectHub.js +0 -557
  86. package/dist/screens/ProjectHub.js.map +0 -1
  87. package/dist/screens/SourceModal.js +0 -269
  88. package/dist/screens/SourceModal.js.map +0 -1
  89. package/dist/screens/TapeBrowser.js +0 -312
  90. package/dist/screens/TapeBrowser.js.map +0 -1
  91. package/dist/screens/TapeDraftReview.js +0 -444
  92. package/dist/screens/TapeDraftReview.js.map +0 -1
  93. package/dist/screens/TapeEditor.js +0 -310
  94. package/dist/screens/TapeEditor.js.map +0 -1
  95. package/dist/screens/cassette-art.js +0 -72
  96. package/dist/screens/cassette-art.js.map +0 -1
  97. package/dist/store.js +0 -10
  98. package/dist/store.js.map +0 -1
@@ -6,13 +6,13 @@ This document explains what Liner is, how it works, how it is built, how it is u
6
6
 
7
7
  Liner is an open-source toolkit for building curated AI context bundles called **mixtapes**.
8
8
 
9
- A mixtape is a project folder that contains:
9
+ A Liner project is a folder. Its mixtape corpus lives under `mixtape/` in v2 projects and contains:
10
10
 
11
- - a recipe, `tape.yaml`
12
- - a curator synthesis, `synthesis.md`
13
- - extracted source files in `sources/`
14
- - optional working notes in `working/`
15
- - a compiled master file, `MIXTAPE.md`
11
+ - a recipe, `mixtape/tape.yaml`
12
+ - a curator synthesis, `mixtape/synthesis.md`
13
+ - extracted source files in `mixtape/sources/`
14
+ - optional working notes in `mixtape/working/`
15
+ - a compiled master file, `mixtape/MIXTAPE.md`
16
16
 
17
17
  The point is simple: AI systems are much better when they are given a thoughtful, domain-specific context bundle instead of a pile of random links or whatever happens to be in the model's training data.
18
18
 
@@ -43,7 +43,7 @@ That is what Liner does.
43
43
 
44
44
  ### Tape
45
45
 
46
- A **tape** is the recipe. It lives in `tape.yaml`.
46
+ A **tape** is the recipe. It lives in `mixtape/tape.yaml` in v2 projects.
47
47
 
48
48
  It names the mixtape, describes its purpose, identifies the curator, and lists the kept sources with notes, sections, and source metadata.
49
49
 
@@ -51,13 +51,13 @@ The tape is small and shareable. It can be edited by hand, stored in Git, review
51
51
 
52
52
  ### Mixtape
53
53
 
54
- A **mixtape** is the full project folder.
54
+ A **mixtape** is the corpus inside the project folder.
55
55
 
56
56
  It includes the tape, the curator's synthesis, extracted source content, working notes, and compiled output.
57
57
 
58
58
  ### Consumable Mixtape
59
59
 
60
- The **consumable mixtape** is what an AI actually reads: `MIXTAPE.md` plus the referenced files in `sources/`.
60
+ The **consumable mixtape** is what an AI actually reads: `mixtape/MIXTAPE.md` plus the referenced files in `mixtape/sources/`.
61
61
 
62
62
  `MIXTAPE.md` contains the curator synthesis, a source index, and links to the extracted source files.
63
63
 
@@ -73,24 +73,30 @@ A compiled project folder looks like this:
73
73
 
74
74
  ```text
75
75
  mobile-design-foundations/
76
- |-- MIXTAPE.md
77
- |-- tape.yaml
78
- |-- synthesis.md
79
- |-- sources/
80
- | |-- 01-touch-target-size.md
81
- | |-- 02-apple-gestures.md
82
- | `-- ...
83
- |-- personal/
84
- | `-- touch-target-paper.pdf
85
- `-- working/
86
- |-- 01-jtbd-and-knowledge-map.md
87
- |-- 02-candidate-longlist.md
88
- |-- 03-evaluation.yaml
89
- |-- 04-quality-checks.md
90
- `-- 07-tape-draft.yaml
76
+ |-- liner.yaml
77
+ |-- LINER.md
78
+ |-- SKILL.md
79
+ |-- skills/
80
+ |-- working/
81
+ `-- mixtape/
82
+ |-- MIXTAPE.md
83
+ |-- tape.yaml
84
+ |-- synthesis.md
85
+ |-- sources/
86
+ | |-- 01-touch-target-size.md
87
+ | |-- 02-apple-gestures.md
88
+ | `-- ...
89
+ |-- local-sources/
90
+ | `-- touch-target-paper.pdf
91
+ `-- working/
92
+ |-- 01-jtbd-and-knowledge-map.md
93
+ |-- 02-candidate-longlist.md
94
+ |-- 03-evaluation.yaml
95
+ |-- 04-quality-checks.md
96
+ `-- 07-tape-draft.yaml
91
97
  ```
92
98
 
93
- `tape.yaml` is the source recipe. `synthesis.md` is the curator's distilled framing. `sources/` contains extracted content. `working/` contains the curation trace. `MIXTAPE.md` is the compiled entry point.
99
+ `mixtape/tape.yaml` is the source recipe. `mixtape/synthesis.md` is the curator's distilled framing. `mixtape/sources/` contains extracted content. `mixtape/working/` contains the curation trace. `mixtape/MIXTAPE.md` is the compiled entry point.
94
100
 
95
101
  ## What Liner Is Good For
96
102
 
@@ -141,15 +147,15 @@ Use the Python CLI when you already have a project folder or prefer editing YAML
141
147
 
142
148
  ```sh
143
149
  liner init mobile-design-foundations
144
- # edit mobile-design-foundations/tape.yaml
145
- # write mobile-design-foundations/synthesis.md
150
+ # edit mobile-design-foundations/mixtape/tape.yaml
151
+ # write mobile-design-foundations/mixtape/synthesis.md
146
152
  liner compile mobile-design-foundations
147
153
  ```
148
154
 
149
155
  The compile step fetches and extracts sources, then writes:
150
156
 
151
- - `MIXTAPE.md`
152
- - `sources/NN-*.md`
157
+ - `mixtape/MIXTAPE.md`
158
+ - `mixtape/sources/NN-*.md`
153
159
 
154
160
  To share:
155
161
 
@@ -182,9 +188,9 @@ Use the `curating-mixtapes` skill when you want an AI assistant to run the curat
182
188
 
183
189
  The skill produces a project folder with:
184
190
 
185
- - `tape.yaml`
186
- - `synthesis.md`
187
- - `working/*` notes
191
+ - `mixtape/tape.yaml`
192
+ - `mixtape/synthesis.md`
193
+ - `mixtape/working/*` notes
188
194
 
189
195
  The skill does not compile. After the skill finishes, run:
190
196
 
@@ -198,15 +204,17 @@ The current TUI-driven flow has six authoring phases plus Compile. The empirical
198
204
 
199
205
  ### Phase 1: Framing
200
206
 
201
- Define the job-to-be-done and sketch a knowledge map.
207
+ Define the job-to-be-done, capability brief, knowledge map, and required source roles.
202
208
 
203
209
  The job-to-be-done is not the topic. "Mobile design" is a topic. *"When I'm designing the core UI of a consumer iOS app, I want to follow Apple's interaction conventions while choosing where to deviate visually, so I can ship something that feels native without looking generic"* is a job. The JTBD is written in Job Story form: `When [circumstance], I want [motivation], so I can [outcome].` See [CURATION.md](CURATION.md) Phase 1 and [JTBD-MASTER-PROMPT.md](JTBD-MASTER-PROMPT.md) for the full rubric.
204
210
 
211
+ The capability brief says what the corpus should make a downstream AI agent better at. Required source roles name the evidence types the corpus must satisfy before source discovery can proceed.
212
+
205
213
  ### Phase 2: Candidate Discovery
206
214
 
207
215
  Gather more candidate sources than you expect to keep. This phase is about recall, not precision.
208
216
 
209
- Good tactics include following citations, mining expert reading lists, searching course syllabi, checking official docs, and asking AI to critique gaps rather than invent sources.
217
+ Good tactics include following citations, mining expert reading lists, searching course syllabi, checking official docs, searching by required source role, and asking AI to critique gaps rather than invent sources.
210
218
 
211
219
  ### Phase 3: Evaluation
212
220
 
@@ -216,7 +224,7 @@ A kept source should have a specific role. The curator note should explain why t
216
224
 
217
225
  ### Phase 4: Quality Checks
218
226
 
219
- Run tests for redundancy, coverage, disagreement, framing gaps, and source-kind balance.
227
+ Run tests for redundancy, coverage, disagreement, framing gaps, source-kind balance, and required source-role fit.
220
228
 
221
229
  This is where the methodology catches "good but narrow" corpora.
222
230
 
@@ -228,11 +236,11 @@ The synthesis is not a recap. It is the framing the AI should inherit before usi
228
236
 
229
237
  ### Phase 6: Assembly
230
238
 
231
- Write the final `tape.yaml`, order the sources, and prepare for compile.
239
+ Write the final `mixtape/tape.yaml`, order the sources, and prepare for compile.
232
240
 
233
241
  ### Compile
234
242
 
235
- Fetch every kept source, extract readable content, write `sources/`, and produce `MIXTAPE.md`.
243
+ Fetch every kept source, extract readable content, write `mixtape/sources/`, and produce `mixtape/MIXTAPE.md`.
236
244
 
237
245
  The TUI treats compilation as the completion milestone. A partial compile is still a usable finished state when `MIXTAPE.md` is written; the hub shows "Ready to use — compiled with warnings" and pressing Enter on Compile opens the existing compile result instead of fetching again. Recompile is explicit with `r` from the compile result screen.
238
246
 
@@ -248,13 +256,13 @@ This is a methodology practice, not a driven step in the TUI. As of v0.5.2 the T
248
256
 
249
257
  At a high level:
250
258
 
251
- 1. Parse and validate `tape.yaml`.
252
- 2. Read `synthesis.md`.
259
+ 1. Parse and validate `mixtape/tape.yaml`.
260
+ 2. Read `mixtape/synthesis.md`.
253
261
  3. Fetch or load every source.
254
262
  4. Extract readable content.
255
263
  5. Use cached content when valid.
256
- 6. Write one file per source into `sources/`.
257
- 7. Write `MIXTAPE.md`.
264
+ 6. Write one file per source into `mixtape/sources/`.
265
+ 7. Write `mixtape/MIXTAPE.md`.
258
266
 
259
267
  Supported source types:
260
268
 
@@ -274,7 +282,7 @@ If `trafilatura` itself crashes on a page, the web handlers now keep the source
274
282
 
275
283
  YouTube sources use transcript fetching first and fall back through `yt-dlp` where possible.
276
284
 
277
- Local files live under the project's `personal/` directory and can include Markdown, text, HTML, and PDFs.
285
+ Local files live under the project's `local-sources/` directory or the legacy `personal/` directory and can include Markdown, text, HTML, and PDFs.
278
286
 
279
287
  ## How Sharing Works
280
288
 
@@ -286,9 +294,9 @@ The archive can include:
286
294
  - synthesis
287
295
  - source files
288
296
  - working notes
289
- - personal files, unless excluded
297
+ - local source files, unless excluded
290
298
 
291
- Because compiled source content may include copyrighted or private material, a curator can share just the recipe or exclude personal/source content depending on the audience.
299
+ Because compiled source content may include copyrighted or private material, a curator can share just the recipe or exclude local/source content depending on the audience.
292
300
 
293
301
  `liner import <archive>` unpacks a `.mixtape` and can refetch sources locally.
294
302
 
@@ -315,24 +323,27 @@ Important areas:
315
323
  - `src/liner/share.py` handles `.mixtape` archives.
316
324
  - `src/liner/manifest.py` aggregates process metadata from agent runs.
317
325
 
318
- The Python package is installable directly:
326
+ The Python core can still be installed directly for development or fallback testing:
319
327
 
320
328
  ```sh
321
329
  pipx install linersh
322
330
  ```
323
331
 
324
- ### TypeScript TUI
332
+ ### Terminal UI
325
333
 
326
- The TUI is a Node/React/Ink application in `packages/tui`.
334
+ The active TUI is a Charm-based Go application in `packages/go-tui`.
335
+ `packages/tui` is still the npm package/shim plus the TypeScript headless
336
+ methodology runner; it is no longer the React/Ink TUI implementation. The old
337
+ React/Ink UI is archived for reference under `ink/`.
327
338
 
328
339
  Important areas:
329
340
 
330
- - `packages/tui/src/App.tsx` owns screen routing.
331
- - `packages/tui/src/screens/` contains interactive screens.
341
+ - `packages/go-tui/cmd/liner-tui/` starts the active terminal app.
342
+ - `packages/go-tui/internal/app/` owns screen routing, key handling, and UI rendering.
332
343
  - `packages/tui/src/yaml-io.ts` reads and writes `tape.yaml`.
333
344
  - `packages/tui/src/bin-resolver.ts` finds the Python core.
334
345
  - `packages/tui/src/agents/` runs and parses agent-backed methodology phases.
335
- - `packages/tui/src/screens/CompileView.tsx` streams compile progress from the Python CLI.
346
+ - `packages/go-tui/internal/core/` streams compile progress from the Python CLI.
336
347
 
337
348
  The TUI does not reimplement core compile/share/import behavior. It shells out to the Python core and reads structured progress events.
338
349
 
@@ -350,7 +361,7 @@ It contains the TUI plus a small `bin/liner.js` shim. Platform-specific Python b
350
361
 
351
362
  This follows the native-binary package pattern used by many developer tools: install the lightweight main package, let npm select the platform package that matches the host, then run the bundled binary.
352
363
 
353
- **Windows status as of 0.5.5:** npm support unblocked the Windows platform tarball and `linersh@0.5.5` includes `linersh-win32-x64` as an optional dependency alongside macOS and Linux packages.
364
+ **Windows status:** npm support includes `linersh-win32-x64` as an optional dependency alongside macOS and Linux packages.
354
365
 
355
366
  The shim behavior:
356
367
 
@@ -375,11 +386,13 @@ Validation:
375
386
  python3 scripts/validate-platform-package.py --pack-dry-run
376
387
  ```
377
388
 
378
- The GitHub workflow `.github/workflows/platform-bundles.yml` builds and validates macOS, Linux, and Windows packages.
389
+ The GitHub workflow `.github/workflows/platform-bundles.yml` builds platform
390
+ package artifacts on manual dispatch. Publish manually only after all platform
391
+ artifacts and the clean consumer release smoke pass.
379
392
 
380
393
  ### The Skill Bundle
381
394
 
382
- The skill bundle lives in `cli-update-docs/`.
395
+ The tracked skill bundle lives in `docs/curation-skill/`.
383
396
 
384
397
  It encodes the curation methodology as executable instructions for an AI assistant. It is not the same thing as the CLI or TUI. It is one surface for producing Liner project folders.
385
398
 
@@ -448,7 +461,7 @@ sources:
448
461
  section: foundations
449
462
 
450
463
  - type: local_file
451
- path: personal/touch-target-paper.pdf
464
+ path: local-sources/touch-target-paper.pdf
452
465
  citation: "Parhi et al., 'Target Size for One-Handed Thumb Use,' Mobile HCI 2006."
453
466
  note: The canonical empirical study behind the 44pt minimum.
454
467
  section: evidence
@@ -461,8 +474,8 @@ sources:
461
474
  liner init mobile-design-foundations
462
475
 
463
476
  # Edit the recipe and synthesis.
464
- $EDITOR mobile-design-foundations/tape.yaml
465
- $EDITOR mobile-design-foundations/synthesis.md
477
+ $EDITOR mobile-design-foundations/mixtape/tape.yaml
478
+ $EDITOR mobile-design-foundations/mixtape/synthesis.md
466
479
 
467
480
  # Enable JS rendering if needed.
468
481
  liner setup-js
@@ -471,7 +484,7 @@ liner setup-js
471
484
  liner compile mobile-design-foundations
472
485
 
473
486
  # Use it in an AI conversation.
474
- # Paste MIXTAPE.md and selected files from sources/.
487
+ # Paste mixtape/MIXTAPE.md and selected files from mixtape/sources/.
475
488
 
476
489
  # Share it.
477
490
  liner share mobile-design-foundations
@@ -524,23 +537,24 @@ Liner's methodology exists to catch these before compile.
524
537
 
525
538
  ## Project Status
526
539
 
527
- As of v0.5.5:
540
+ As of v1.0.0:
528
541
 
529
542
  - The Python CLI is functional.
530
- - The TypeScript/Ink TUI is functional. The empirical-test phase has been removed from the driven flow — compilation is now the completion milestone (*compiled = complete*). The hub is a single summary view (status box + always-visible phase checklist), import auto-detects `.mixtape` files in the current folder, and completed/partial compiles open the existing compile result instead of rerunning by default.
543
+ - The active Go TUI is functional. The old React/Ink TUI is decommissioned and archived under `ink/`. The empirical-test phase has been removed from the driven flow — compilation is now the completion milestone (*compiled = complete*). The hub is a single summary view (status box + always-visible phase checklist), import uses a file picker for `.mixtape` archives, and completed/partial compiles open the existing compile result instead of rerunning by default.
544
+ - Phase 1 framing now validates the evidence plan before source discovery. The TUI requires a capability brief and required source roles with why/evidence/minimum coverage before advancing.
531
545
  - The npm distribution uses a main `linersh` package plus five optional platform packages (`darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-x64`, `win32-x64`).
532
546
  - The release is installable via `npx linersh` on Mac, Linux, and Windows x64. `liner --version` reports the TUI version (and the bundled core version alongside it).
533
547
  - JavaScript-rendered web support is available through `liner setup-js`; the TUI prompts for it during first-run onboarding and from compile warnings when Chromium is missing.
534
548
  - `liner uninstall` exists for clean local reinstall tests.
535
- - The curation skill exists and is still being refined.
549
+ - The curation skill exists, ships with the TUI package, and supports Claude or Codex as the local runner.
536
550
  - The MCP server, hosted web builder, and public library are planned.
537
551
 
538
552
  ## Where To Read Next
539
553
 
540
554
  - Root README: `README.md`
541
- - Curation methodology: `cli-update-docs/CURATION.md`
542
- - Mixtape format: `cli-update-docs/MIXTAPE-FORMAT.md`
543
- - Skill bundle: `cli-update-docs/SKILL.md`
555
+ - Curation methodology: `docs/curation-skill/CURATION.md`
556
+ - Mixtape format: `docs/curation-skill/MIXTAPE-FORMAT.md`
557
+ - Skill bundle: `docs/curation-skill/SKILL.md`
544
558
  - TUI docs: `packages/tui/README.md`
545
559
  - Platform binary packaging: `packages/tui/PLATFORM-BUNDLES.md`
546
560
  - Publish checklist: `packages/tui/PUBLISH-CHECKLIST.md`