@marifold/tui 0.60.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 (104) hide show
  1. package/LICENSE +674 -0
  2. package/dist/core/appState.d.ts +158 -0
  3. package/dist/core/appState.d.ts.map +1 -0
  4. package/dist/core/appState.js +167 -0
  5. package/dist/core/appState.js.map +1 -0
  6. package/dist/core/commands.d.ts +70 -0
  7. package/dist/core/commands.d.ts.map +1 -0
  8. package/dist/core/commands.js +227 -0
  9. package/dist/core/commands.js.map +1 -0
  10. package/dist/core/displayPaths.d.ts +5 -0
  11. package/dist/core/displayPaths.d.ts.map +1 -0
  12. package/dist/core/displayPaths.js +14 -0
  13. package/dist/core/displayPaths.js.map +1 -0
  14. package/dist/core/eventView.d.ts +10 -0
  15. package/dist/core/eventView.d.ts.map +1 -0
  16. package/dist/core/eventView.js +77 -0
  17. package/dist/core/eventView.js.map +1 -0
  18. package/dist/core/inputGrammar.d.ts +29 -0
  19. package/dist/core/inputGrammar.d.ts.map +1 -0
  20. package/dist/core/inputGrammar.js +30 -0
  21. package/dist/core/inputGrammar.js.map +1 -0
  22. package/dist/core/skills.d.ts +2 -0
  23. package/dist/core/skills.d.ts.map +1 -0
  24. package/dist/core/skills.js +2 -0
  25. package/dist/core/skills.js.map +1 -0
  26. package/dist/core/transcriptWindow.d.ts.map +1 -0
  27. package/dist/core/transcriptWindow.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/runTui.d.ts +18 -0
  33. package/dist/runTui.d.ts.map +1 -0
  34. package/dist/runTui.js +146 -0
  35. package/dist/runTui.js.map +1 -0
  36. package/dist/ui/App.d.ts +23 -0
  37. package/dist/ui/App.d.ts.map +1 -0
  38. package/dist/ui/App.js +991 -0
  39. package/dist/ui/App.js.map +1 -0
  40. package/dist/ui/ApprovalModal.d.ts +12 -0
  41. package/dist/ui/ApprovalModal.d.ts.map +1 -0
  42. package/dist/ui/ApprovalModal.js +62 -0
  43. package/dist/ui/ApprovalModal.js.map +1 -0
  44. package/dist/ui/Header.d.ts +12 -0
  45. package/dist/ui/Header.d.ts.map +1 -0
  46. package/dist/ui/Header.js +15 -0
  47. package/dist/ui/Header.js.map +1 -0
  48. package/dist/ui/InfoPanel.d.ts +11 -0
  49. package/dist/ui/InfoPanel.d.ts.map +1 -0
  50. package/dist/ui/InfoPanel.js +16 -0
  51. package/dist/ui/InfoPanel.js.map +1 -0
  52. package/dist/ui/InputBox.d.ts +31 -0
  53. package/dist/ui/InputBox.d.ts.map +1 -0
  54. package/dist/ui/InputBox.js +410 -0
  55. package/dist/ui/InputBox.js.map +1 -0
  56. package/dist/ui/Markdown.d.ts +12 -0
  57. package/dist/ui/Markdown.d.ts.map +1 -0
  58. package/dist/ui/Markdown.js +111 -0
  59. package/dist/ui/Markdown.js.map +1 -0
  60. package/dist/ui/QuestionModal.d.ts +11 -0
  61. package/dist/ui/QuestionModal.d.ts.map +1 -0
  62. package/dist/ui/QuestionModal.js +211 -0
  63. package/dist/ui/QuestionModal.js.map +1 -0
  64. package/dist/ui/RunStatus.d.ts +17 -0
  65. package/dist/ui/RunStatus.d.ts.map +1 -0
  66. package/dist/ui/RunStatus.js +46 -0
  67. package/dist/ui/RunStatus.js.map +1 -0
  68. package/dist/ui/SelectList.d.ts +18 -0
  69. package/dist/ui/SelectList.d.ts.map +1 -0
  70. package/dist/ui/SelectList.js +54 -0
  71. package/dist/ui/SelectList.js.map +1 -0
  72. package/dist/ui/Spinner.d.ts +6 -0
  73. package/dist/ui/Spinner.d.ts.map +1 -0
  74. package/dist/ui/Spinner.js +14 -0
  75. package/dist/ui/Spinner.js.map +1 -0
  76. package/dist/ui/StatusLine.d.ts +6 -0
  77. package/dist/ui/StatusLine.d.ts.map +1 -0
  78. package/dist/ui/StatusLine.js +32 -0
  79. package/dist/ui/StatusLine.js.map +1 -0
  80. package/dist/ui/Transcript.d.ts +17 -0
  81. package/dist/ui/Transcript.d.ts.map +1 -0
  82. package/dist/ui/Transcript.js +58 -0
  83. package/dist/ui/Transcript.js.map +1 -0
  84. package/dist/ui/appHelpers.d.ts +16 -0
  85. package/dist/ui/appHelpers.d.ts.map +1 -0
  86. package/dist/ui/appHelpers.js +59 -0
  87. package/dist/ui/appHelpers.js.map +1 -0
  88. package/dist/ui/text.d.ts +7 -0
  89. package/dist/ui/text.d.ts.map +1 -0
  90. package/dist/ui/text.js +16 -0
  91. package/dist/ui/text.js.map +1 -0
  92. package/dist/ui/theme.d.ts +12 -0
  93. package/dist/ui/theme.d.ts.map +1 -0
  94. package/dist/ui/theme.js +12 -0
  95. package/dist/ui/theme.js.map +1 -0
  96. package/dist/ui/useResizing.d.ts +14 -0
  97. package/dist/ui/useResizing.d.ts.map +1 -0
  98. package/dist/ui/useResizing.js +37 -0
  99. package/dist/ui/useResizing.js.map +1 -0
  100. package/dist/ui/useTerminalSize.d.ts +8 -0
  101. package/dist/ui/useTerminalSize.d.ts.map +1 -0
  102. package/dist/ui/useTerminalSize.js +23 -0
  103. package/dist/ui/useTerminalSize.js.map +1 -0
  104. package/package.json +32 -0
