jinzd-ai-cli 0.4.216 → 0.4.218

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 (31) hide show
  1. package/README.md +6 -3
  2. package/dist/{batch-C6HCXZIG.js → batch-7V7OTMUP.js} +2 -2
  3. package/dist/{chat-index-R2E27VXN.js → chat-index-PS274XM7.js} +1 -1
  4. package/dist/{chunk-TJ6GGN4B.js → chunk-5CA2TJ5F.js} +1 -1
  5. package/dist/{chunk-OLN7VUZA.js → chunk-C2Z42DI5.js} +3 -1
  6. package/dist/{chunk-TCOC4AUI.js → chunk-GX3HSGJX.js} +690 -169
  7. package/dist/{chunk-PNTLA3MN.js → chunk-H2UIHGHH.js} +23 -22
  8. package/dist/{chunk-GY3C3C2Y.js → chunk-L4UREAID.js} +3 -3
  9. package/dist/{chunk-77HDCGTN.js → chunk-MWKE2TNS.js} +1 -1
  10. package/dist/{chunk-7YWS3JLU.js → chunk-NTCB7CMT.js} +3 -1
  11. package/dist/{chunk-6HLKCSB3.js → chunk-OUC75QCF.js} +1 -1
  12. package/dist/{chunk-WAI3WPV2.js → chunk-P4VBLXKS.js} +1 -1
  13. package/dist/{chunk-VW7Y27WW.js → chunk-VGFTM3XT.js} +1 -1
  14. package/dist/{chunk-OQGVGPEK.js → chunk-VHY6NVMQ.js} +2 -0
  15. package/dist/{ci-6ZTFO3LX.js → ci-L6GH2WVC.js} +4 -4
  16. package/dist/{ci-format-CLZ6QJRL.js → ci-format-WW7454AY.js} +2 -2
  17. package/dist/{constants-APSORFOH.js → constants-NCTFSHDU.js} +3 -1
  18. package/dist/{doctor-cli-GUIX4X5F.js → doctor-cli-EWMFBP5Q.js} +4 -4
  19. package/dist/electron-server.js +965 -377
  20. package/dist/{hub-ZGHQWNWE.js → hub-CDL6T7CP.js} +1 -1
  21. package/dist/index.js +259 -97
  22. package/dist/{pr-JOL3IAGV.js → pr-D6PEKEGK.js} +4 -4
  23. package/dist/{run-tests-4PKSIVK5.js → run-tests-NXVVKAK2.js} +1 -1
  24. package/dist/{run-tests-ZRK4TQUN.js → run-tests-SWU2XEV7.js} +2 -2
  25. package/dist/{server-FXUF5P64.js → server-LHYSS6CK.js} +207 -100
  26. package/dist/{server-O3XHT56X.js → server-WUT7VYTD.js} +5 -4
  27. package/dist/{task-orchestrator-TUMDTOAX.js → task-orchestrator-C5AA2BI5.js} +5 -4
  28. package/dist/{usage-X7MJX4YD.js → usage-6ZUUJBI2.js} +2 -2
  29. package/dist/web/client/app.js +53 -2
  30. package/dist/web/client/index.html +11 -1
  31. package/package.json +1 -1
@@ -3,13 +3,13 @@ import {
3
3
  ToolRegistry,
4
4
  googleSearchContext,
5
5
  truncateOutput
6
- } from "./chunk-TCOC4AUI.js";
6
+ } from "./chunk-GX3HSGJX.js";
7
7
  import "./chunk-T2NL5ZIA.js";
8
8
  import "./chunk-BXP6YZ2P.js";
9
- import "./chunk-VW7Y27WW.js";
9
+ import "./chunk-VGFTM3XT.js";
10
10
  import {
11
11
  runTool
12
- } from "./chunk-77HDCGTN.js";
12
+ } from "./chunk-MWKE2TNS.js";
13
13
  import {
14
14
  getDangerLevel,
15
15
  runLeanAgentLoop
@@ -17,7 +17,8 @@ import {
17
17
  import "./chunk-TZQHYZKT.js";
18
18
  import {
19
19
  SUBAGENT_ALLOWED_TOOLS
20
- } from "./chunk-7YWS3JLU.js";
20
+ } from "./chunk-NTCB7CMT.js";
21
+ import "./chunk-HOSJZMQS.js";
21
22
  import "./chunk-4BKXL7SM.js";
22
23
  import "./chunk-TB4W4Y4T.js";
23
24
  import "./chunk-KHYD3WXE.js";
@@ -8,9 +8,9 @@ import {
8
8
  } from "./chunk-E44DTERW.js";
9
9
  import {
10
10
  ConfigManager
11
- } from "./chunk-WAI3WPV2.js";
11
+ } from "./chunk-P4VBLXKS.js";
12
12
  import "./chunk-TZQHYZKT.js";
