@relace-ai/jacq 0.1.2-beta.4 → 0.1.2-beta.6

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 (94) hide show
  1. package/dist/actions/messages.d.ts +16 -16
  2. package/dist/actions/messages.js +47 -29
  3. package/dist/actions/messages.js.map +1 -1
  4. package/dist/actions/tasks.d.ts +1 -2
  5. package/dist/actions/tasks.js +8 -8
  6. package/dist/actions/tasks.js.map +1 -1
  7. package/dist/approvalGate.d.ts +42 -0
  8. package/dist/approvalGate.js +140 -0
  9. package/dist/approvalGate.js.map +1 -0
  10. package/dist/approvals.d.ts +21 -0
  11. package/dist/approvals.js +79 -0
  12. package/dist/approvals.js.map +1 -0
  13. package/dist/auth.d.ts +1 -0
  14. package/dist/auth.js +3 -0
  15. package/dist/auth.js.map +1 -1
  16. package/dist/charWidth.d.ts +7 -0
  17. package/dist/charWidth.js +24 -19
  18. package/dist/charWidth.js.map +1 -1
  19. package/dist/clipboard.d.ts +0 -5
  20. package/dist/clipboard.js +0 -5
  21. package/dist/clipboard.js.map +1 -1
  22. package/dist/commands.js +3 -2
  23. package/dist/commands.js.map +1 -1
  24. package/dist/config.d.ts +2 -1
  25. package/dist/config.js +17 -10
  26. package/dist/config.js.map +1 -1
  27. package/dist/connection.d.ts +2 -0
  28. package/dist/connection.js +199 -6
  29. package/dist/connection.js.map +1 -1
  30. package/dist/index.js +196 -34
  31. package/dist/index.js.map +1 -1
  32. package/dist/markdown/parser.js +248 -60
  33. package/dist/markdown/parser.js.map +1 -1
  34. package/dist/markdown/renderer.d.ts +3 -3
  35. package/dist/markdown/renderer.js +254 -108
  36. package/dist/markdown/renderer.js.map +1 -1
  37. package/dist/markdown/types.d.ts +4 -1
  38. package/dist/markdown/types.js.map +1 -1
  39. package/dist/protocol.d.ts +0 -2
  40. package/dist/protocol.js +137 -98
  41. package/dist/protocol.js.map +1 -1
  42. package/dist/renderer.js +4 -0
  43. package/dist/renderer.js.map +1 -1
  44. package/dist/startupAnimation.d.ts +4 -0
  45. package/dist/startupAnimation.js +326 -0
  46. package/dist/startupAnimation.js.map +1 -0
  47. package/dist/state.js +23 -5
  48. package/dist/state.js.map +1 -1
  49. package/dist/styles.js +4 -1
  50. package/dist/styles.js.map +1 -1
  51. package/dist/terminal.d.ts +9 -0
  52. package/dist/terminal.js +15 -0
  53. package/dist/terminal.js.map +1 -1
  54. package/dist/tools/registry.js +138 -13
  55. package/dist/tools/registry.js.map +1 -1
  56. package/dist/types.d.ts +57 -21
  57. package/dist/types.js +3 -1
  58. package/dist/types.js.map +1 -1
  59. package/dist/ui/config.d.ts +6 -0
  60. package/dist/ui/config.js +53 -0
  61. package/dist/ui/config.js.map +1 -0
  62. package/dist/ui/diffViewer.d.ts +9 -0
  63. package/dist/ui/diffViewer.js +320 -0
  64. package/dist/ui/diffViewer.js.map +1 -0
  65. package/dist/ui/index.js +40 -21
  66. package/dist/ui/index.js.map +1 -1
  67. package/dist/ui/input.d.ts +1 -1
  68. package/dist/ui/input.js +40 -15
  69. package/dist/ui/input.js.map +1 -1
  70. package/dist/ui/localCommands.d.ts +8 -0
  71. package/dist/ui/localCommands.js +267 -0
  72. package/dist/ui/localCommands.js.map +1 -0
  73. package/dist/ui/messages.js +195 -93
  74. package/dist/ui/messages.js.map +1 -1
  75. package/dist/ui/primitives.js +2 -1
  76. package/dist/ui/primitives.js.map +1 -1
  77. package/dist/ui/promptInput.js +42 -8
  78. package/dist/ui/promptInput.js.map +1 -1
  79. package/dist/ui/promptPicker.js +3 -4
  80. package/dist/ui/promptPicker.js.map +1 -1
  81. package/dist/ui/resumeTask.d.ts +6 -0
  82. package/dist/ui/resumeTask.js +136 -0
  83. package/dist/ui/resumeTask.js.map +1 -0
  84. package/dist/ui/sessions.js +2 -2
  85. package/dist/ui/sessions.js.map +1 -1
  86. package/dist/ui/welcome.js +22 -35
  87. package/dist/ui/welcome.js.map +1 -1
  88. package/dist/utils/resolvePath.d.ts +10 -0
  89. package/dist/utils/resolvePath.js +24 -0
  90. package/dist/utils/resolvePath.js.map +1 -0
  91. package/package.json +7 -4
  92. package/dist/ui/backgroundTasks.d.ts +0 -7
  93. package/dist/ui/backgroundTasks.js +0 -192
  94. package/dist/ui/backgroundTasks.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolvePath.js","sourceRoot":"","sources":["../../src/utils/resolvePath.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,GAAW;IACtD,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAEhD,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACnB,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC5F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relace-ai/jacq",