@@ -0,0 +1,5 @@
1
+ /** Compress an absolute path under $HOME to a leading `~` for display, the
2
+ * inverse of core's `expandHome`. Returns the input unchanged when it is not
3
+ * inside the home directory. */
4
+ export declare function tildify(p: string): string;
5
+ //# sourceMappingURL=displayPaths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayPaths.d.ts","sourceRoot":"","sources":["../../src/core/displayPaths.ts"],"names":[],"mappings":"AAGA;;gCAEgC;AAChC,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKzC"}
@@ -0,0 +1,14 @@
1
+ import * as os from 'os';
2
+ import * as path from 'path';
3
+ /** Compress an absolute path under $HOME to a leading `~` for display, the
4
+ * inverse of core's `expandHome`. Returns the input unchanged when it is not
5
+ * inside the home directory. */
6
+ export function tildify(p) {
7
+ const home = os.homedir();
8
+ if (p === home)
9
+ return '~';
10
+ if (p.startsWith(home + path.sep))
11
+ return `~${p.slice(home.length)}`;
12
+ return p;
13
+ }
14
+ //# sourceMappingURL=displayPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayPaths.js","sourceRoot":"","sources":["../../src/core/displayPaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;gCAEgC;AAChC,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACrE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AgentEvent } from '@marifold/core';
2
+ import type { TranscriptItemData } from './appState.js';
3
+ /**
4
+ * Pure map from an AgentEvent to zero or more transcript items. Status, step,
5
+ * and approval_request events produce no transcript item — they drive the
6
+ * status line and approval modal, handled by the reducer. Keeping this pure
7
+ * lets every event variant be covered without rendering Ink.
8
+ */
9
+ export declare function agentEventToItems(event: AgentEvent): TranscriptItemData[];
10
+ //# sourceMappingURL=eventView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventView.d.ts","sourceRoot":"","sources":["../../src/core/eventView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,kBAAkB,EAAE,CAqEzE"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Pure map from an AgentEvent to zero or more transcript items. Status, step,
3
+ * and approval_request events produce no transcript item — they drive the
4
+ * status line and approval modal, handled by the reducer. Keeping this pure
5
+ * lets every event variant be covered without rendering Ink.
6
+ */
7
+ export function agentEventToItems(event) {
8
+ switch (event.type) {
9
+ case 'plan':
10
+ return [{
11
+ kind: 'plan',
12
+ steps: event.plan.map(step => ({ id: step.id, text: step.text, status: step.status })),
13
+ }];
14
+ case 'text':
15
+ return event.text.trim().length > 0
16
+ ? [{ kind: 'assistant', text: event.text, ...(event.phase === 'progress' ? { muted: true } : {}) }]
17
+ : [];
18
+ case 'reasoning':
19
+ return event.summary.trim().length > 0
20
+ ? [{ kind: 'assistant', text: `Reasoning: ${event.summary}`, muted: true }]
21
+ : [];
22
+ case 'steering':
23
+ // Queued guidance the runner just picked up for the next model turn.
24
+ return [{ kind: 'notice', tone: 'info', text: `Steering applied: ${event.text}` }];
25
+ case 'tool_request':
26
+ return [{
27
+ kind: 'tool',
28
+ tool: event.call.tool,
29
+ toolKind: event.call.kind,
30
+ summary: event.call.summary,
31
+ phase: 'request',
32
+ callId: event.call.id,
33
+ }];
34
+ case 'tool_result':
35
+ // Normally folded onto the request line by the reducer (matched by
36
+ // callId); this item is only used if no matching request is found.
37
+ return [{
38
+ kind: 'tool',
39
+ tool: event.tool,
40
+ summary: event.summary,
41
+ phase: 'result',
42
+ isError: event.isError,
43
+ callId: event.callId,
44
+ }];
45
+ case 'approval_decision':
46
+ // Approvals show in the modal; only surface denials in the transcript.
47
+ return event.approved
48
+ ? []
49
+ : [{
50
+ kind: 'notice',
51
+ tone: 'warn',
52
+ text: `Denied (${event.source})${event.reason ? `: ${event.reason}` : ''}`,
53
+ }];
54
+ case 'user_input_response':
55
+ return [{
56
+ kind: 'notice',
57
+ tone: 'info',
58
+ text: `Answered: ${event.response.answers.map(answer => `${answer.questionId} = ${answer.value}`).join(' · ')}`,
59
+ }];
60
+ case 'verification':
61
+ return [{ kind: 'verification', passed: event.passed, notes: event.notes }];
62
+ case 'error':
63
+ return [{ kind: 'notice', tone: 'error', text: `Error [${event.code}]: ${event.message}` }];
64
+ case 'done':
65
+ // The completion line (with timing/tokens) is emitted by the App once the
66
+ // run's wall-clock and usage are known, so nothing is added here.
67
+ return [];
68
+ case 'status':
69
+ case 'step':
70
+ case 'approval_request':
71
+ case 'user_input_request':
72
+ return [];
73
+ default:
74
+ return [];
75
+ }
76
+ }
77
+ //# sourceMappingURL=eventView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventView.js","sourceRoot":"","sources":["../../src/core/eventView.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Classifies a submitted input line into the three TUI primitives:
3
+ * - `/command [args]` → a deterministic, code-executed command (no model).
4
+ * - `$skill [args]` → invoke a model-backed skill (`$<name>` *is* the run).
5
+ * - plain text → talk to the agent (or chat in `/chat` mode).
6
+ *
7
+ * Pure and renderer-agnostic so it can be unit-tested without Ink.
8
+ */
9
+ export type ParsedInput = {
10
+ kind: 'empty';
11
+ } | {
12
+ kind: 'text';
13
+ text: string;
14
+ } | {
15
+ kind: 'command';
16
+ name: string;
17
+ args: string;
18
+ argv: string[];
19
+ } | {
20
+ kind: 'skill';
21
+ name: string;
22
+ args: string;
23
+ argv: string[];
24
+ };
25
+ /** Split an argument string into whitespace-separated tokens, honoring
26
+ * single/double quotes so `$translate "good morning" ja` parses cleanly. */
27
+ export declare function tokenizeArgs(args: string): string[];
28
+ export declare function parseInput(raw: string): ParsedInput;
29
+ //# sourceMappingURL=inputGrammar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputGrammar.d.ts","sourceRoot":"","sources":["../../src/core/inputGrammar.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAElE;4EAC4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAQnD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAiBnD"}
@@ -0,0 +1,30 @@
1
+ /** Split an argument string into whitespace-separated tokens, honoring
2
+ * single/double quotes so `$translate "good morning" ja` parses cleanly. */
3
+ export function tokenizeArgs(args) {
4
+ const tokens = [];
5
+ const pattern = /"([^"]*)"|'([^']*)'|(\S+)/g;
6
+ let match;
7
+ while ((match = pattern.exec(args)) !== null) {
8
+ tokens.push(match[1] ?? match[2] ?? match[3] ?? '');
9
+ }
10
+ return tokens;
11
+ }
12
+ export function parseInput(raw) {
13
+ const trimmed = raw.trim();
14
+ if (trimmed.length === 0)
15
+ return { kind: 'empty' };
16
+ const prefix = trimmed[0];
17
+ if (prefix === '/' || prefix === '$') {
18
+ // Strip the sigil, then split the head token from the remainder.
19
+ const body = trimmed.slice(1);
20
+ const headMatch = body.match(/^(\S+)\s*([\s\S]*)$/);
21
+ const name = (headMatch?.[1] ?? '').toLowerCase();
22
+ const args = headMatch?.[2] ?? '';
23
+ if (name.length === 0)
24
+ return { kind: 'text', text: trimmed };
25
+ const kind = prefix === '/' ? 'command' : 'skill';
26
+ return { kind, name, args, argv: tokenizeArgs(args) };
27
+ }
28
+ return { kind: 'text', text: trimmed };
29
+ }
30
+ //# sourceMappingURL=inputGrammar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputGrammar.js","sourceRoot":"","sources":["../../src/core/inputGrammar.ts"],"names":[],"mappings":"AAcA;4EAC4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,4BAA4B,CAAC;IAC7C,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,iEAAiE;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { bindSkillArgs, skillUsage } from '@marifold/core';
2
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { bindSkillArgs, skillUsage } from '@marifold/core';
2
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptWindow.d.ts","sourceRoot":"","sources":["../../src/core/transcriptWindow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,cAAc,EAAE,EAC5B,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC/D,gBAAgB,CA4BlB;AAED;2EAC2E;AAC3E,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB1E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptWindow.js","sourceRoot":"","sources":["../../src/core/transcriptWindow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { runTui } from './runTui.js';
2
+ export type { RunTuiOptions } from './runTui.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { runTui } from './runTui.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { LoadedMarifoldConfig } from '@marifold/core';
2
+ export interface RunTuiOptions {
3
+ loadedConfig: LoadedMarifoldConfig;
4
+ /** Profile to launch with; defaults to the configured default profile. */
5
+ profile?: string;
6
+ /** Resume a session: `true` continues the most recent session for the
7
+ * resolved profile; a string continues that specific session id. The prior
8
+ * turns are replayed into the transcript and the next message continues the
9
+ * session's context. */
10
+ resume?: string | boolean;
11
+ }
12
+ /**
13
+ * Launch the Ink TUI. Falls back with a hint when stdout is not a TTY (piped
14
+ * or non-interactive), so `marifold | cat` never tries to drive Ink. When no
15
+ * profile resolves a provider/model, shows a profile picker before launching.
16
+ */
17
+ export declare function runTui(options: RunTuiOptions): Promise<void>;
18
+ //# sourceMappingURL=runTui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTui.d.ts","sourceRoot":"","sources":["../src/runTui.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAA4C,MAAM,gBAAgB,CAAC;AAgBrG,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,oBAAoB,CAAC;IACnC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;4BAGwB;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGlE"}
package/dist/runTui.js ADDED
@@ -0,0 +1,146 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { readFileSync } from 'fs';
3
+ import { Box, render, Text } from 'ink';
4
+ import { MarifoldRuntime } from '@marifold/core';
5
+ import { App } from './ui/App.js';
6
+ import { SelectList } from './ui/SelectList.js';
7
+ /** This package's version, read from its own package.json at runtime so the
8
+ * header banner never drifts from the published version. */
9
+ function readVersion() {
10
+ try {
11
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
12
+ return typeof pkg.version === 'string' ? pkg.version : '0.0.0';
13
+ }
14
+ catch {
15
+ return '0.0.0';
16
+ }
17
+ }
18
+ /**
19
+ * Launch the Ink TUI. Falls back with a hint when stdout is not a TTY (piped
20
+ * or non-interactive), so `marifold | cat` never tries to drive Ink. When no
21
+ * profile resolves a provider/model, shows a profile picker before launching.
22
+ */
23
+ export async function runTui(options) {
24
+ if (!process.stdout.isTTY) {
25
+ process.stderr.write('The marifold TUI needs an interactive terminal. Use `marifold chat` or `marifold agent "<objective>"` for non-interactive use.\n');
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ // Not initialized yet: no config file. Show one clear hint instead of a
30
+ // pointless profile picker that can't resolve a provider/model anyway.
31
+ if (!options.loadedConfig.foundConfig) {
32
+ process.stderr.write('Marifold is not initialized yet. Run `marifold init` to get started.\n');
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ const runtime = new MarifoldRuntime({ loadedConfig: options.loadedConfig });
37
+ try {
38
+ let profile = options.profile;
39
+ let settings = tryResolve(runtime, profile);
40
+ // No resolvable default and no explicit profile: let the user pick one.
41
+ if (!settings && !profile) {
42
+ const profiles = runtime.listProfiles();
43
+ if (profiles.length > 0) {
44
+ profile = await selectProfile(profiles, options.loadedConfig.config.default.profile);
45
+ settings = tryResolve(runtime, profile);
46
+ }
47
+ }
48
+ if (!settings) {
49
+ process.stderr.write('Provider and model are not configured. Run `marifold init` and `marifold model add` first.\n');
50
+ process.exitCode = 1;
51
+ return;
52
+ }
53
+ // Resolve `--resume` to a concrete session before launch. A bare flag picks
54
+ // the most recent session for the resolved profile; an explicit id is looked
55
+ // up directly so a typo starts fresh with a clear message instead of
56
+ // silently creating an orphan session under the bad id. When a session is
57
+ // found, its turns seed the transcript so the prior conversation is shown.
58
+ let resumeSessionId;
59
+ let resumeTranscript;
60
+ if (options.resume !== undefined) {
61
+ const id = typeof options.resume === 'string'
62
+ ? options.resume
63
+ : runtime.listSessions(1, settings.profile, { order: 'recent' })[0]?.id;
64
+ const detail = id ? runtime.getSession(id) : undefined;
65
+ if (detail) {
66
+ resumeSessionId = detail.id;
67
+ resumeTranscript = detail.turns.map(turn => ({ kind: turn.role, text: turn.content }));
68
+ }
69
+ else if (typeof options.resume === 'string') {
70
+ process.stderr.write(`Session not found: ${options.resume}. Starting a new session.\n`);
71
+ }
72
+ else {
73
+ process.stderr.write(`No previous session for profile "${settings.profile}". Starting a new session.\n`);
74
+ }
75
+ }
76
+ const initial = {
77
+ profile: settings.profile,
78
+ displayName: runtime.getProfile(settings.profile).displayName,
79
+ provider: settings.provider,
80
+ model: settings.model,
81
+ think: settings.think,
82
+ mode: settings.mode,
83
+ cwd: process.cwd(),
84
+ version: readVersion(),
85
+ maxContextTokens: settings.maxContextTokens ?? options.loadedConfig.config.default.maxContextTokens,
86
+ ...(resumeSessionId ? { sessionId: resumeSessionId } : {}),
87
+ ...(resumeTranscript ? { transcript: resumeTranscript } : {}),
88
+ };
89
+ // Render inline (like Claude Code / Codex), not in the alternate screen: the
90
+ // banner and transcript live in the terminal's native scrollback, so the
91
+ // conversation stays scrollable, copyable, and survives after exit — and the
92
+ // CLI never takes over the whole terminal. Ink 7 clears its live region on
93
+ // width-decrease (its `resized` handler), so the input area doesn't duplicate
94
+ // on shrink; committed history is left to the terminal's own reflow.
95
+ //
96
+ // Enable bracketed paste so dropped/pasted file paths arrive as one buffered
97
+ // event (Ink coalesces them) instead of fragmented keystrokes — otherwise a
98
+ // long dropped path lands as loose text instead of an `[image #n]` token.
99
+ process.stdout.write('\x1b[?2004h');
100
+ try {
101
+ const app = render(_jsx(App, { runtime: runtime, loadedConfig: options.loadedConfig, initial: initial }), { exitOnCtrlC: false });
102
+ await app.waitUntilExit();
103
+ }
104
+ finally {
105
+ process.stdout.write('\x1b[?2004l');
106
+ }
107
+ }
108
+ finally {
109
+ runtime.close();
110
+ }
111
+ // Force the process to exit. On a programmatic exit (`/exit`, double Ctrl+C),
112
+ // Ink unmounts the React tree but leaves handles ref'd that keep the Node
113
+ // event loop alive — confirmed via getActiveResourcesInfo() to be the stdin
114
+ // TTY (Ink reads it in raw mode) plus a Timeout/Immediate from Ink's output
115
+ // throttle and React's scheduler. None of those are ours to cancel, so without
116
+ // this the CLI hangs instead of returning to the shell. Terminal teardown and
117
+ // runtime.close() have already run above, so exiting here is safe.
118
+ process.exit(process.exitCode ?? 0);
119
+ }
120
+ function tryResolve(runtime, profile) {
121
+ try {
122
+ return runtime.resolveSettings(profile ? { profile } : {});
123
+ }
124
+ catch {
125
+ return undefined;
126
+ }
127
+ }
128
+ /** Render a one-shot Ink picker and resolve to the chosen profile name. */
129
+ function selectProfile(profiles, defaultProfile) {
130
+ return new Promise(resolve => {
131
+ let settled = false;
132
+ const items = profiles.map(profile => ({
133
+ label: profile.name === defaultProfile ? `${profile.name} (default)` : profile.name,
134
+ value: profile.name,
135
+ }));
136
+ const finish = (value) => {
137
+ if (settled)
138
+ return;
139
+ settled = true;
140
+ instance.unmount();
141
+ resolve(value);
142
+ };
143
+ const instance = render(_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "cyan", children: "Select a profile to launch:" }), _jsx(SelectList, { title: "Profiles", items: items, onSelect: finish, onCancel: () => finish(defaultProfile) })] }), { exitOnCtrlC: false });
144
+ });
145
+ }
146
+ //# sourceMappingURL=runTui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTui.js","sourceRoot":"","sources":["../src/runTui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { LoadedMarifoldConfig, MarifoldRuntime } from '@marifold/core';
3
+ import { type Mode, type TranscriptItemData } from '../core/appState.js';
4
+ export interface AppProps {
5
+ runtime: MarifoldRuntime;
6
+ loadedConfig: LoadedMarifoldConfig;
7
+ initial: {
8
+ profile: string;
9
+ displayName?: string;
10
+ provider: string;
11
+ model: string;
12
+ think: boolean;
13
+ mode?: Mode;
14
+ cwd: string;
15
+ version: string;
16
+ latestVersion?: string;
17
+ sessionId?: string;
18
+ maxContextTokens?: number;
19
+ transcript?: TranscriptItemData[];
20
+ };
21
+ }
22
+ export declare function App({ runtime, loadedConfig, initial }: AppProps): React.ReactElement;
23
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAU7F,OAAO,KAAK,EAKV,oBAAoB,EACpB,eAAe,EAMhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAkC,KAAK,IAAI,EAAwC,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAkB/I,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,oBAAoB,CAAC;IACnC,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;KACnC,CAAC;CACH;AAcD,wBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,YAAY,CAs/BpF"}