@jinion/cli 0.0.0-stage → 0.3.491

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 (171) hide show
  1. package/bin/jinion.js +4 -0
  2. package/dist/app/activity.js +50 -0
  3. package/dist/app/activity.js.map +1 -0
  4. package/dist/app/announcements.js +21 -0
  5. package/dist/app/announcements.js.map +1 -0
  6. package/dist/app/api.js +26 -0
  7. package/dist/app/api.js.map +1 -0
  8. package/dist/app/app.js +91 -0
  9. package/dist/app/app.js.map +1 -0
  10. package/dist/app/aside.js +52 -0
  11. package/dist/app/aside.js.map +1 -0
  12. package/dist/app/dialogs.js +43 -0
  13. package/dist/app/dialogs.js.map +1 -0
  14. package/dist/app/keys.js +79 -0
  15. package/dist/app/keys.js.map +1 -0
  16. package/dist/app/prompt-area.js +56 -0
  17. package/dist/app/prompt-area.js.map +1 -0
  18. package/dist/app/shortcuts.js +31 -0
  19. package/dist/app/shortcuts.js.map +1 -0
  20. package/dist/app/sidebar.js +50 -0
  21. package/dist/app/sidebar.js.map +1 -0
  22. package/dist/app/status-line.js +23 -0
  23. package/dist/app/status-line.js.map +1 -0
  24. package/dist/app/task-line.js +19 -0
  25. package/dist/app/task-line.js.map +1 -0
  26. package/dist/app/use-screen.js +24 -0
  27. package/dist/app/use-screen.js.map +1 -0
  28. package/dist/app/views.js +62 -0
  29. package/dist/app/views.js.map +1 -0
  30. package/dist/main.js +122 -0
  31. package/dist/main.js.map +1 -0
  32. package/dist/panels/account/account-picker.js +118 -0
  33. package/dist/panels/account/account-picker.js.map +1 -0
  34. package/dist/panels/account/describe.js +14 -0
  35. package/dist/panels/account/describe.js.map +1 -0
  36. package/dist/panels/account/sign-in-view.js +8 -0
  37. package/dist/panels/account/sign-in-view.js.map +1 -0
  38. package/dist/panels/account/use-sign-in.js +46 -0
  39. package/dist/panels/account/use-sign-in.js.map +1 -0
  40. package/dist/panels/context.js +55 -0
  41. package/dist/panels/context.js.map +1 -0
  42. package/dist/panels/diff/change-list.js +48 -0
  43. package/dist/panels/diff/change-list.js.map +1 -0
  44. package/dist/panels/diff/current-view.js +47 -0
  45. package/dist/panels/diff/current-view.js.map +1 -0
  46. package/dist/panels/diff/diff-panel.js +22 -0
  47. package/dist/panels/diff/diff-panel.js.map +1 -0
  48. package/dist/panels/diff/file-diff.js +19 -0
  49. package/dist/panels/diff/file-diff.js.map +1 -0
  50. package/dist/panels/diff/views.js +29 -0
  51. package/dist/panels/diff/views.js.map +1 -0
  52. package/dist/panels/feedback.js +67 -0
  53. package/dist/panels/feedback.js.map +1 -0
  54. package/dist/panels/help.js +79 -0
  55. package/dist/panels/help.js.map +1 -0
  56. package/dist/panels/mcp.js +129 -0
  57. package/dist/panels/mcp.js.map +1 -0
  58. package/dist/panels/memory.js +55 -0
  59. package/dist/panels/memory.js.map +1 -0
  60. package/dist/panels/mode.js +36 -0
  61. package/dist/panels/mode.js.map +1 -0
  62. package/dist/panels/model.js +20 -0
  63. package/dist/panels/model.js.map +1 -0
  64. package/dist/panels/onboarding/onboarding-panel.js +56 -0
  65. package/dist/panels/onboarding/onboarding-panel.js.map +1 -0
  66. package/dist/panels/onboarding/use-onboarding.js +65 -0
  67. package/dist/panels/onboarding/use-onboarding.js.map +1 -0
  68. package/dist/panels/profile.js +31 -0
  69. package/dist/panels/profile.js.map +1 -0
  70. package/dist/panels/resume.js +52 -0
  71. package/dist/panels/resume.js.map +1 -0
  72. package/dist/panels/rewind/changes.js +20 -0
  73. package/dist/panels/rewind/changes.js.map +1 -0
  74. package/dist/panels/rewind/rewind-panel.js +93 -0
  75. package/dist/panels/rewind/rewind-panel.js.map +1 -0
  76. package/dist/panels/sign-in/sign-in-panel.js +56 -0
  77. package/dist/panels/sign-in/sign-in-panel.js.map +1 -0
  78. package/dist/panels/sign-in/use-jinion-sign-in.js +69 -0
  79. package/dist/panels/sign-in/use-jinion-sign-in.js.map +1 -0
  80. package/dist/panels/statusline.js +94 -0
  81. package/dist/panels/statusline.js.map +1 -0
  82. package/dist/panels/tasks/output.js +23 -0
  83. package/dist/panels/tasks/output.js.map +1 -0
  84. package/dist/panels/tasks/task-output.js +29 -0
  85. package/dist/panels/tasks/task-output.js.map +1 -0
  86. package/dist/panels/tasks/tasks-panel.js +75 -0
  87. package/dist/panels/tasks/tasks-panel.js.map +1 -0
  88. package/dist/panels/terminal-setup.js +41 -0
  89. package/dist/panels/terminal-setup.js.map +1 -0
  90. package/dist/panels/usage/section.js +16 -0
  91. package/dist/panels/usage/section.js.map +1 -0
  92. package/dist/panels/usage/stats-view.js +52 -0
  93. package/dist/panels/usage/stats-view.js.map +1 -0
  94. package/dist/panels/usage/usage-panel.js +68 -0
  95. package/dist/panels/usage/usage-panel.js.map +1 -0
  96. package/dist/panels/usage/usage-view.js +51 -0
  97. package/dist/panels/usage/usage-view.js.map +1 -0
  98. package/dist/prompt/attachments.js +91 -0
  99. package/dist/prompt/attachments.js.map +1 -0
  100. package/dist/prompt/draft.js +24 -0
  101. package/dist/prompt/draft.js.map +1 -0
  102. package/dist/prompt/images.js +84 -0
  103. package/dist/prompt/images.js.map +1 -0
  104. package/dist/prompt/pasted-path.js +19 -0
  105. package/dist/prompt/pasted-path.js.map +1 -0
  106. package/dist/prompt/use-prompt.js +62 -0
  107. package/dist/prompt/use-prompt.js.map +1 -0
  108. package/dist/serve.js +38 -0
  109. package/dist/serve.js.map +1 -0
  110. package/dist/state/session.js +91 -0
  111. package/dist/state/session.js.map +1 -0
  112. package/dist/status/data.js +39 -0
  113. package/dist/status/data.js.map +1 -0
  114. package/dist/status/git.js +18 -0
  115. package/dist/status/git.js.map +1 -0
  116. package/dist/status/items.js +8 -0
  117. package/dist/status/items.js.map +1 -0
  118. package/dist/status/line.js +25 -0
  119. package/dist/status/line.js.map +1 -0
  120. package/dist/status/saved.js +8 -0
  121. package/dist/status/saved.js.map +1 -0
  122. package/dist/status/segment.js +2 -0
  123. package/dist/status/segment.js.map +1 -0
  124. package/dist/status/segments/conversation.js +71 -0
  125. package/dist/status/segments/conversation.js.map +1 -0
  126. package/dist/status/segments/git.js +33 -0
  127. package/dist/status/segments/git.js.map +1 -0
  128. package/dist/status/segments/identity.js +71 -0
  129. package/dist/status/segments/identity.js.map +1 -0
  130. package/dist/status/segments/index.js +27 -0
  131. package/dist/status/segments/index.js.map +1 -0
  132. package/dist/status/segments/usage.js +61 -0
  133. package/dist/status/segments/usage.js.map +1 -0
  134. package/dist/terminal/apple-terminal.js +68 -0
  135. package/dist/terminal/apple-terminal.js.map +1 -0
  136. package/dist/ui/banner.js +24 -0
  137. package/dist/ui/banner.js.map +1 -0
  138. package/dist/ui/entries/changes-card.js +27 -0
  139. package/dist/ui/entries/changes-card.js.map +1 -0
  140. package/dist/ui/entries/entry-view.js +82 -0
  141. package/dist/ui/entries/entry-view.js.map +1 -0
  142. package/dist/ui/entries/status-entries.js +33 -0
  143. package/dist/ui/entries/status-entries.js.map +1 -0
  144. package/dist/ui/entries/tools/agent-view.js +39 -0
  145. package/dist/ui/entries/tools/agent-view.js.map +1 -0
  146. package/dist/ui/entries/tools/mcp-view.js +10 -0
  147. package/dist/ui/entries/tools/mcp-view.js.map +1 -0
  148. package/dist/ui/entries/tools/result-preview.js +19 -0
  149. package/dist/ui/entries/tools/result-preview.js.map +1 -0
  150. package/dist/ui/entries/tools/search.js +42 -0
  151. package/dist/ui/entries/tools/search.js.map +1 -0
  152. package/dist/ui/entries/tools/shell-footer.js +36 -0
  153. package/dist/ui/entries/tools/shell-footer.js.map +1 -0
  154. package/dist/ui/entries/tools/tool-view.js +47 -0
  155. package/dist/ui/entries/tools/tool-view.js.map +1 -0
  156. package/dist/ui/entries/tools/web.js +41 -0
  157. package/dist/ui/entries/tools/web.js.map +1 -0
  158. package/dist/ui/modes.js +13 -0
  159. package/dist/ui/modes.js.map +1 -0
  160. package/dist/ui/task-marks.js +7 -0
  161. package/dist/ui/task-marks.js.map +1 -0
  162. package/dist/ui/use-async.js +17 -0
  163. package/dist/ui/use-async.js.map +1 -0
  164. package/dist/ui/use-pager.js +25 -0
  165. package/dist/ui/use-pager.js.map +1 -0
  166. package/dist/ui/use-project-files.js +18 -0
  167. package/dist/ui/use-project-files.js.map +1 -0
  168. package/dist/ui/use-workdir.js +9 -0
  169. package/dist/ui/use-workdir.js.map +1 -0
  170. package/package.json +34 -3
  171. package/README.md +0 -3
