@relace-ai/jacq 0.1.2-beta.3 → 0.1.2-beta.5

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 +2 -5
  2. package/dist/actions/messages.js +2 -10
  3. package/dist/actions/messages.js.map +1 -1
  4. package/dist/actions/tasks.js +6 -2
  5. package/dist/actions/tasks.js.map +1 -1
  6. package/dist/approvalGate.d.ts +42 -0
  7. package/dist/approvalGate.js +140 -0
  8. package/dist/approvalGate.js.map +1 -0
  9. package/dist/approvals.d.ts +21 -0
  10. package/dist/approvals.js +79 -0
  11. package/dist/approvals.js.map +1 -0
  12. package/dist/auth.d.ts +1 -0
  13. package/dist/auth.js +3 -0
  14. package/dist/auth.js.map +1 -1
  15. package/dist/charWidth.d.ts +11 -0
  16. package/dist/charWidth.js +31 -0
  17. package/dist/charWidth.js.map +1 -0
  18. package/dist/clipboard.d.ts +0 -5
  19. package/dist/clipboard.js +0 -5
  20. package/dist/clipboard.js.map +1 -1
  21. package/dist/commands.js +3 -0
  22. package/dist/commands.js.map +1 -1
  23. package/dist/config.d.ts +2 -1
  24. package/dist/config.js +17 -10
  25. package/dist/config.js.map +1 -1
  26. package/dist/connection.d.ts +2 -0
  27. package/dist/connection.js +199 -6
  28. package/dist/connection.js.map +1 -1
  29. package/dist/constants.d.ts +2 -2
  30. package/dist/constants.js +2 -2
  31. package/dist/constants.js.map +1 -1
  32. package/dist/index.js +202 -28
  33. package/dist/index.js.map +1 -1
  34. package/dist/markdown/parser.js +248 -60
  35. package/dist/markdown/parser.js.map +1 -1
  36. package/dist/markdown/renderer.d.ts +3 -3
  37. package/dist/markdown/renderer.js +255 -66
  38. package/dist/markdown/renderer.js.map +1 -1
  39. package/dist/markdown/types.d.ts +4 -1
  40. package/dist/markdown/types.js.map +1 -1
  41. package/dist/protocol.d.ts +5 -0
  42. package/dist/protocol.js +245 -67
  43. package/dist/protocol.js.map +1 -1
  44. package/dist/renderer.js +4 -0
  45. package/dist/renderer.js.map +1 -1
  46. package/dist/startupAnimation.d.ts +4 -0
  47. package/dist/startupAnimation.js +326 -0
  48. package/dist/startupAnimation.js.map +1 -0
  49. package/dist/state.js +22 -0
  50. package/dist/state.js.map +1 -1
  51. package/dist/styles.js +4 -1
  52. package/dist/styles.js.map +1 -1
  53. package/dist/terminal.d.ts +9 -0
  54. package/dist/terminal.js +15 -0
  55. package/dist/terminal.js.map +1 -1
  56. package/dist/tools/registry.js +138 -13
  57. package/dist/tools/registry.js.map +1 -1
  58. package/dist/types.d.ts +29 -3
  59. package/dist/ui/backgroundTasks.js +1 -1
  60. package/dist/ui/backgroundTasks.js.map +1 -1
  61. package/dist/ui/config.d.ts +6 -0
  62. package/dist/ui/config.js +53 -0
  63. package/dist/ui/config.js.map +1 -0
  64. package/dist/ui/diffViewer.d.ts +9 -0
  65. package/dist/ui/diffViewer.js +320 -0
  66. package/dist/ui/diffViewer.js.map +1 -0
  67. package/dist/ui/index.js +39 -3
  68. package/dist/ui/index.js.map +1 -1
  69. package/dist/ui/input.d.ts +1 -1
  70. package/dist/ui/input.js +40 -13
  71. package/dist/ui/input.js.map +1 -1
  72. package/dist/ui/localCommands.d.ts +8 -0
  73. package/dist/ui/localCommands.js +267 -0
  74. package/dist/ui/localCommands.js.map +1 -0
  75. package/dist/ui/messages.js +189 -54
  76. package/dist/ui/messages.js.map +1 -1
  77. package/dist/ui/primitives.d.ts +9 -1
  78. package/dist/ui/primitives.js +64 -14
  79. package/dist/ui/primitives.js.map +1 -1
  80. package/dist/ui/promptInput.js +42 -8
  81. package/dist/ui/promptInput.js.map +1 -1
  82. package/dist/ui/promptPicker.js +3 -4
  83. package/dist/ui/promptPicker.js.map +1 -1
  84. package/dist/ui/resumeTask.d.ts +6 -0
  85. package/dist/ui/resumeTask.js +136 -0
  86. package/dist/ui/resumeTask.js.map +1 -0
  87. package/dist/ui/sessions.js +2 -2
  88. package/dist/ui/sessions.js.map +1 -1
  89. package/dist/ui/welcome.js +19 -10
  90. package/dist/ui/welcome.js.map +1 -1
  91. package/dist/utils/resolvePath.d.ts +10 -0
  92. package/dist/utils/resolvePath.js +24 -0
  93. package/dist/utils/resolvePath.js.map +1 -0
  94. package/package.json +7 -4
