linersh 0.5.7 → 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 -204
  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
@@ -1,163 +0,0 @@
1
- import React, { useMemo, useState } from "react";
2
- import { Box, Text, useApp as useInkApp, useInput, useStdout } from "ink";
3
- import BigText from "ink-big-text";
4
- import Gradient from "ink-gradient";
5
- import { useApp } from "../store.js";
6
- import { MUTED, CURRENT, HEADING, PALETTE, STRUCTURE } from "../colors.js";
7
- import { VERSION } from "../version.js";
8
- import { SMALL_CASSETTE_ROWS, SMALL_CASSETTE_WIDTH, } from "./cassette-art.js";
9
- const ITEMS = [
10
- { action: "new", hotkey: "n", label: "New mixtape", hint: "open the curation wizard" },
11
- { action: "import", hotkey: "i", label: "Import archive", hint: "load a .mixtape file" },
12
- { action: "open", hotkey: "o", label: "Open existing", hint: "browse your mixtapes folder" },
13
- { action: "settings", hotkey: "s", label: "Settings", hint: "change AI agent" },
14
- ];
15
- export function BootSplash() {
16
- const app = useApp();
17
- const ink = useInkApp();
18
- const { stdout } = useStdout();
19
- const cols = stdout?.columns ?? 80;
20
- // Show the compact cassette whenever it fits; fall back to the wordmark
21
- // on terminals too narrow for it.
22
- const showCassette = cols >= SMALL_CASSETTE_WIDTH;
23
- const [selected, setSelected] = useState(0);
24
- function dispatch(action) {
25
- switch (action) {
26
- case "new":
27
- app.navigate({ kind: "newProject" });
28
- return;
29
- case "import":
30
- app.navigate({ kind: "import" });
31
- return;
32
- case "open":
33
- app.navigate({ kind: "browser" });
34
- return;
35
- case "settings":
36
- app.navigate({ kind: "agentSetup" });
37
- return;
38
- }
39
- }
40
- useInput((input, key) => {
41
- if (key.upArrow || input === "k") {
42
- setSelected((i) => (i - 1 + ITEMS.length) % ITEMS.length);
43
- }
44
- else if (key.downArrow || input === "j") {
45
- setSelected((i) => (i + 1) % ITEMS.length);
46
- }
47
- else if (input === "n") {
48
- dispatch("new");
49
- }
50
- else if (input === "i") {
51
- dispatch("import");
52
- }
53
- else if (input === "o") {
54
- dispatch("open");
55
- }
56
- else if (input === "s") {
57
- dispatch("settings");
58
- }
59
- else if (key.return || input === " ") {
60
- dispatch(ITEMS[selected].action);
61
- }
62
- else if (input === "q") {
63
- ink.exit();
64
- }
65
- // No esc handler: the splash is home. Esc anywhere else walks back to
66
- // here and stops — esc on home itself is a deliberate no-op.
67
- });
68
- return (React.createElement(Box, { flexDirection: "column", paddingY: 1 },
69
- showCassette ? (React.createElement(CassetteLogo, { rows: SMALL_CASSETTE_ROWS })) : (React.createElement(Gradient, { name: "vice" },
70
- React.createElement(BigText, { text: "liner", font: "block" }))),
71
- React.createElement(Box, { flexDirection: "column", paddingLeft: 2, marginTop: showCassette ? 1 : -1 },
72
- React.createElement(Box, null,
73
- React.createElement(Text, { color: STRUCTURE, bold: true }, "liner"),
74
- React.createElement(Text, { color: MUTED }, " \u00B7 curate AI-ready mixtapes from any set of sources")),
75
- React.createElement(Text, { color: MUTED },
76
- "v",
77
- VERSION)),
78
- React.createElement(Box, { flexDirection: "column", paddingLeft: 2, marginTop: 1 },
79
- React.createElement(Text, { color: HEADING, bold: true }, "Get started"),
80
- React.createElement(Box, { marginTop: 1, flexDirection: "column" }, ITEMS.map((item, i) => (React.createElement(MenuRow, { key: item.action, item: item, active: i === selected }))))),
81
- React.createElement(Box, { marginTop: 1, paddingLeft: 2 },
82
- React.createElement(Text, { color: MUTED }, "\u2191\u2193 navigate \u00B7 "),
83
- React.createElement(Text, { color: STRUCTURE }, "enter"),
84
- React.createElement(Text, { color: MUTED }, " select \u00B7 "),
85
- React.createElement(Text, { color: STRUCTURE }, "[n]"),
86
- React.createElement(Text, { color: MUTED }, " "),
87
- React.createElement(Text, { color: STRUCTURE }, "[i]"),
88
- React.createElement(Text, { color: MUTED }, " "),
89
- React.createElement(Text, { color: STRUCTURE }, "[o]"),
90
- React.createElement(Text, { color: MUTED }, " "),
91
- React.createElement(Text, { color: STRUCTURE }, "[s]"),
92
- React.createElement(Text, { color: MUTED }, " direct shortcuts \u00B7 "),
93
- React.createElement(Text, { color: STRUCTURE }, "q"),
94
- React.createElement(Text, { color: MUTED }, " quit"))));
95
- }
96
- /**
97
- * Render the ASCII cassette logo with every non-space character painted in
98
- * a randomly-chosen palette color. The randomization is computed once per
99
- * mount (via useMemo) — re-randomizing on every re-render would flicker.
100
- *
101
- * For perf we group consecutive characters that landed on the same color
102
- * into runs so each row ships a handful of `Text` nodes instead of one per
103
- * character — Ink mounts a separate element per `<Text>`, and 66 elements
104
- * × 19 rows × every re-paint adds up.
105
- *
106
- * Spaces are emitted as their own color-less run so we don't burn nodes
107
- * coloring invisible cells.
108
- */
109
- function CassetteLogo({ rows }) {
110
- const colored = useMemo(() => rows.map(colorizeRow), [rows]);
111
- return (React.createElement(Box, { flexDirection: "column" }, colored.map((runs, rowIdx) => (React.createElement(Box, { key: rowIdx }, runs.map((run, runIdx) => (React.createElement(Text, { key: runIdx, color: run.color }, run.chars))))))));
112
- }
113
- // Logo coloring mode:
114
- // "solid" — every glyph in the brand orange (STRUCTURE). Current default.
115
- // "random" — each glyph gets a random palette color (the original look).
116
- // Flip this to "random" to bring back the multicolor cassette.
117
- const LOGO_COLOR_MODE = "solid";
118
- function glyphColor() {
119
- return LOGO_COLOR_MODE === "solid"
120
- ? STRUCTURE
121
- : PALETTE[Math.floor(Math.random() * PALETTE.length)];
122
- }
123
- function colorizeRow(row) {
124
- const runs = [];
125
- for (const ch of row) {
126
- // Spaces don't need coloring — collapse them into uncolored runs so we
127
- // don't allocate a color per blank cell.
128
- const color = ch === " " ? undefined : glyphColor();
129
- const tail = runs[runs.length - 1];
130
- if (tail && tail.color === color) {
131
- tail.chars += ch;
132
- }
133
- else {
134
- runs.push({ color, chars: ch });
135
- }
136
- }
137
- return runs;
138
- }
139
- function MenuRow({ item, active }) {
140
- // ASCII ">" is guaranteed single-cell. The unicode ▶ glyph renders
141
- // double-wide in many terminal fonts, which made the inactive rows shift
142
- // every time the user moved the selection. Using a fixed two-char prefix
143
- // ("> " or " ") keeps every row anchored at the same column.
144
- return (React.createElement(Box, null,
145
- React.createElement(Text, { color: active ? CURRENT : undefined, bold: active }, active ? "> " : " "),
146
- React.createElement(Text, { color: STRUCTURE }, `[${item.hotkey}]`),
147
- React.createElement(Text, null, " "),
148
- React.createElement(Text, { color: active ? CURRENT : undefined, bold: active }, item.label.padEnd(18, " ")),
149
- React.createElement(Text, { color: MUTED }, item.hint)));
150
- }
151
- export function shouldShowSplash() {
152
- if (process.env["LINER_NO_SPLASH"])
153
- return false;
154
- if (!process.stdout.isTTY)
155
- return false;
156
- // Narrow terminals (< 60 cols) can't render the big-text wordmark well —
157
- // skip rather than show a clipped logo.
158
- const cols = process.stdout.columns ?? 80;
159
- if (cols < 60)
160
- return false;
161
- return true;
162
- }
163
- //# sourceMappingURL=BootSplash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BootSplash.js","sourceRoot":"","sources":["../../src/screens/BootSplash.tsx"],"names":[],"mappings":"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"}