3
- "version": "0.1.2-beta.4",
3
+ "version": "0.1.2-beta.6",
4
4
  "description": "TUI coding agent by Relace",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,21 +11,24 @@
11
11
  "dist"
12
12
  ],
13
13
  "engines": {
14
- "node": ">=18.0.0"
14
+ "node": ">=20.0.0"
15
15
  },
16
16
  "scripts": {
17
17
  "build": "tsc",
18
18
  "dev": "tsc && node dist/index.js",
19
+ "dev:local": "JACQ_CONFIG_FILE=../dev/config.local.json npm run dev",
19
20
  "watch": "tsc --watch",
20
21
  "start": "node dist/index.js"
21
22
  },
22
23
  "dependencies": {
24
+ "@pierre/diffs": "^1.0.11",
23
25
  "glob": "^13.0.1",
26
+ "string-width": "^8.1.1",
24
27
  "ws": "^8.18.0"
25
28
  },
26
29
  "devDependencies": {
27
- "typescript": "^5.7.0",
28
30
  "@types/node": "^22.0.0",
29
- "@types/ws": "^8.5.0"
31
+ "@types/ws": "^8.5.0",
32
+ "typescript": "^5.7.0"
30
33
  }
31
34
  }
@@ -1,7 +0,0 @@
1
- /**
2
- * Widgets Component — full-screen draw() API
3
- * Shows deployed interactive widgets and allows opening them in the browser
4
- */
5
- import type { UIComponent } from '../types.js';
6
- declare const backgroundTasks: UIComponent;
7
- export default backgroundTasks;
@@ -1,192 +0,0 @@
1
- /**
2
- * Widgets Component — full-screen draw() API
3
- * Shows deployed interactive widgets and allows opening them in the browser
4
- */
5
- import { drawText, drawHLine } from './primitives.js';
6
- import { markDirty } from '../state.js';
7
- import { connection } from '../connection.js';
8
- import { fetchWidgets, fetchWidgetUrl } from '../protocol.js';
9
- import { exec } from 'child_process';
10
- const MIN_HEIGHT = 10;
11
- const WIDGETS_PER_PAGE = 9;
12
- const backgroundTasks = {
13
- height(state) {
14
- const widgets = state.widgets || [];
15
- const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
16
- const widgetRows = Math.min(widgets.length, WIDGETS_PER_PAGE);
17
- const paginationRow = totalPages > 1 ? 2 : 1;
18
- const contentHeight = 5 + widgetRows + paginationRow;
19
- return Math.max(MIN_HEIGHT, contentHeight);
20
- },
21
- draw(screen, y, state, layout, styles) {
22
- const width = layout.width;
23
- const widgets = state.widgets || [];
24
- const componentHeight = this.height(state);
25
- const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
26
- const currentPage = state.widgetsPage || 0;
27
- const idx = state.widgetsIndex || 0;
28
- // Top separator
29
- drawHLine(screen, 0, y, width, styles.border);
30
- // Title row
31
- if (widgets.length > 0) {
32
- const summary = `${widgets.length} widget${widgets.length === 1 ? '' : 's'}`;
33
- drawText(screen, 2, y + 1, 'Widgets', styles.title);
34
- drawText(screen, width - summary.length - 2, y + 1, summary, styles.dim);
35
- }
36
- else {
37
- drawText(screen, 2, y + 1, 'Widgets', styles.title);
38
- }
39
- // Content
40
- if (!state.widgetsLoaded) {
41
- drawText(screen, 4, y + 3, 'Loading...', styles.dim);
42
- }
43
- else if (widgets.length === 0) {
44
- drawText(screen, 4, y + 3, 'No widgets yet', styles.dim);
45
- }
46
- else {
47
- const pageStart = currentPage * WIDGETS_PER_PAGE;
48
- const pageEnd = Math.min(pageStart + WIDGETS_PER_PAGE, widgets.length);
49
- const pageWidgets = widgets.slice(pageStart, pageEnd);
50
- for (let i = 0; i < pageWidgets.length; i++) {
51
- const widget = pageWidgets[i];
52
- const displayIndex = i + 1;
53
- const isSelected = idx === displayIndex;
54
- const row = y + 3 + i;
55
- const prefix = isSelected ? ' > ' : ' ';
56
- drawText(screen, 0, row, prefix, styles.value);
57
- drawText(screen, 4, row, `${displayIndex}.`, styles.dim);
58
- drawText(screen, 7, row, widget.title || 'Untitled', isSelected ? styles.title : styles.value);
59
- }
60
- // Pagination
61
- if (totalPages > 1) {
62
- const paginationY = y + 3 + pageWidgets.length + 1;
63
- drawText(screen, 2, paginationY, `\u2190 Page ${currentPage + 1}/${totalPages} \u2192`, styles.dim);
64
- }
65
- }
66
- // Bottom separator
67
- const bottomY = y + componentHeight - 2;
68
- drawHLine(screen, 0, bottomY, width, styles.border);
69
- // Hints
70
- const hy = bottomY + 1;
71
- let hx = 2;
72
- const gap = ' ';
73
- if (totalPages > 1) {
74
- drawText(screen, hx, hy, '\u2191\u2193', styles.value);
75
- hx += 2;
76
- drawText(screen, hx, hy, ' navigate', styles.hint);
77
- hx += 9 + gap.length;
78
- drawText(screen, hx, hy, '\u2190\u2192', styles.value);
79
- hx += 2;
80
- drawText(screen, hx, hy, ' page', styles.hint);
81
- hx += 5 + gap.length;
82
- }
83
- else {
84
- drawText(screen, hx, hy, '\u2191\u2193', styles.value);
85
- hx += 2;
86
- drawText(screen, hx, hy, ' navigate', styles.hint);
87
- hx += 9 + gap.length;
88
- }
89
- drawText(screen, hx, hy, 'Enter', styles.value);
90
- hx += 5;
91
- drawText(screen, hx, hy, ' open', styles.hint);
92
- hx += 5 + gap.length;
93
- drawText(screen, hx, hy, '#0-9', styles.value);
94
- hx += 4;
95
- drawText(screen, hx, hy, ' quick', styles.hint);
96
- hx += 6 + gap.length;
97
- drawText(screen, hx, hy, 'Bksp', styles.value);
98
- hx += 4;
99
- drawText(screen, hx, hy, ' delete', styles.hint);
100
- hx += 7 + gap.length;
101
- drawText(screen, hx, hy, '^W/Esc', styles.value);
102
- hx += 6;
103
- drawText(screen, hx, hy, ' close', styles.hint);
104
- },
105
- handleKey(str, key, state) {
106
- const widgets = state.widgets || [];
107
- const totalPages = Math.ceil(widgets.length / WIDGETS_PER_PAGE) || 1;
108
- const currentPage = state.widgetsPage || 0;
109
- const pageStart = currentPage * WIDGETS_PER_PAGE;
110
- const pageEnd = Math.min(pageStart + WIDGETS_PER_PAGE, widgets.length);
111
- const pageWidgets = widgets.slice(pageStart, pageEnd);
112
- const idx = state.widgetsIndex || 0;
113
- const maxIndex = pageWidgets.length;
114
- if (key.name === 'escape') {
115
- state.overlay = null;
116
- markDirty();
117
- return { handled: true };
118
- }
119
- if (key.name === 'left' && totalPages > 1) {
120
- state.widgetsPage = currentPage > 0 ? currentPage - 1 : totalPages - 1;
121
- state.widgetsIndex = 1;
122
- markDirty();
123
- return { handled: true };
124
- }
125
- if (key.name === 'right' && totalPages > 1) {
126
- state.widgetsPage = currentPage < totalPages - 1 ? currentPage + 1 : 0;
127
- state.widgetsIndex = 1;
128
- markDirty();
129
- return { handled: true };
130
- }
131
- if (key.name === 'up') {
132
- state.widgetsIndex = idx > 1 ? idx - 1 : maxIndex;
133
- markDirty();
134
- return { handled: true };
135
- }
136
- if (key.name === 'down') {
137
- state.widgetsIndex = idx < maxIndex ? idx + 1 : 1;
138
- markDirty();
139
- return { handled: true };
140
- }
141
- if (key.name === 'return' && idx >= 1 && idx <= pageWidgets.length) {
142
- const widget = pageWidgets[idx - 1];
143
- if (widget) {
144
- openWidgetInBrowser(widget.id);
145
- }
146
- return { handled: true };
147
- }
148
- if (key.name === 'backspace' && idx >= 1 && idx <= pageWidgets.length) {
149
- const widget = pageWidgets[idx - 1];
150
- if (widget) {
151
- deleteWidget(widget.id);
152
- if (idx > maxIndex - 1 && idx > 1) {
153
- state.widgetsIndex = idx - 1;
154
- }
155
- }
156
- return { handled: true };
157
- }
158
- const num = parseInt(str || '', 10);
159
- if (num >= 1 && num <= 9 && num <= pageWidgets.length) {
160
- state.widgetsIndex = num;
161
- markDirty();
162
- return { handled: true };
163
- }
164
- return { handled: false };
165
- }
166
- };
167
- async function openWidgetInBrowser(widgetId) {
168
- try {
169
- const url = await fetchWidgetUrl(widgetId);
170
- const cmd = process.platform === 'darwin' ? 'open'
171
- : process.platform === 'win32' ? 'start'
172
- : 'xdg-open';
173
- exec(`${cmd} "${url}"`);
174
- }
175
- catch {
176
- // Silent — signed URL fetch failed
177
- }
178
- }
179
- async function deleteWidget(widgetId) {
180
- try {
181
- await connection.request({
182
- type: 'widgets.delete',
183
- payload: { widgetId },
184
- }, 5000);
185
- fetchWidgets();
186
- }
187
- catch {
188
- // Silently fail
189
- }
190
- }
191
- export default backgroundTasks;
192
- //# sourceMappingURL=backgroundTasks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backgroundTasks.js","sourceRoot":"","sources":["../../src/ui/backgroundTasks.ts"],"names":[],"mappings":"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"}