@@ -3,9 +3,10 @@
3
3
  *
4
4
  * Message types: 'user' | 'agent' | 'tool' | 'status' | 'error'
5
5
  */
6
- import type { Message } from '../types.js';
6
+ import type { Message, StatusKind } from '../types.js';
7
7
  interface AddMessageOptions {
8
8
  taskId?: string;
9
+ statusKind?: StatusKind;
9
10
  toolCalls?: Message['toolCalls'];
10
11
  agentMessage?: string | null;
11
12
  tokens?: {
@@ -22,10 +23,6 @@ export declare function addMessage(type: Message['type'], content: string, optio
22
23
  * Append to stream buffer (for streaming responses)
23
24
  */
24
25
  export declare function appendStream(chunk: string): void;
25
- /**
26
- * Flush stream buffer to a message
27
- */
28
- export declare function flushStream(taskId?: string): void;
29
26
  /**
30
27
  * Clear messages (when switching tasks)
31
28
  */
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { state, markDirty } from '../state.js';
7
7
  let messageIdCounter = 0;
8
- const MAX_MESSAGES = 100;
8
+ const MAX_MESSAGES = 10000;
9
9
  /**
10
10
  * Add a message to the list
11
11
  */
@@ -14,6 +14,7 @@ export function addMessage(type, content, options = {}) {
14
14
  id: `msg-${++messageIdCounter}`,
15
15
  type,
16
16
  content,
17
+ statusKind: options.statusKind,
17
18
  taskId: options.taskId || state.currentTaskId || undefined,
18
19
  toolCalls: options.toolCalls || null,
19
20
  agentMessage: options.agentMessage || null,
@@ -37,15 +38,6 @@ export function appendStream(chunk) {
37
38
  state.streamBuffer += chunk;
38
39
  markDirty();
39
40
  }
40
- /**
41
- * Flush stream buffer to a message
42
- */
43
- export function flushStream(taskId) {
44
- if (state.streamBuffer.trim()) {
45
- addMessage('agent', state.streamBuffer, { taskId });
46
- }
47
- state.streamBuffer = '';
48
- }
49
41
  /**
50
42
  * Clear messages (when switching tasks)
51
43
  */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/actions/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG/C,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,MAAM,YAAY,GAAG,GAAG,CAAC;AAUzB;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAqB,EAAE,OAAe,EAAE,UAA6B,EAAE;IAC9F,MAAM,OAAO,GAAY;QACrB,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC/B,IAAI;QACJ,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,SAAS;QAC1D,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE7B,oBAAoB;IACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;QACvD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IAC5B,SAAS,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAe;IACvC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;IACxB,SAAS,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,QAAQ,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,CAChD,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAChC,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AAC9E,CAAC"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/actions/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG/C,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,MAAM,YAAY,GAAG,KAAK,CAAC;AAW3B;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAqB,EAAE,OAAe,EAAE,UAA6B,EAAE;IAC9F,MAAM,OAAO,GAAY;QACrB,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC/B,IAAI;QACJ,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,SAAS;QAC1D,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE7B,oBAAoB;IACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;QACvD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACtC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IAC5B,SAAS,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;IACxB,SAAS,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,QAAQ,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,CAChD,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAChC,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AAC9E,CAAC"}
@@ -42,10 +42,14 @@ export function updateTask(taskId, updates) {
42
42
  cacheCreate: prev.cacheCreate + (delta.cacheCreate || 0),
43
43
  };
44
44
  const { tokensDelta: _, ...rest } = updates;
45
- Object.assign(task, rest, { updatedAt: new Date().toISOString() });
45
+ Object.assign(task, rest);
46
+ if (!rest.updatedAt)
47
+ task.updatedAt = new Date().toISOString();
46
48
  }
47
49
  else {
48
- Object.assign(task, updates, { updatedAt: new Date().toISOString() });
50
+ Object.assign(task, updates);
51
+ if (!updates.updatedAt)
52
+ task.updatedAt = new Date().toISOString();
49
53
  }
50
54
  }
51
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/actions/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/actions/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Approval gate — promise-based gate for tool execution approval
3
+ *
4
+ * When a bash or write_file tool needs user approval, creates a promise
5
+ * that blocks execution until the user acts on the overlay dialog.
6
+ * Only one approval can be pending at a time (server waits for tool.result).
7
+ */
8
+ export type ApprovalDecision = {
9
+ action: 'approve';
10
+ } | {
11
+ action: 'allowlist';
12
+ prefix?: string;
13
+ dir?: string;
14
+ } | {
15
+ action: 'reject';
16
+ };
17
+ /**
18
+ * Request approval for a bash command.
19
+ * Returns null if the command is already allowlisted (auto-approved).
20
+ * Otherwise returns a Promise that resolves when the user acts.
21
+ */
22
+ export declare function requestBashApproval(command: string): Promise<ApprovalDecision> | null;
23
+ /**
24
+ * Request approval for a file edit (write_file).
25
+ * Returns null if the edit is already allowed (dir allowlist).
26
+ * Otherwise returns a Promise that resolves when the user acts.
27
+ */
28
+ export declare function requestEditApproval(filePath: string, newContent: string, cwd: string, append?: boolean): Promise<ApprovalDecision> | null;
29
+ /**
30
+ * Request approval for an edit_file operation.
31
+ * Returns null if auto-approved. Otherwise shows diff viewer.
32
+ */
33
+ export declare function requestEditFileApproval(filePath: string, oldString: string, newString: string, replaceAll: boolean, cwd: string): Promise<ApprovalDecision> | null;
34
+ /**
35
+ * Request approval for a file operation (copy_file, delete_file).
36
+ * Returns null if auto-approved. Otherwise shows localCommands overlay.
37
+ */
38
+ export declare function requestFileOpApproval(title: string, description: string, targetPath: string, cwd: string): Promise<ApprovalDecision> | null;
39
+ /**
40
+ * Resolve the pending approval promise. Called from index.ts action handlers.
41
+ */
42
+ export declare function resolveApproval(decision: ApprovalDecision): void;
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Approval gate — promise-based gate for tool execution approval
3
+ *
4
+ * When a bash or write_file tool needs user approval, creates a promise
5
+ * that blocks execution until the user acts on the overlay dialog.
6
+ * Only one approval can be pending at a time (server waits for tool.result).
7
+ */
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { state, markDirty } from './state.js';
11
+ import { isBashAllowed, isEditAllowed, suggestBashPrefix } from './approvals.js';
12
+ import { resolvePath } from './utils/resolvePath.js';
13
+ let pendingResolve = null;
14
+ /**
15
+ * Request approval for a bash command.
16
+ * Returns null if the command is already allowlisted (auto-approved).
17
+ * Otherwise returns a Promise that resolves when the user acts.
18
+ */
19
+ export function requestBashApproval(command) {
20
+ if (isBashAllowed(command))
21
+ return null;
22
+ return new Promise((resolve) => {
23
+ pendingResolve = resolve;
24
+ state.localCommandsTitle = null; // Reset to show default "Bash command" title
25
+ state.localCommandsProposed = command;
26
+ state.localCommandsSuggestedPrefix = suggestBashPrefix(command);
27
+ state.localCommandsDir = process.cwd();
28
+ state.localCommandsIndex = 0;
29
+ state.localCommandsFullscreen = false;
30
+ state.localCommandsScrollOffset = 0;
31
+ state.overlay = 'localCommands';
32
+ markDirty();
33
+ });
34
+ }
35
+ /**
36
+ * Request approval for a file edit (write_file).
37
+ * Returns null if the edit is already allowed (dir allowlist).
38
+ * Otherwise returns a Promise that resolves when the user acts.
39
+ */
40
+ export function requestEditApproval(filePath, newContent, cwd, append) {
41
+ const resolved = resolvePath(filePath, cwd);
42
+ if (isEditAllowed(resolved))
43
+ return null;
44
+ // Read existing file content for diff
45
+ let oldContent = '';
46
+ try {
47
+ oldContent = fs.readFileSync(resolved, 'utf-8');
48
+ }
49
+ catch {
50
+ // File doesn't exist yet — old content is empty
51
+ }
52
+ // For append mode, new content is old + appended
53
+ const effectiveNewContent = append ? oldContent + newContent : newContent;
54
+ return new Promise((resolve) => {
55
+ pendingResolve = resolve;
56
+ state.diffViewerFileName = filePath;
57
+ state.diffViewerOldContent = oldContent;
58
+ state.diffViewerNewContent = effectiveNewContent;
59
+ state.diffViewerSuggestedDir = path.dirname(resolved);
60
+ state.diffViewerIndex = 0;
61
+ state.diffViewerFullscreen = false;
62
+ state.diffViewerScrollOffset = 0;
63
+ state.overlay = 'diffViewer';
64
+ markDirty();
65
+ });
66
+ }
67
+ /**
68
+ * Request approval for an edit_file operation.
69
+ * Returns null if auto-approved. Otherwise shows diff viewer.
70
+ */
71
+ export function requestEditFileApproval(filePath, oldString, newString, replaceAll, cwd) {
72
+ const resolved = resolvePath(filePath, cwd);
73
+ if (isEditAllowed(resolved))
74
+ return null;
75
+ // Read file and compute replacement result
76
+ let oldContent = '';
77
+ try {
78
+ oldContent = fs.readFileSync(resolved, 'utf-8');
79
+ }
80
+ catch {
81
+ // File doesn't exist — will error in execution
82
+ }
83
+ let newContent;
84
+ if (replaceAll) {
85
+ newContent = oldContent.split(oldString).join(newString);
86
+ }
87
+ else {
88
+ const pos = oldContent.indexOf(oldString);
89
+ if (pos === -1) {
90
+ newContent = oldContent; // No match — execution will handle the error
91
+ }
92
+ else {
93
+ newContent = oldContent.slice(0, pos) + newString + oldContent.slice(pos + oldString.length);
94
+ }
95
+ }
96
+ return new Promise((resolve) => {
97
+ pendingResolve = resolve;
98
+ state.diffViewerFileName = filePath;
99
+ state.diffViewerOldContent = oldContent;
100
+ state.diffViewerNewContent = newContent;
101
+ state.diffViewerSuggestedDir = path.dirname(resolved);
102
+ state.diffViewerIndex = 0;
103
+ state.diffViewerFullscreen = false;
104
+ state.diffViewerScrollOffset = 0;
105
+ state.overlay = 'diffViewer';
106
+ markDirty();
107
+ });
108
+ }
109
+ /**
110
+ * Request approval for a file operation (copy_file, delete_file).
111
+ * Returns null if auto-approved. Otherwise shows localCommands overlay.
112
+ */
113
+ export function requestFileOpApproval(title, description, targetPath, cwd) {
114
+ const resolved = resolvePath(targetPath, cwd);
115
+ if (isEditAllowed(resolved))
116
+ return null;
117
+ return new Promise((resolve) => {
118
+ pendingResolve = resolve;
119
+ state.localCommandsTitle = title;
120
+ state.localCommandsProposed = description;
121
+ state.localCommandsSuggestedPrefix = null;
122
+ state.localCommandsDir = path.dirname(resolved);
123
+ state.localCommandsIndex = 0;
124
+ state.localCommandsFullscreen = false;
125
+ state.localCommandsScrollOffset = 0;
126
+ state.overlay = 'localCommands';
127
+ markDirty();
128
+ });
129
+ }
130
+ /**
131
+ * Resolve the pending approval promise. Called from index.ts action handlers.
132
+ */
133
+ export function resolveApproval(decision) {
134
+ if (pendingResolve) {
135
+ const resolve = pendingResolve;
136
+ pendingResolve = null;
137
+ resolve(decision);
138
+ }
139
+ }
140
+ //# sourceMappingURL=approvalGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvalGate.js","sourceRoot":"","sources":["../src/approvalGate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Approval persistence — manages ~/.jacq/approvals.json
3
+ *
4
+ * Stores bash command prefix allowlist and edit directory allowlist.
5
+ * Uses atomic writes (write-to-tmp + rename) same as config.ts.
6
+ */
7
+ interface ApprovalsData {
8
+ bash_allowlist: string[];
9
+ edit_allowed_dirs: string[];
10
+ }
11
+ export declare function loadApprovals(): ApprovalsData;
12
+ export declare function saveApprovals(data: ApprovalsData): void;
13
+ export declare function addBashPrefix(prefix: string): void;
14
+ export declare function addEditDir(dir: string): void;
15
+ export declare function isBashAllowed(command: string): boolean;
16
+ export declare function isEditAllowed(filePath: string): boolean;
17
+ /**
18
+ * Extract the first word of a command as a suggested allowlist prefix.
19
+ */
20
+ export declare function suggestBashPrefix(command: string): string;
21
+ export {};
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Approval persistence — manages ~/.jacq/approvals.json
3
+ *
4
+ * Stores bash command prefix allowlist and edit directory allowlist.
5
+ * Uses atomic writes (write-to-tmp + rename) same as config.ts.
6
+ */
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import os from 'os';
10
+ const APPROVALS_DIR = path.join(os.homedir(), '.jacq');
11
+ const APPROVALS_FILE = path.join(APPROVALS_DIR, 'approvals.json');
12
+ const DEFAULT_DATA = {
13
+ bash_allowlist: [],
14
+ edit_allowed_dirs: [],
15
+ };
16
+ export function loadApprovals() {
17
+ try {
18
+ if (fs.existsSync(APPROVALS_FILE)) {
19
+ const content = fs.readFileSync(APPROVALS_FILE, 'utf-8');
20
+ const parsed = JSON.parse(content);
21
+ return {
22
+ bash_allowlist: Array.isArray(parsed.bash_allowlist) ? parsed.bash_allowlist : [],
23
+ edit_allowed_dirs: Array.isArray(parsed.edit_allowed_dirs) ? parsed.edit_allowed_dirs : [],
24
+ };
25
+ }
26
+ }
27
+ catch {
28
+ // Ignore errors, use defaults
29
+ }
30
+ return { ...DEFAULT_DATA };
31
+ }
32
+ export function saveApprovals(data) {
33
+ if (!fs.existsSync(APPROVALS_DIR)) {
34
+ fs.mkdirSync(APPROVALS_DIR, { recursive: true });
35
+ }
36
+ const tmpFile = APPROVALS_FILE + '.tmp';
37
+ fs.writeFileSync(tmpFile, JSON.stringify(data, null, 2) + '\n', 'utf-8');
38
+ fs.renameSync(tmpFile, APPROVALS_FILE);
39
+ }
40
+ export function addBashPrefix(prefix) {
41
+ const data = loadApprovals();
42
+ if (!data.bash_allowlist.includes(prefix)) {
43
+ data.bash_allowlist.push(prefix);
44
+ saveApprovals(data);
45
+ }
46
+ }
47
+ export function addEditDir(dir) {
48
+ const normalized = dir.endsWith('/') ? dir : dir + '/';
49
+ const data = loadApprovals();
50
+ if (!data.edit_allowed_dirs.includes(normalized)) {
51
+ data.edit_allowed_dirs.push(normalized);
52
+ saveApprovals(data);
53
+ }
54
+ }
55
+ export function isBashAllowed(command) {
56
+ const data = loadApprovals();
57
+ // Check that prefix is followed by a space or end-of-string to prevent
58
+ // bypass via shell operators (e.g., "git status && malicious_cmd")
59
+ return data.bash_allowlist.some(prefix => {
60
+ if (!command.startsWith(prefix))
61
+ return false;
62
+ const nextChar = command[prefix.length];
63
+ return nextChar === undefined || nextChar === ' ';
64
+ });
65
+ }
66
+ export function isEditAllowed(filePath) {
67
+ const resolved = path.resolve(filePath);
68
+ const data = loadApprovals();
69
+ return data.edit_allowed_dirs.some(dir => resolved.startsWith(dir));
70
+ }
71
+ /**
72
+ * Extract the first word of a command as a suggested allowlist prefix.
73
+ */
74
+ export function suggestBashPrefix(command) {
75
+ const trimmed = command.trimStart();
76
+ const firstWord = trimmed.split(/\s+/)[0] || trimmed;
77
+ return firstWord;
78
+ }
79
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../src/approvals.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -5,6 +5,7 @@ interface LoginResult {
5
5
  success: boolean;
6
6
  error?: string;
7
7
  alreadyLoggedIn?: boolean;
8
+ denied?: boolean;
8
9
  name?: string;
9
10
  }
10
11
  export declare function loginFromTUI(onProgress: (msg: string) => void): Promise<LoginResult>;
package/dist/auth.js CHANGED
@@ -104,6 +104,9 @@ export async function loginFromTUI(onProgress) {
104
104
  if (pollRes.status === 410 || pollRes.data.status === 'expired') {
105
105
  return { success: false, error: 'Device code expired. Try again.' };
106
106
  }
107
+ if (pollRes.data.status === 'denied') {
108
+ return { success: false, error: 'Unauthorized', denied: true };
109
+ }
107
110
  onProgress('Waiting for approval...');
108
111
  }
109
112
  catch {
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B,SAAS,aAAa,CAAC,MAAc;IACjC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC;IACxD,2EAA2E;IAC3E,IAAI,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK;SACP,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW,EAAE,UAA0B,EAAE;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D;SACJ,EAAE,CAAC,GAAG,EAAE,EAAE;YACP,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC;oBACD,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,IAAI;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM;QAC9C,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO;YACxC,CAAC,CAAC,UAAU,CAAC;IACjB,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAiC;IAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE;gBACvC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;aAC1D,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAW,EAAE,CAAC;YACpG,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjC,IAAI,SAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,SAAS,CAAC,IAAI,EAAE,MAAiB,IAAI,6BAA6B,EAAE,CAAC;IAC1G,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAKzE,CAAC;IAEF,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;IAEzD,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAEtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,aAAa,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,WAAW,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAK,OAAO,CAAC,IAAgC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5F,UAAU,CAAC,EAAE,MAAM,EAAG,OAAO,CAAC,IAAgC,CAAC,OAAiB,EAAE,CAAC,CAAC;gBACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAG,OAAO,CAAC,IAAgC,CAAC,IAAc,EAAE,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAK,OAAO,CAAC,IAAgC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;YACxE,CAAC;YAED,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACL,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE;YACvC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;SAC1D,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAkB,CAAC;QACnE,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAqB1B,SAAS,aAAa,CAAC,MAAc;IACjC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC;IACxD,2EAA2E;IAC3E,IAAI,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK;SACP,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW,EAAE,UAA0B,EAAE;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/D;SACJ,EAAE,CAAC,GAAG,EAAE,EAAE;YACP,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC;oBACD,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAAC,MAAM,CAAC;oBACL,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,IAAI;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,GAAG,CAAC,GAAG,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM;QAC9C,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO;YACxC,CAAC,CAAC,UAAU,CAAC;IACjB,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAiC;IAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE;gBACvC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;aAC1D,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAW,EAAE,CAAC;YACpG,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjC,IAAI,SAAwB,CAAC;IAC7B,IAAI,CAAC;QACD,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,SAAS,CAAC,IAAI,EAAE,MAAiB,IAAI,6BAA6B,EAAE,CAAC;IAC1G,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAKzE,CAAC;IAEF,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;IAEzD,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAEtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,aAAa,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,EAAE,WAAW,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAK,OAAO,CAAC,IAAgC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5F,UAAU,CAAC,EAAE,MAAM,EAAG,OAAO,CAAC,IAAgC,CAAC,OAAiB,EAAE,CAAC,CAAC;gBACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAG,OAAO,CAAC,IAAgC,CAAC,IAAc,EAAE,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAK,OAAO,CAAC,IAAgC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC3F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;YACxE,CAAC;YACD,IAAK,OAAO,CAAC,IAAgC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACnE,CAAC;YAED,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACL,UAAU,CAAC,oCAAoC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,OAAO,KAAK,EAAE;YACvC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;SAC1D,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAkB,CAAC;QACnE,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Character display width helpers for terminal rendering.
3
+ * Uses `string-width` which correctly handles East Asian Width,
4
+ * Emoji_Presentation, combining marks, ZWJ sequences, etc.
5
+ */
6
+ /** Return the display width (in terminal columns) of a single code point. */
7
+ export declare function codePointWidth(cp: number): number;
8
+ /** Return the display width (in terminal columns) of a string. */
9
+ export declare function displayWidth(text: string): number;
10
+ /** Truncate or pad `text` to exactly `targetWidth` display columns. */
11
+ export declare function fitToDisplayWidth(text: string, targetWidth: number): string;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Character display width helpers for terminal rendering.
3
+ * Uses `string-width` which correctly handles East Asian Width,
4
+ * Emoji_Presentation, combining marks, ZWJ sequences, etc.
5
+ */
6
+ import stringWidth from 'string-width';
7
+ /** Return the display width (in terminal columns) of a single code point. */
8
+ export function codePointWidth(cp) {
9
+ return stringWidth(String.fromCodePoint(cp));
10
+ }
11
+ /** Return the display width (in terminal columns) of a string. */
12
+ export function displayWidth(text) {
13
+ return stringWidth(text);
14
+ }
15
+ /** Truncate or pad `text` to exactly `targetWidth` display columns. */
16
+ export function fitToDisplayWidth(text, targetWidth) {
17
+ let out = '';
18
+ let used = 0;
19
+ for (const ch of text) {
20
+ const w = codePointWidth(ch.codePointAt(0));
21
+ if (used + w > targetWidth)
22
+ break;
23
+ out += ch;
24
+ used += w;
25
+ }
26
+ if (used < targetWidth) {
27
+ out += ' '.repeat(targetWidth - used);
28
+ }
29
+ return out;
30
+ }
31
+ //# sourceMappingURL=charWidth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charWidth.js","sourceRoot":"","sources":["../src/charWidth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,EAAU;IACrC,OAAO,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,IAAY;IACrC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,WAAmB;IAC/D,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW;YAAE,MAAM;QAClC,GAAG,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,CAAC;IACd,CAAC;IACD,IAAI,IAAI,GAAG,WAAW,EAAE,CAAC;QACrB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -2,20 +2,15 @@
2
2
  * Clipboard Module
3
3
  * Handles text and image pasting from system clipboard
4
4
  */
5
- declare const PASTE_START = "\u001B[200~";
6
- declare const PASTE_END = "\u001B[201~";
7
5
  export declare function hasClipboardImage(): Promise<boolean>;
8
6
  export declare function readClipboardImage(): Promise<{
9
7
  base64: string;
10
8
  mimeType: string;
11
9
  } | null>;
12
10
  export declare function pasteImageFromClipboard(onImage: (base64: string, mimeType: string) => void, onError: (err: Error) => void): Promise<boolean>;
13
- export { PASTE_START, PASTE_END };
14
11
  declare const _default: {
15
12
  hasClipboardImage: typeof hasClipboardImage;
16
13
  readClipboardImage: typeof readClipboardImage;
17
14
  pasteImageFromClipboard: typeof pasteImageFromClipboard;
18
- PASTE_START: string;
19
- PASTE_END: string;
20
15
  };
21
16
  export default _default;
package/dist/clipboard.js CHANGED
@@ -6,8 +6,6 @@ import { spawn } from 'child_process';
6
6
  import * as fs from 'fs';
7
7
  import * as path from 'path';
8
8
  import * as os from 'os';
9
- const PASTE_START = '\x1b[200~';
10
- const PASTE_END = '\x1b[201~';
11
9
  const TEMP_IMAGE_PATH = path.join(os.tmpdir(), 'bergamot_clipboard_image.png');
12
10
  function getClipboardCommands() {
13
11
  const platform = process.platform;
@@ -115,12 +113,9 @@ export async function pasteImageFromClipboard(onImage, onError) {
115
113
  return false;
116
114
  }
117
115
  }
118
- export { PASTE_START, PASTE_END };
119
116
  export default {
120
117
  hasClipboardImage,
121
118
  readClipboardImage,
122
119
  pasteImageFromClipboard,
123
- PASTE_START,
124
- PASTE_END
125
120
  };
126
121
  //# sourceMappingURL=clipboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
package/dist/commands.js CHANGED
@@ -9,8 +9,11 @@ export const HOTKEYS = [
9
9
  ];
10
10
  export const SLASH_COMMANDS = [
11
11
  { command: '/clear', desc: 'reset view' },
12
+ { command: '/config', desc: 'show connection info' },
12
13
  { command: '/login', desc: 'authenticate' },
13
14
  { command: '/logout', desc: 'sign out' },
15
+ { command: '/exit', desc: 'quit the app' },
16
+ { command: '/quit', desc: 'quit the app' },
14
17
  ];
15
18
  export const COLON_COMMANDS = [
16
19
  { command: ':chats', desc: 'open chats' },
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,OAAO,GAAgB;IAChC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAiB;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACzC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE;IAC3C,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAiB;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACzC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE;CAChD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,KAAa;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,OAAO,GAAgB;IAChC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IAC7B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/B,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAiB;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACzC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE;IACpD,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE;IAC3C,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;IACxC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1C,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAiB;IACxC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACzC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE;CAChD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,KAAa;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Configuration loader
3
- * Loads from ~/.jacq/config.json
3
+ * Loads from ~/.jacq/config.json by default.
4
+ * Can be overridden with JACQ_CONFIG_FILE.
4
5
  */
5
6
  export interface Config {
6
7
  apiUrl: string;