@@ -0,0 +1,36 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useAnimation } from '@jinion/tui';
3
+ import { useAtomValue } from 'jotai';
4
+ import { tasksAtom } from '../../../state/session.js';
5
+ import { preciseSeconds } from '@jinion/core/lib/format';
6
+ export function ShellFooter({ entry }) {
7
+ const running = entry.status === 'running';
8
+ useAnimation({ interval: 100, isActive: running });
9
+ if (entry.run.name !== 'bash')
10
+ return null;
11
+ if (entry.run.result?.background)
12
+ return _jsx(BackgroundState, { id: entry.run.result.background });
13
+ const { timeoutMs } = entry.run.input;
14
+ const timeout = timeoutMs === undefined ? '' : ` | Timeout: ${preciseSeconds(timeoutMs)}`;
15
+ if (running && entry.waiting)
16
+ return _jsxs(_Fragment, { children: ["[Waiting for your approval", timeout, "]"] });
17
+ // A command asked about runs from when it was allowed.
18
+ const started = entry.approvedAt ?? entry.startedAt;
19
+ if (running)
20
+ return _jsxs(_Fragment, { children: ["[Running: ", preciseSeconds(Date.now() - started), timeout, "]"] });
21
+ const took = entry.approvedAt
22
+ ? (entry.endedAt ?? Date.now()) - entry.approvedAt
23
+ : (entry.run.result?.wallMs ?? (entry.endedAt ?? Date.now()) - started);
24
+ const wall = `Wall: ${preciseSeconds(took)}`;
25
+ if (entry.status === 'cancelled')
26
+ return _jsxs(_Fragment, { children: ["[Cancelled | ", wall, "]"] });
27
+ const exitCode = entry.run.result?.exitCode;
28
+ return (_jsxs(_Fragment, { children: ["[", exitCode ? `Exit: ${exitCode} | ` : '', wall, timeout, "]"] }));
29
+ }
30
+ function BackgroundState({ id }) {
31
+ const task = useAtomValue(tasksAtom).find((candidate) => candidate.id === id);
32
+ if (!task || task.status === 'running')
33
+ return _jsx(_Fragment, { children: "[In the background | ctrl+t to see it]" });
34
+ return _jsxs(_Fragment, { children: ["[In the background | ", task.status === 'completed' ? 'done' : task.status, "]"] });
35
+ }
36
+ //# sourceMappingURL=shell-footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-footer.js","sourceRoot":"","sources":["../../../../src/ui/entries/tools/shell-footer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAwB;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IAE3C,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU;QAAE,OAAO,KAAC,eAAe,IAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,GAAI,CAAC;IAE9F,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1F,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,4DAA6B,OAAO,SAAK,CAAC;IAE/E,uDAAuD;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,CAAC;IACpD,IAAI,OAAO;QAAE,OAAO,4CAAa,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,SAAK,CAAC;IAEpF,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU;QAC3B,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU;QAClD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;IAE1E,MAAM,IAAI,GAAG,SAAS,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,+CAAgB,IAAI,SAAK,CAAC;IAEnE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAE5C,OAAO,CACL,mCACI,QAAQ,CAAC,CAAC,CAAC,SAAS,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,EACvC,IAAI,EACJ,OAAO,SACP,CACJ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,EAAE,EAAkB;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,uEAA2C,CAAC;IAE3F,OAAO,uDAAwB,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,SAAK,CAAC;AACzF,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Frame, Markdown, printable, Text, toneOf, useTheme, useView } from '@jinion/tui';
3
+ import { AskResult, EditBlock, ShellBlock, TodoBlock, ToolLine } from '@jinion/tui/chat';
4
+ import { AgentView } from './agent-view.js';
5
+ import { MEMORY_VERBS } from '@jinion/core/agent/call-summary';
6
+ import { McpView } from './mcp-view.js';
7
+ import { GlobView, GrepView, ReadView } from './search.js';
8
+ import { ShellFooter } from './shell-footer.js';
9
+ import { FetchView, SearchView } from './web.js';
10
+ export function ToolView({ entry, live }) {
11
+ const theme = useTheme();
12
+ const { expanded } = useView();
13
+ const { run, status } = entry;
14
+ switch (run.name) {
15
+ case 'read':
16
+ return _jsx(ReadView, { run: run, status: status });
17
+ case 'grep':
18
+ return _jsx(GrepView, { run: run, status: status });
19
+ case 'glob':
20
+ return _jsx(GlobView, { run: run, status: status });
21
+ case 'bash':
22
+ return (_jsx(ShellBlock, { command: run.input.command, output: entry.output, status: status, footer: _jsx(ShellFooter, { entry: entry }),
23
+ // Open to follow while the turn runs, down to its line count once it is over.
24
+ folded: !live && !expanded && status !== 'running' }));
25
+ case 'edit':
26
+ return _jsx(EditBlock, { path: run.input.path, patch: run.result?.patch ?? run.input.patch, status: status, verb: run.input.created ? 'Write' : 'Edit' });
27
+ case 'todo':
28
+ return _jsx(TodoBlock, { groups: run.input.groups, status: status });
29
+ case 'ask':
30
+ return _jsx(AskResult, { questions: run.input.questions, answers: run.result?.answers ?? [], cancelled: status === 'cancelled' });
31
+ case 'memory':
32
+ return _jsx(ToolLine, { status: status, name: MEMORY_VERBS[run.input.action], detail: _jsx(Text, { color: theme.muted, children: printable(run.input.detail) }) });
33
+ case 'plan':
34
+ return (_jsx(Frame, { title: _jsx(Text, { bold: true, children: "Plan" }), tone: toneOf(status), lead: 1, children: _jsx(Markdown, { text: run.input.plan }) }));
35
+ case 'fetch':
36
+ return _jsx(FetchView, { run: run, status: status, output: entry.output });
37
+ case 'search':
38
+ return _jsx(SearchView, { run: run, status: status });
39
+ case 'mcp':
40
+ return _jsx(McpView, { run: run, status: status, output: entry.output });
41
+ case 'other':
42
+ return (_jsx(ToolLine, { status: status, name: run.input.title, detail: run.input.detail && _jsx(Text, { color: theme.muted, children: printable(run.input.detail) }) }));
43
+ case 'agent':
44
+ return _jsx(AgentView, { entry: entry });
45
+ }
46
+ }
47
+ //# sourceMappingURL=tool-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-view.js","sourceRoot":"","sources":["../../../../src/ui/entries/tools/tool-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ExpandHint, printable, Text, useTheme, useView } from '@jinion/tui';
3
+ import { ToolLine } from '@jinion/tui/chat';
4
+ import { bytes, elapsed, plural } from '@jinion/core/lib/format';
5
+ import { previewTree } from './result-preview.js';
6
+ export const PREVIEW_HITS = 5;
7
+ export function FetchView({ run, status, output }) {
8
+ const theme = useTheme();
9
+ const { bytes: size, code, codeText } = run.result ?? {};
10
+ const received = [size === undefined ? '' : bytes(size), [code, codeText].filter(Boolean).join(' ')].filter(Boolean).join(' - ');
11
+ return (_jsx(ToolLine, { status: status, name: "Fetch:", detail: _jsxs(Text, { children: [_jsx(Text, { color: theme.code, children: printable(run.input.url) }), received && _jsxs(Text, { color: theme.muted, children: [" ", received] })] }), tree: previewTree(output) }));
12
+ }
13
+ export function SearchView({ run, status }) {
14
+ const theme = useTheme();
15
+ const { expanded } = useView();
16
+ const hits = run.result?.hits ?? [];
17
+ const shown = expanded ? hits : hits.slice(0, PREVIEW_HITS);
18
+ const tree = shown.map((hit) => ({
19
+ label: (_jsxs(Text, { wrap: "truncate-end", children: [printable(hit.title || hit.url), " ", _jsx(Text, { color: theme.muted, children: host(hit.url) })] })),
20
+ }));
21
+ if (hits.length > shown.length)
22
+ tree.push({ label: _jsx(ExpandHint, { children: `+${plural(hits.length - shown.length, 'result')}` }) });
23
+ return (_jsx(ToolLine, { status: status, name: "Web Search:", detail: _jsxs(Text, { children: [_jsxs(Text, { color: theme.code, children: ["\"", printable(run.input.query), "\""] }), run.result && _jsxs(Text, { color: theme.muted, children: [" ", searchSummary(run.result)] })] }), tree: tree }));
24
+ }
25
+ function searchSummary({ hits, searches, durationMs }) {
26
+ const parts = [plural(hits.length, 'result')];
27
+ if (searches !== undefined && searches > 1)
28
+ parts.unshift(plural(searches, 'search', 'searches'));
29
+ if (durationMs !== undefined)
30
+ parts.push(elapsed(durationMs));
31
+ return parts.join(' - ');
32
+ }
33
+ function host(url) {
34
+ try {
35
+ return new URL(url).hostname.replace(/^www\./, '');
36
+ }
37
+ catch {
38
+ return url;
39
+ }
40
+ }
41
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/ui/entries/tools/web.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Auto stands out the most, since it acts on its own; Debug has the color of what it is after. */
2
+ export function modeColor(theme, mode) {
3
+ if (mode === 'auto')
4
+ return theme.warning;
5
+ if (mode === 'debug')
6
+ return theme.error;
7
+ if (mode === 'plan')
8
+ return theme.code;
9
+ if (mode === 'edits')
10
+ return theme.accent;
11
+ return theme.muted;
12
+ }
13
+ //# sourceMappingURL=modes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.js","sourceRoot":"","sources":["../../src/ui/modes.ts"],"names":[],"mappings":"AAGA,mGAAmG;AACnG,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,IAAe;IACrD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAC1C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC;IACzC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACvC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IAE1C,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const TASK_MARKS = {
2
+ running: 'running',
3
+ completed: 'done',
4
+ failed: 'error',
5
+ stopped: 'cancelled',
6
+ };
7
+ //# sourceMappingURL=task-marks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-marks.js","sourceRoot":"","sources":["../../src/ui/task-marks.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,WAAW;CACrB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { errorMessage } from '@jinion/core/lib/errors';
3
+ const PENDING = { state: 'pending' };
4
+ /** An answer that comes after the next load is dropped; a load that returns nothing stays pending. */
5
+ export function useAsync(load, deps) {
6
+ const [result, setResult] = useState(PENDING);
7
+ useEffect(() => {
8
+ let current = true;
9
+ setResult(PENDING);
10
+ load()?.then((value) => current && setResult({ state: 'done', value }), (error) => current && setResult({ state: 'failed', error: errorMessage(error) }));
11
+ return () => {
12
+ current = false;
13
+ };
14
+ }, deps);
15
+ return result;
16
+ }
17
+ //# sourceMappingURL=use-async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-async.js","sourceRoot":"","sources":["../../src/ui/use-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAW,CAAC;AAE9C,sGAAsG;AACtG,MAAM,UAAU,QAAQ,CAAI,IAAkC,EAAE,IAAe;IAC7E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAW,OAAO,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,SAAS,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,EAAE,EAAE,IAAI,CACV,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EACzD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAC1F,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { useState } from 'react';
2
+ import { useWindowSize } from '@jinion/tui';
3
+ export const PAGER_HINTS = [
4
+ ['Up/Down', 'scroll'],
5
+ ['PgUp/PgDn', 'page'],
6
+ ];
7
+ export function usePager(lines, { chrome, follow = false }) {
8
+ const { rows } = useWindowSize();
9
+ // `undefined` follows the end.
10
+ const [top, setTop] = useState(follow ? undefined : 0);
11
+ const view = Math.max(3, rows - chrome);
12
+ const last = Math.max(0, lines - view);
13
+ const shown = Math.min(top ?? last, last);
14
+ const range = lines > view ? `lines ${shown + 1}-${Math.min(lines, shown + view)} of ${lines}` : undefined;
15
+ const scroll = (key) => {
16
+ const step = key.pageDown ? view : key.pageUp ? -view : key.downArrow ? 1 : key.upArrow ? -1 : 0;
17
+ if (!step)
18
+ return false;
19
+ const next = Math.min(last, Math.max(0, shown + step));
20
+ setTop(follow && next >= last ? undefined : next);
21
+ return true;
22
+ };
23
+ return { top: shown, view, scroll, range };
24
+ }
25
+ //# sourceMappingURL=use-pager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-pager.js","sourceRoot":"","sources":["../../src/ui/use-pager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AAOpE,MAAM,CAAC,MAAM,WAAW,GAAc;IACpC,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,WAAW,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAgB;IAC9E,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;IAEjC,+BAA+B;IAC/B,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAqB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3G,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { useApi } from '../app/api.js';
3
+ import { useWorkdir } from './use-workdir.js';
4
+ /** The files of the folder the shown session works in, read again each time `refresh` changes. */
5
+ export function useProjectFiles(refresh) {
6
+ const api = useApi();
7
+ const folder = useWorkdir();
8
+ const [files, setFiles] = useState([]);
9
+ useEffect(() => {
10
+ let current = true;
11
+ api.inSession('files/list', {}).then((listed) => current && setFiles(listed), () => { });
12
+ return () => {
13
+ current = false;
14
+ };
15
+ }, [folder, refresh]);
16
+ return files;
17
+ }
18
+ //# sourceMappingURL=use-project-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-files.js","sourceRoot":"","sources":["../../src/ui/use-project-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,kGAAkG;AAClG,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAClC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,EACvC,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { useAtomValue } from 'jotai';
2
+ import { useApi } from '../app/api.js';
3
+ import { worktreeAtom } from '../state/session.js';
4
+ /** Where the conversation works: its worktree, or the project. */
5
+ export function useWorkdir() {
6
+ const { initialized } = useApi();
7
+ return useAtomValue(worktreeAtom)?.folder ?? initialized.info.cwd;
8
+ }
9
+ //# sourceMappingURL=use-workdir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-workdir.js","sourceRoot":"","sources":["../../src/ui/use-workdir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,kEAAkE;AAClE,MAAM,UAAU,UAAU;IACxB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;IAEjC,OAAO,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACpE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,37 @@
1
1
  {
2
2
  "name": "@jinion/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.3.491",
4
+ "description": "Jinion coding agent",
5
+ "license": "MIT",
6
+ "homepage": "https://jinion.co",
7
+ "type": "module",
8
+ "engines": {
9
+ "node": ">=22"
10
+ },
11
+ "bin": {
12
+ "jinion": "./bin/jinion.js"
13
+ },
14
+ "files": [
15
+ "bin",
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "jotai": "^3.0.1",
20
+ "react": "^19.3.0",
21
+ "@jinion/core": "0.2.1",
22
+ "@jinion/tui": "0.0.6"
23
+ },
24
+ "devDependencies": {
25
+ "@types/react": "^19.3.0",
26
+ "tsx": "^4.23.15",
27
+ "vitest": "^5.0.3"
28
+ },
29
+ "scripts": {
30
+ "dev": "tsx --tsconfig ../../tsconfig.json --conditions=development src/main.tsx",
31
+ "build": "tsc -p tsconfig.build.json",
32
+ "start": "node bin/jinion.js",
33
+ "typecheck": "tsc",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest"
36
+ }
6
37
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.