13
- import "./chunk-7YWS3JLU.js";
13
+ import "./chunk-NTCB7CMT.js";
14
14
  import "./chunk-IW3Q7AE5.js";
15
15
 
16
16
  // src/cli/usage.ts
@@ -200,6 +200,7 @@ function handleServerMessage(msg) {
200
200
  case 'tools_list': renderToolsList(msg); switchSidebarTab('tools'); break;
201
201
  case 'export_data': handleExportData(msg); break;
202
202
  case 'memory_content': handleMemoryContent(msg); break;
203
+ case 'memory_entries': renderMemoryEntries(msg); break;
203
204
  case 'memory_hits': renderMemoryHits(msg); break;
204
205
  case 'memory_status': renderMemoryStatus(msg); break;
205
206
  case 'memory_rebuild_progress': renderMemoryRebuildProgress(msg); break;
@@ -2943,7 +2944,9 @@ function initMemoryPanel() {
2943
2944
  const input = document.getElementById('memory-search-input');
2944
2945
  const btnSearch = document.getElementById('btn-memory-search');
2945
2946
  const btnRefresh = document.getElementById('btn-memory-refresh');
2946
- const btnRebuild = document.getElementById('btn-memory-rebuild');
2947
+ const btnRebuild = document.getElementById('btn-memory-rebuild');
2948
+ const btnManagedRefresh = document.getElementById('btn-memory-managed-refresh');
2949
+ const btnManagedExport = document.getElementById('btn-memory-managed-export');
2947
2950
 
2948
2951
  const runSearch = () => {
2949
2952
  const q = (input?.value || '').trim();
@@ -2978,7 +2981,11 @@ function initMemoryPanel() {
2978
2981
  send({ type: 'memory_rebuild', full: true });
2979
2982
  });
2980
2983
 
2981
- send({ type: 'memory_status_request' });
2984
+ btnManagedRefresh?.addEventListener('click', () => send({ type: 'memory_manage', action: 'list' }));
2985
+ btnManagedExport?.addEventListener('click', () => send({ type: 'memory_manage', action: 'export' }));
2986
+
2987
+ send({ type: 'memory_status_request' });
2988
+ send({ type: 'memory_manage', action: 'list' });
2982
2989
  }
2983
2990
 
2984
2991
  function renderMemoryStatus(msg) {
@@ -2997,6 +3004,50 @@ function renderMemoryStatus(msg) {
2997
3004
  el.title = `model: ${msg.model || '-'}`;
2998
3005
  }
2999
3006
 
3007
+ function renderMemoryEntries(msg) {
3008
+ const el = document.getElementById('memory-managed-list');
3009
+ if (!el) return;
3010
+ const entries = msg.entries || [];
3011
+ if (entries.length === 0) {
3012
+ el.innerHTML = '<div class="opacity-40 py-1">No persistent memories.</div>';
3013
+ return;
3014
+ }
3015
+ el.innerHTML = entries.map((m) => {
3016
+ const status = m.expired ? 'expired' : (m.approved ? 'approved' : 'pending');
3017
+ const statusClass = m.expired ? 'badge-ghost' : (m.approved ? 'badge-success' : 'badge-warning');
3018
+ const source = m.sourceSession ? `session ${m.sourceSession.slice(0, 8)}` : (m.sourceProject ? 'project' : 'manual/tool');
3019
+ const preview = m.content.length > 180 ? m.content.slice(0, 180) + '…' : m.content;
3020
+ const actions = [];
3021
+ if (!m.approved && !m.expired) actions.push(`<button class="btn btn-xs btn-ghost memory-managed-approve" title="Approve">Approve</button>`);
3022
+ if (m.approved && !m.expired) actions.push(`<button class="btn btn-xs btn-ghost memory-managed-reject" title="Reject">Reject</button>`);
3023
+ if (!m.expired) actions.push(`<button class="btn btn-xs btn-ghost memory-managed-expire" title="Expire now">Expire</button>`);
3024
+ actions.push(`<button class="btn btn-xs btn-ghost memory-managed-delete" title="Delete">Delete</button>`);
3025
+ return `
3026
+ <div class="memory-managed-item border border-base-content/10 rounded p-2" data-memory-id="${escapeHtml(m.id)}">
3027
+ <div class="flex items-center gap-1 mb-1">
3028
+ <span class="badge badge-xs ${statusClass}">${status}</span>
3029
+ <span class="badge badge-xs badge-ghost">${escapeHtml(m.scope)}</span>
3030
+ <span class="badge badge-xs badge-ghost">${escapeHtml(m.sensitivity)}</span>
3031
+ <span class="opacity-50 truncate flex-1">${escapeHtml(m.id.slice(0, 8))}</span>
3032
+ </div>
3033
+ <div class="opacity-50 mb-1">source: ${escapeHtml(source)} · ${escapeHtml((m.createdAt || '').replace('T', ' ').slice(0, 16))}</div>
3034
+ <div class="whitespace-pre-wrap leading-snug mb-1">${escapeHtml(preview)}</div>
3035
+ <div class="flex flex-wrap gap-1">${actions.join('')}</div>
3036
+ </div>
3037
+ `;
3038
+ }).join('');
3039
+
3040
+ el.querySelectorAll('.memory-managed-item').forEach((card) => {
3041
+ const id = card.getAttribute('data-memory-id');
3042
+ if (!id) return;
3043
+ card.querySelector('.memory-managed-approve')?.addEventListener('click', () => send({ type: 'memory_manage', action: 'approve', id }));
3044
+ card.querySelector('.memory-managed-reject')?.addEventListener('click', () => send({ type: 'memory_manage', action: 'reject', id }));
3045
+ card.querySelector('.memory-managed-expire')?.addEventListener('click', () => send({ type: 'memory_manage', action: 'expire', id }));
3046
+ card.querySelector('.memory-managed-delete')?.addEventListener('click', () => {
3047
+ if (confirm('Delete this memory entry?')) send({ type: 'memory_manage', action: 'delete', id });
3048
+ });
3049
+ });
3050
+ }
3000
3051
  function renderMemoryHits(msg) {
3001
3052
  const el = document.getElementById('memory-hits');
3002
3053
  if (!el) return;
@@ -192,7 +192,17 @@
192
192
  <button id="btn-memory-refresh" class="btn btn-xs btn-ghost" title="Incremental refresh">↻</button>
193
193
  <button id="btn-memory-rebuild" class="btn btn-xs btn-ghost" title="Full rebuild (slow first run)">⟳ Rebuild</button>
194
194
  </div>
195
- <div id="memory-status" class="text-xs opacity-50 truncate">Loading index status…</div>
195
+ <div id="memory-status" class="text-xs opacity-50 truncate">Loading index status…</div>
196
+ <div id="memory-governance" class="border-t border-base-content/10 pt-2 mt-1">
197
+ <div class="flex items-center gap-1 mb-1">
198
+ <span class="text-xs font-semibold flex-1">Persistent memory</span>
199
+ <button id="btn-memory-managed-refresh" class="btn btn-xs btn-ghost" title="Refresh persistent memory">↻</button>
200
+ <button id="btn-memory-managed-export" class="btn btn-xs btn-ghost" title="Export persistent memory">Export</button>
201
+ </div>
202
+ <div id="memory-managed-list" class="flex flex-col gap-1 max-h-48 overflow-y-auto text-xs">
203
+ <div class="opacity-40 py-1">Loading persistent memory…</div>
204
+ </div>
205
+ </div>
196
206
  </div>
197
207
  <div id="memory-hits" class="flex-1 overflow-y-auto p-2 flex flex-col gap-2 text-sm">
198
208
  <div class="text-xs opacity-40 text-center py-4">Type a query above to recall past chats.</div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.216",
3
+ "version": "0.4.218",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",