jinzd-ai-cli 0.4.255 → 0.4.256
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.
- package/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/dist/{batch-OWBKG6XZ.js → batch-A6WZTY56.js} +3 -3
- package/dist/{chunk-ZRBGH245.js → chunk-2CGCEN7Q.js} +2 -2
- package/dist/{chunk-IRSNREEO.js → chunk-3C6TKCRL.js} +3 -3
- package/dist/{chunk-X2V76VPG.js → chunk-3F5FAUCI.js} +1 -1
- package/dist/{chunk-YJ7VL7VL.js → chunk-AL3H7VI2.js} +1 -1
- package/dist/{chunk-B42HK6GL.js → chunk-DQW3TJ4M.js} +1 -1
- package/dist/{chunk-SMIQ6CBX.js → chunk-FIXDD5WC.js} +1 -1
- package/dist/{chunk-SVWIUNOA.js → chunk-IXGGIS3K.js} +1 -1
- package/dist/{chunk-CU5ZNAIX.js → chunk-KTN7YDXC.js} +1 -1
- package/dist/{chunk-PSXIVQ3N.js → chunk-LEZB4KKZ.js} +1 -0
- package/dist/{chunk-FOC2YWOF.js → chunk-P5HO5RXI.js} +1 -1
- package/dist/{chunk-U6OV523Y.js → chunk-TN62NEIY.js} +1 -1
- package/dist/{chunk-5ULLIOVC.js → chunk-TU3L3PW7.js} +5 -2
- package/dist/{chunk-2UZ23L5P.js → chunk-UPOFNYWD.js} +2 -2
- package/dist/{chunk-PSP4W2MG.js → chunk-VEBTQK3D.js} +38 -20
- package/dist/{chunk-3WKUKMBG.js → chunk-VUGDRRX3.js} +4 -4
- package/dist/{chunk-7QWFFLKV.js → chunk-X45KVQHD.js} +4 -4
- package/dist/ci-2YHS67DD.js +19 -0
- package/dist/{ci-format-CTGDLJTS.js → ci-format-AS3NBCVH.js} +2 -2
- package/dist/{constants-LJRYL7IN.js → constants-RMUULNCF.js} +1 -1
- package/dist/doctor-cli-UOSY3GL6.js +17 -0
- package/dist/electron-server.js +47 -23
- package/dist/{hub-4EEDUJED.js → hub-SIPD6DKN.js} +2 -2
- package/dist/{hub-server-XA7HTVLD.js → hub-server-QGUSMN22.js} +3 -0
- package/dist/index.js +34 -28
- package/dist/{persistent-memory-DMN76UB5.js → persistent-memory-ELW2QNRA.js} +2 -2
- package/dist/{persistent-memory-EEAGHDFR.js → persistent-memory-JIXASKVH.js} +2 -2
- package/dist/{pr-Q74YHWN2.js → pr-NI5ZF7LE.js} +7 -7
- package/dist/{run-tests-N3ES4YMU.js → run-tests-NSOI3UB5.js} +2 -2
- package/dist/{run-tests-ADZQ2JWI.js → run-tests-XZ4DN4NV.js} +2 -2
- package/dist/{server-HUWVPJKQ.js → server-52KYUXTT.js} +7 -7
- package/dist/{server-PMEZ3HDO.js → server-WIBGSOFE.js} +16 -14
- package/dist/{task-orchestrator-KLCN25OY.js → task-orchestrator-BPXLRZTU.js} +13 -7
- package/dist/{usage-MNMRX5OE.js → usage-K7GM44EG.js} +3 -3
- package/dist/web/client/app.js +3329 -3312
- package/dist/web/client/index.html +70 -70
- package/package.json +19 -9
- package/dist/ci-V5GVGYZO.js +0 -19
- package/dist/doctor-cli-GOM2GQUK.js +0 -17
|
@@ -17,20 +17,20 @@
|
|
|
17
17
|
CDN failed the whole UI rendered unstyled AND the `.hidden` login overlay
|
|
18
18
|
became visible (no users → "can't log in"). Serving locally makes the UI
|
|
19
19
|
work offline / behind GFW with zero behavior change. -->
|
|
20
|
-
<link href="vendor/daisyui-full.min.css" rel="stylesheet"
|
|
21
|
-
integrity="sha384-Qn1dWOhPHD8ZitIQRnpquZJZmyWs+sq1SKENTuBIc3+Yg16SG2u3RqsC8LVbkZre" crossorigin="anonymous">
|
|
22
|
-
<script src="vendor/tailwind.js"
|
|
23
|
-
integrity="sha384-igm5BeiBt36UU4gqwWS7imYmelpTsZlQ45FZf+XBn9MuJbn4nQr7yx1yFydocC/K" crossorigin="anonymous"></script>
|
|
24
|
-
<!-- Markdown + Code highlighting -->
|
|
25
|
-
<script src="vendor/marked.min.js"
|
|
26
|
-
integrity="sha384-948ahk4ZmxYVYOc+rxN1H2gM1EJ2Duhp7uHtZ4WSLkV4Vtx5MUqnV+l7u9B+jFv+" crossorigin="anonymous"></script>
|
|
27
|
-
<!-- P2-SEC-01: SRI integrity for both hljs themes — toggle disabled instead of changing href -->
|
|
28
|
-
<link id="hljs-theme-dark" rel="stylesheet" href="vendor/github-dark.min.css"
|
|
29
|
-
integrity="sha384-wH75j6z1lH97ZOpMOInqhgKzFkAInZPPSPlZpYKYTOqsaizPvhQZmAtLcPKXpLyH" crossorigin="anonymous">
|
|
30
|
-
<link id="hljs-theme-light" rel="stylesheet" href="vendor/github.min.css" disabled
|
|
31
|
-
integrity="sha384-eFTL69TLRZTkNfYZOLM+G04821K1qZao/4QLJbet1pP4tcF+fdXq/9CdqAbWRl/L" crossorigin="anonymous">
|
|
32
|
-
<script src="vendor/highlight.min.js"
|
|
33
|
-
integrity="sha384-F/bZzf7p3Joyp5psL90p/p89AZJsndkSoGwRpXcZhleCWhd8SnRuoYo4d0yirjJp" crossorigin="anonymous"></script>
|
|
20
|
+
<link href="vendor/daisyui-full.min.css" rel="stylesheet"
|
|
21
|
+
integrity="sha384-Qn1dWOhPHD8ZitIQRnpquZJZmyWs+sq1SKENTuBIc3+Yg16SG2u3RqsC8LVbkZre" crossorigin="anonymous">
|
|
22
|
+
<script src="vendor/tailwind.js"
|
|
23
|
+
integrity="sha384-igm5BeiBt36UU4gqwWS7imYmelpTsZlQ45FZf+XBn9MuJbn4nQr7yx1yFydocC/K" crossorigin="anonymous"></script>
|
|
24
|
+
<!-- Markdown + Code highlighting -->
|
|
25
|
+
<script src="vendor/marked.min.js"
|
|
26
|
+
integrity="sha384-948ahk4ZmxYVYOc+rxN1H2gM1EJ2Duhp7uHtZ4WSLkV4Vtx5MUqnV+l7u9B+jFv+" crossorigin="anonymous"></script>
|
|
27
|
+
<!-- P2-SEC-01: SRI integrity for both hljs themes — toggle disabled instead of changing href -->
|
|
28
|
+
<link id="hljs-theme-dark" rel="stylesheet" href="vendor/github-dark.min.css"
|
|
29
|
+
integrity="sha384-wH75j6z1lH97ZOpMOInqhgKzFkAInZPPSPlZpYKYTOqsaizPvhQZmAtLcPKXpLyH" crossorigin="anonymous">
|
|
30
|
+
<link id="hljs-theme-light" rel="stylesheet" href="vendor/github.min.css" disabled
|
|
31
|
+
integrity="sha384-eFTL69TLRZTkNfYZOLM+G04821K1qZao/4QLJbet1pP4tcF+fdXq/9CdqAbWRl/L" crossorigin="anonymous">
|
|
32
|
+
<script src="vendor/highlight.min.js"
|
|
33
|
+
integrity="sha384-F/bZzf7p3Joyp5psL90p/p89AZJsndkSoGwRpXcZhleCWhd8SnRuoYo4d0yirjJp" crossorigin="anonymous"></script>
|
|
34
34
|
<link rel="stylesheet" href="style.css">
|
|
35
35
|
</head>
|
|
36
36
|
<body class="bg-base-300 h-screen overflow-hidden">
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
<h1 class="text-2xl font-bold text-primary">ai-cli</h1>
|
|
44
44
|
<p id="auth-subtitle" class="text-sm text-base-content/60 mt-1">Sign in to continue</p>
|
|
45
45
|
</div>
|
|
46
|
-
<div id="auth-error" class="alert alert-error text-sm mb-4 hidden"></div>
|
|
46
|
+
<div id="auth-error" class="alert alert-error text-sm mb-4 hidden" role="alert" aria-live="assertive"></div>
|
|
47
47
|
<form id="auth-form" >
|
|
48
48
|
<div class="form-control mb-3">
|
|
49
|
-
<label class="label"><span class="label-text">Username</span></label>
|
|
49
|
+
<label class="label" for="auth-username"><span class="label-text">Username</span></label>
|
|
50
50
|
<input id="auth-username" type="text" class="input input-bordered w-full" placeholder="username" autocomplete="username" required minlength="2" maxlength="32">
|
|
51
51
|
</div>
|
|
52
52
|
<div class="form-control mb-4">
|
|
53
|
-
<label class="label"><span class="label-text">Password</span></label>
|
|
53
|
+
<label class="label" for="auth-password"><span class="label-text">Password</span></label>
|
|
54
54
|
<input id="auth-password" type="password" class="input input-bordered w-full" placeholder="password" autocomplete="current-password" required minlength="4">
|
|
55
55
|
</div>
|
|
56
56
|
<button id="auth-submit" type="submit" class="btn btn-primary w-full">Sign In</button>
|
|
@@ -72,17 +72,17 @@
|
|
|
72
72
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
|
|
73
73
|
</button>
|
|
74
74
|
<span class="text-lg font-bold text-primary brand-text">🤖 ai-cli</span>
|
|
75
|
-
<select id="provider-select" class="select select-sm select-bordered navbar-select" title="Provider"></select>
|
|
76
|
-
<select id="model-select" class="select select-sm select-bordered navbar-select" title="Model"></select>
|
|
75
|
+
<select id="provider-select" class="select select-sm select-bordered navbar-select" title="Provider" aria-label="Provider"></select>
|
|
76
|
+
<select id="model-select" class="select select-sm select-bordered navbar-select" title="Model" aria-label="Model"></select>
|
|
77
77
|
</div>
|
|
78
78
|
<div class="navbar-end gap-1">
|
|
79
|
-
<button id="btn-think" class="btn btn-sm btn-ghost" title="Toggle thinking mode">💭 Think</button>
|
|
80
|
-
<button id="btn-plan" class="btn btn-sm btn-ghost" title="Toggle plan mode">📋 Plan</button>
|
|
79
|
+
<button id="btn-think" class="btn btn-sm btn-ghost" title="Toggle thinking mode" aria-label="Toggle thinking mode">💭 Think</button>
|
|
80
|
+
<button id="btn-plan" class="btn btn-sm btn-ghost" title="Toggle plan mode" aria-label="Toggle plan mode">📋 Plan</button>
|
|
81
81
|
<div class="divider divider-horizontal mx-0"></div>
|
|
82
|
-
<button id="btn-clear" class="btn btn-sm btn-ghost" title="Clear conversation">🗑️</button>
|
|
83
|
-
<button id="btn-compact" class="btn btn-sm btn-ghost" title="Compact conversation">📦</button>
|
|
82
|
+
<button id="btn-clear" class="btn btn-sm btn-ghost" title="Clear conversation" aria-label="Clear conversation">🗑️</button>
|
|
83
|
+
<button id="btn-compact" class="btn btn-sm btn-ghost" title="Compact conversation" aria-label="Compact conversation">📦</button>
|
|
84
84
|
<div class="dropdown dropdown-end">
|
|
85
|
-
<
|
|
85
|
+
<button type="button" class="btn btn-sm btn-ghost" aria-label="Choose theme" aria-haspopup="menu">🎨</button>
|
|
86
86
|
<ul tabindex="0" class="dropdown-content menu bg-base-200 rounded-box z-10 w-40 p-2 shadow-lg border border-base-content/10">
|
|
87
87
|
<li><a data-theme-choice="dark">🌙 Dark</a></li>
|
|
88
88
|
<li><a data-theme-choice="night">🌃 Night</a></li>
|
|
@@ -95,12 +95,12 @@
|
|
|
95
95
|
</ul>
|
|
96
96
|
</div>
|
|
97
97
|
<!-- Enable Auth button (shown when no users registered) -->
|
|
98
|
-
<button id="btn-enable-auth" class="btn btn-sm btn-ghost hidden" title="Enable multi-user auth" data-action="show-enable-auth">👤 Enable Auth</button>
|
|
98
|
+
<button id="btn-enable-auth" class="btn btn-sm btn-ghost hidden" title="Enable multi-user auth" data-action="show-enable-auth" aria-label="Enable multi-user auth">👤 Enable Auth</button>
|
|
99
99
|
<!-- User menu (shown when authenticated) -->
|
|
100
100
|
<div id="user-menu" class="dropdown dropdown-end hidden">
|
|
101
|
-
<
|
|
101
|
+
<button type="button" class="btn btn-sm btn-ghost gap-1" aria-label="User menu" aria-haspopup="menu">
|
|
102
102
|
<span id="user-display">👤</span>
|
|
103
|
-
</
|
|
103
|
+
</button>
|
|
104
104
|
<ul tabindex="0" class="dropdown-content menu bg-base-200 rounded-box z-10 w-40 p-2 shadow-lg border border-base-content/10">
|
|
105
105
|
<li><a id="user-label" class="text-sm font-semibold pointer-events-none"></a></li>
|
|
106
106
|
<li><a data-action="logout">🚪 Logout</a></li>
|
|
@@ -115,31 +115,31 @@
|
|
|
115
115
|
<!-- Sidebar -->
|
|
116
116
|
<aside id="sidebar" class="sidebar bg-base-200 border-r border-base-content/10 flex flex-col flex-shrink-0 overflow-hidden">
|
|
117
117
|
<!-- Sidebar tabs -->
|
|
118
|
-
<div class="flex border-b border-base-content/10 flex-shrink-0">
|
|
119
|
-
<button class="sidebar-tab active flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="dashboard" title="Agent control dashboard">⌘ Dash</button>
|
|
120
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="sessions">📋 Sessions</button>
|
|
121
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="branches" title="Conversation branches (B2)">🌿 Branches</button>
|
|
122
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="tools">🔧 Tools</button>
|
|
123
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="files">📁 Files</button>
|
|
124
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="memory" title="Chat memory semantic recall (B4, v0.4.90)">🧠 Memory</button>
|
|
125
|
-
<button class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="hub" title="Multi-agent brainstorm room (P4)">🏛 Hub</button>
|
|
118
|
+
<div class="flex border-b border-base-content/10 flex-shrink-0" role="tablist" aria-label="Sidebar sections">
|
|
119
|
+
<button id="sidebar-tab-dashboard" class="sidebar-tab active flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="dashboard" role="tab" aria-controls="tab-dashboard" aria-selected="true" title="Agent control dashboard" aria-label="Agent control dashboard">⌘ Dash</button>
|
|
120
|
+
<button id="sidebar-tab-sessions" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="sessions" role="tab" aria-controls="tab-sessions" aria-selected="false" tabindex="-1">📋 Sessions</button>
|
|
121
|
+
<button id="sidebar-tab-branches" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="branches" role="tab" aria-controls="tab-branches" aria-selected="false" tabindex="-1" title="Conversation branches (B2)" aria-label="Conversation branches (B2)">🌿 Branches</button>
|
|
122
|
+
<button id="sidebar-tab-tools" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="tools" role="tab" aria-controls="tab-tools" aria-selected="false" tabindex="-1">🔧 Tools</button>
|
|
123
|
+
<button id="sidebar-tab-files" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="files" role="tab" aria-controls="tab-files" aria-selected="false" tabindex="-1">📁 Files</button>
|
|
124
|
+
<button id="sidebar-tab-memory" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="memory" role="tab" aria-controls="tab-memory" aria-selected="false" tabindex="-1" title="Chat memory semantic recall (B4, v0.4.90)" aria-label="Chat memory semantic recall (B4, v0.4.90)">🧠 Memory</button>
|
|
125
|
+
<button id="sidebar-tab-hub" class="sidebar-tab flex-1 text-xs font-semibold py-2 px-1 text-center" data-tab="hub" role="tab" aria-controls="tab-hub" aria-selected="false" tabindex="-1" title="Multi-agent brainstorm room (P4)" aria-label="Multi-agent brainstorm room (P4)">🏛 Hub</button>
|
|
126
126
|
</div>
|
|
127
127
|
<!-- Dashboard tab (Phase 6) -->
|
|
128
|
-
<div id="tab-dashboard" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden">
|
|
128
|
+
<div id="tab-dashboard" role="tabpanel" aria-labelledby="sidebar-tab-dashboard" aria-hidden="false" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden">
|
|
129
129
|
<div class="p-2 border-b border-base-content/10 flex items-center gap-1">
|
|
130
130
|
<span class="text-xs font-semibold flex-1">Agent Console</span>
|
|
131
|
-
<button id="btn-dashboard-refresh" class="btn btn-xs btn-ghost" title="Refresh dashboard">↻</button>
|
|
131
|
+
<button id="btn-dashboard-refresh" class="btn btn-xs btn-ghost" title="Refresh dashboard" aria-label="Refresh dashboard">↻</button>
|
|
132
132
|
</div>
|
|
133
133
|
<div id="dashboard-panel" class="dashboard-panel flex-1 overflow-y-auto p-2 text-sm">
|
|
134
134
|
<div class="text-xs opacity-40 text-center py-4">Waiting for status…</div>
|
|
135
135
|
</div>
|
|
136
136
|
</div>
|
|
137
137
|
<!-- Sessions tab -->
|
|
138
|
-
<div id="tab-sessions" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
138
|
+
<div id="tab-sessions" role="tabpanel" aria-labelledby="sidebar-tab-sessions" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
139
139
|
<div class="p-2 border-b border-base-content/10 flex items-center justify-between gap-1">
|
|
140
|
-
<input id="session-search" type="text" class="input input-xs input-bordered flex-1 min-w-0" placeholder="Search...">
|
|
141
|
-
<button id="btn-batch-select" class="btn btn-xs btn-ghost flex-shrink-0" title="Select multiple" data-action="toggle-batch-select">☑</button>
|
|
142
|
-
<button id="btn-new-session" class="btn btn-xs btn-primary btn-outline flex-shrink-0 whitespace-nowrap" title="New session">+ New</button>
|
|
140
|
+
<input id="session-search" type="text" aria-label="Search sessions" class="input input-xs input-bordered flex-1 min-w-0" placeholder="Search...">
|
|
141
|
+
<button id="btn-batch-select" class="btn btn-xs btn-ghost flex-shrink-0" title="Select multiple" data-action="toggle-batch-select" aria-label="Select multiple">☑</button>
|
|
142
|
+
<button id="btn-new-session" class="btn btn-xs btn-primary btn-outline flex-shrink-0 whitespace-nowrap" title="New session" aria-label="New session">+ New</button>
|
|
143
143
|
</div>
|
|
144
144
|
<!-- Batch action bar (hidden by default) -->
|
|
145
145
|
<div id="batch-bar" class="hidden px-2 py-1 border-b border-base-content/10 flex items-center gap-1 bg-base-300 text-xs">
|
|
@@ -154,10 +154,10 @@
|
|
|
154
154
|
</div>
|
|
155
155
|
</div>
|
|
156
156
|
<!-- Branches tab (B2) -->
|
|
157
|
-
<div id="tab-branches" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
157
|
+
<div id="tab-branches" role="tabpanel" aria-labelledby="sidebar-tab-branches" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
158
158
|
<div class="p-2 border-b border-base-content/10 flex items-center gap-1">
|
|
159
159
|
<span class="text-xs opacity-60 flex-1 truncate" id="branches-header">No session</span>
|
|
160
|
-
<button id="btn-branch-new" class="btn btn-xs btn-primary btn-outline flex-shrink-0 whitespace-nowrap" title="Fork at current tip">+ Fork</button>
|
|
160
|
+
<button id="btn-branch-new" class="btn btn-xs btn-primary btn-outline flex-shrink-0 whitespace-nowrap" title="Fork at current tip" aria-label="Fork at current tip">+ Fork</button>
|
|
161
161
|
</div>
|
|
162
162
|
<div id="branch-list" class="flex-1 overflow-y-auto p-2 flex flex-col gap-1 text-sm">
|
|
163
163
|
<div class="text-xs opacity-40 text-center py-4">Load a session to see branches</div>
|
|
@@ -165,19 +165,19 @@
|
|
|
165
165
|
</div>
|
|
166
166
|
|
|
167
167
|
<!-- Tools tab -->
|
|
168
|
-
<div id="tab-tools" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
168
|
+
<div id="tab-tools" role="tabpanel" aria-labelledby="sidebar-tab-tools" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
169
169
|
<div class="p-2 border-b border-base-content/10">
|
|
170
|
-
<input id="tools-search" type="text" class="input input-xs input-bordered w-full" placeholder="Search tools...">
|
|
170
|
+
<input id="tools-search" type="text" aria-label="Search tools" class="input input-xs input-bordered w-full" placeholder="Search tools...">
|
|
171
171
|
</div>
|
|
172
172
|
<div id="tools-list" class="flex-1 overflow-y-auto p-2 text-sm">
|
|
173
173
|
<div class="text-xs opacity-40 text-center py-4">Type /tools to load</div>
|
|
174
174
|
</div>
|
|
175
175
|
</div>
|
|
176
176
|
<!-- Files tab -->
|
|
177
|
-
<div id="tab-files" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
177
|
+
<div id="tab-files" role="tabpanel" aria-labelledby="sidebar-tab-files" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
178
178
|
<div class="p-2 border-b border-base-content/10 flex items-center gap-1">
|
|
179
179
|
<span class="text-xs opacity-40 flex-1 truncate" id="file-tree-cwd" title="">cwd</span>
|
|
180
|
-
<button id="btn-file-tree-refresh" class="btn btn-xs btn-ghost opacity-50 hover:opacity-100 flex-shrink-0" title="Refresh file tree">↺</button>
|
|
180
|
+
<button id="btn-file-tree-refresh" aria-label="Refresh file tree" class="btn btn-xs btn-ghost opacity-50 hover:opacity-100 flex-shrink-0" title="Refresh file tree">↺</button>
|
|
181
181
|
</div>
|
|
182
182
|
<div id="file-tree" class="flex-1 overflow-y-auto py-1 text-sm">
|
|
183
183
|
<div class="text-xs opacity-40 text-center py-4">Click tab to load</div>
|
|
@@ -185,11 +185,11 @@
|
|
|
185
185
|
</div>
|
|
186
186
|
|
|
187
187
|
<!-- Memory tab (B4, v0.4.90+) -->
|
|
188
|
-
<div id="tab-memory" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
188
|
+
<div id="tab-memory" role="tabpanel" aria-labelledby="sidebar-tab-memory" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
189
189
|
<div class="p-2 border-b border-base-content/10 flex flex-col gap-1">
|
|
190
190
|
<div class="flex items-center gap-1">
|
|
191
|
-
<input id="memory-search-input" type="text" class="input input-xs input-bordered flex-1 min-w-0" placeholder="Search past chats (semantic)…">
|
|
192
|
-
<button id="btn-memory-search" class="btn btn-xs btn-primary btn-outline flex-shrink-0" title="Search">🔍</button>
|
|
191
|
+
<input id="memory-search-input" type="text" aria-label="Search past chats" class="input input-xs input-bordered flex-1 min-w-0" placeholder="Search past chats (semantic)…">
|
|
192
|
+
<button id="btn-memory-search" aria-label="Search memory" class="btn btn-xs btn-primary btn-outline flex-shrink-0" title="Search">🔍</button>
|
|
193
193
|
</div>
|
|
194
194
|
<div class="flex items-center gap-1 text-xs">
|
|
195
195
|
<label class="flex items-center gap-1 opacity-70 cursor-pointer">
|
|
@@ -197,15 +197,15 @@
|
|
|
197
197
|
<span>exclude current</span>
|
|
198
198
|
</label>
|
|
199
199
|
<span class="flex-1"></span>
|
|
200
|
-
<button id="btn-memory-refresh" class="btn btn-xs btn-ghost" title="Incremental refresh">↻</button>
|
|
201
|
-
<button id="btn-memory-rebuild" class="btn btn-xs btn-ghost" title="Full rebuild (slow first run)">⟳ Rebuild</button>
|
|
200
|
+
<button id="btn-memory-refresh" class="btn btn-xs btn-ghost" title="Incremental refresh" aria-label="Incremental refresh">↻</button>
|
|
201
|
+
<button id="btn-memory-rebuild" class="btn btn-xs btn-ghost" title="Full rebuild (slow first run)" aria-label="Full rebuild (slow first run)">⟳ Rebuild</button>
|
|
202
202
|
</div>
|
|
203
203
|
<div id="memory-status" class="text-xs opacity-50 truncate">Loading index status…</div>
|
|
204
204
|
<div id="memory-governance" class="border-t border-base-content/10 pt-2 mt-1">
|
|
205
205
|
<div class="flex items-center gap-1 mb-1">
|
|
206
206
|
<span class="text-xs font-semibold flex-1">Persistent memory</span>
|
|
207
|
-
<button id="btn-memory-managed-refresh" class="btn btn-xs btn-ghost" title="Refresh persistent memory">↻</button>
|
|
208
|
-
<button id="btn-memory-managed-export" class="btn btn-xs btn-ghost" title="Export persistent memory">Export</button>
|
|
207
|
+
<button id="btn-memory-managed-refresh" class="btn btn-xs btn-ghost" title="Refresh persistent memory" aria-label="Refresh persistent memory">↻</button>
|
|
208
|
+
<button id="btn-memory-managed-export" class="btn btn-xs btn-ghost" title="Export persistent memory" aria-label="Export persistent memory">Export</button>
|
|
209
209
|
</div>
|
|
210
210
|
<div id="memory-managed-list" class="flex flex-col gap-1 max-h-48 overflow-y-auto text-xs">
|
|
211
211
|
<div class="opacity-40 py-1">Loading persistent memory…</div>
|
|
@@ -218,10 +218,10 @@
|
|
|
218
218
|
</div>
|
|
219
219
|
|
|
220
220
|
<!-- Hub tab (P4) — multi-agent brainstorm room -->
|
|
221
|
-
<div id="tab-hub" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
221
|
+
<div id="tab-hub" role="tabpanel" aria-labelledby="sidebar-tab-hub" aria-hidden="true" class="sidebar-tab-content flex flex-col flex-1 overflow-hidden hidden">
|
|
222
222
|
<div class="p-2 flex flex-col gap-2 overflow-y-auto">
|
|
223
223
|
<p class="text-xs opacity-60 leading-snug">Several AI agents discuss a topic in the chat area, then a structured summary is saved to history (open it and hit 🎬 to replay).</p>
|
|
224
|
-
<textarea id="hub-topic" class="textarea textarea-bordered textarea-sm w-full" rows="2" placeholder="Discussion topic…"></textarea>
|
|
224
|
+
<textarea id="hub-topic" aria-label="Discussion topic" class="textarea textarea-bordered textarea-sm w-full" rows="2" placeholder="Discussion topic…"></textarea>
|
|
225
225
|
<label class="text-xs opacity-70">Preset
|
|
226
226
|
<select id="hub-preset" class="select select-bordered select-xs w-full mt-1">
|
|
227
227
|
<option value="brainstorm">brainstorm — 创意者·分析师·执行者</option>
|
|
@@ -261,9 +261,9 @@
|
|
|
261
261
|
<!-- Session Tab Bar -->
|
|
262
262
|
<div id="session-tabs" class="session-tab-bar bg-base-200 border-b border-base-content/10 flex-shrink-0">
|
|
263
263
|
<div id="session-tabs-list" class="session-tabs-scroll"></div>
|
|
264
|
-
<button id="btn-add-tab" class="session-tab-add" title="New tab">+</button>
|
|
264
|
+
<button id="btn-add-tab" class="session-tab-add" title="New tab" aria-label="New tab">+</button>
|
|
265
265
|
</div>
|
|
266
|
-
<main id="chat-area" class="flex-1 overflow-y-auto px-4 py-4 relative">
|
|
266
|
+
<main id="chat-area" aria-label="Conversation" class="flex-1 overflow-y-auto px-4 py-4 relative">
|
|
267
267
|
<!-- Round progress bar (sticky top, hidden by default) -->
|
|
268
268
|
<div id="round-progress" class="round-progress-bar hidden">
|
|
269
269
|
<div class="round-progress-inner">
|
|
@@ -288,26 +288,26 @@
|
|
|
288
288
|
<!-- ── Input Area ─────────────────────────────────── -->
|
|
289
289
|
<footer class="bg-base-200 border-t border-base-content/10 px-4 py-3 flex-shrink-0 input-footer">
|
|
290
290
|
<div class="max-w-4xl mx-auto flex gap-2 items-end">
|
|
291
|
-
<button id="btn-templates" class="btn btn-ghost btn-square btn-sm self-center" title="Prompt templates">
|
|
291
|
+
<button id="btn-templates" class="btn btn-ghost btn-square btn-sm self-center" title="Prompt templates" aria-label="Prompt templates">
|
|
292
292
|
<span class="text-lg">📝</span>
|
|
293
293
|
</button>
|
|
294
|
-
<textarea id="user-input"
|
|
294
|
+
<textarea id="user-input" aria-label="Message"
|
|
295
295
|
class="textarea textarea-bordered flex-1 min-h-[2.75rem] max-h-[200px] resize-none leading-relaxed"
|
|
296
296
|
placeholder="Type a message... (Shift+Enter for newline)"
|
|
297
297
|
rows="1"></textarea>
|
|
298
|
-
<button id="btn-send" class="btn btn-primary btn-square" title="Send">
|
|
298
|
+
<button id="btn-send" class="btn btn-primary btn-square" title="Send" aria-label="Send message">
|
|
299
299
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="currentColor">
|
|
300
300
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/>
|
|
301
301
|
</svg>
|
|
302
302
|
</button>
|
|
303
|
-
<button id="btn-stop" class="btn btn-error btn-square hidden" title="Stop">
|
|
303
|
+
<button id="btn-stop" class="btn btn-error btn-square hidden" title="Stop" aria-label="Stop response">
|
|
304
304
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="currentColor">
|
|
305
305
|
<rect x="6" y="6" width="12" height="12" rx="1"/>
|
|
306
306
|
</svg>
|
|
307
307
|
</button>
|
|
308
308
|
</div>
|
|
309
309
|
<!-- Status bar -->
|
|
310
|
-
<div class="max-w-4xl mx-auto flex gap-4 mt-2 text-xs opacity-50">
|
|
310
|
+
<div class="max-w-4xl mx-auto flex gap-4 mt-2 text-xs opacity-50" role="status" aria-live="polite">
|
|
311
311
|
<span id="status-session"></span>
|
|
312
312
|
<span id="status-tokens"></span>
|
|
313
313
|
<span id="connection-status">⚪ Connecting...</span>
|
|
@@ -317,14 +317,14 @@
|
|
|
317
317
|
</div>
|
|
318
318
|
|
|
319
319
|
<!-- ── Prompt Templates Modal ───────────────────────── -->
|
|
320
|
-
<dialog id="templates-modal" class="modal">
|
|
320
|
+
<dialog id="templates-modal" class="modal" aria-labelledby="templates-modal-title">
|
|
321
321
|
<div class="modal-box max-w-2xl bg-base-200">
|
|
322
322
|
<div class="flex items-center justify-between mb-3">
|
|
323
|
-
<h3 class="font-bold text-lg">📝 Prompt Templates</h3>
|
|
323
|
+
<h3 id="templates-modal-title" class="font-bold text-lg">📝 Prompt Templates</h3>
|
|
324
324
|
<div class="flex gap-1">
|
|
325
|
-
<button class="btn btn-xs btn-ghost" data-action="import-templates" title="Import">📥 Import</button>
|
|
326
|
-
<button class="btn btn-xs btn-ghost" data-action="export-templates" title="Export">📤 Export</button>
|
|
327
|
-
<button class="btn btn-xs btn-ghost" data-action="show-add-template" title="New template">+ New</button>
|
|
325
|
+
<button class="btn btn-xs btn-ghost" data-action="import-templates" title="Import" aria-label="Import">📥 Import</button>
|
|
326
|
+
<button class="btn btn-xs btn-ghost" data-action="export-templates" title="Export" aria-label="Export">📤 Export</button>
|
|
327
|
+
<button class="btn btn-xs btn-ghost" data-action="show-add-template" title="New template" aria-label="New template">+ New</button>
|
|
328
328
|
</div>
|
|
329
329
|
</div>
|
|
330
330
|
|
|
@@ -354,10 +354,10 @@
|
|
|
354
354
|
</dialog>
|
|
355
355
|
|
|
356
356
|
<!-- ── Session Replay Modal (B1) ───────────────────────── -->
|
|
357
|
-
<dialog id="replay-modal" class="modal">
|
|
357
|
+
<dialog id="replay-modal" class="modal" aria-labelledby="replay-modal-title">
|
|
358
358
|
<div class="modal-box max-w-5xl bg-base-200 w-11/12">
|
|
359
359
|
<div class="flex items-center justify-between mb-3">
|
|
360
|
-
<h3 class="font-bold text-lg">🎬 Session Replay</h3>
|
|
360
|
+
<h3 id="replay-modal-title" class="font-bold text-lg">🎬 Session Replay</h3>
|
|
361
361
|
<form method="dialog"><button class="btn btn-sm btn-ghost">✕</button></form>
|
|
362
362
|
</div>
|
|
363
363
|
<div id="replay-meta" class="text-xs opacity-70 mb-2"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jinzd-ai-cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.256",
|
|
4
4
|
"description": "Cross-platform REPL-style AI CLI with multi-provider support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,9 +22,12 @@
|
|
|
22
22
|
"test:watch": "vitest",
|
|
23
23
|
"test:coverage": "vitest run --coverage",
|
|
24
24
|
"test:dist": "npm run build && vitest run tests/unit/cli/version-drift.test.ts",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
25
26
|
"lint": "eslint src --max-warnings=0",
|
|
26
27
|
"smoke:dist": "node scripts/smoke-dist.mjs",
|
|
27
|
-
"
|
|
28
|
+
"sbom": "cyclonedx-npm --output-file bom.json",
|
|
29
|
+
"verify": "npm run lint && npm run typecheck && npm run build && npm run test:coverage && npm run smoke:dist",
|
|
30
|
+
"prepublishOnly": "npm run verify",
|
|
28
31
|
"patch": "node scripts/patch-sqlite.mjs",
|
|
29
32
|
"pack:win": "npm run build && npm run patch && npx pkg dist-cjs/index.cjs --target node22-win-x64 --output release/ai-cli-win.exe --compress GZip --options no-deprecation",
|
|
30
33
|
"pack:mac": "npm run build && npm run patch && npx pkg dist-cjs/index.cjs --target node22-macos-arm64 --output release/ai-cli-mac --compress GZip --options no-deprecation",
|
|
@@ -54,7 +57,7 @@
|
|
|
54
57
|
"options": "no-deprecation"
|
|
55
58
|
},
|
|
56
59
|
"engines": {
|
|
57
|
-
"node": ">=20.
|
|
60
|
+
"node": ">=20.18.1"
|
|
58
61
|
},
|
|
59
62
|
"files": [
|
|
60
63
|
"dist/*.js",
|
|
@@ -84,7 +87,7 @@
|
|
|
84
87
|
"dependencies": {
|
|
85
88
|
"@anthropic-ai/sdk": "^0.39.0",
|
|
86
89
|
"@google/generative-ai": "^0.24.0",
|
|
87
|
-
"@huggingface/transformers": "^4.
|
|
90
|
+
"@huggingface/transformers": "^4.2.0",
|
|
88
91
|
"@inquirer/prompts": "^7.0.0",
|
|
89
92
|
"chalk": "^5.4.1",
|
|
90
93
|
"commander": "^13.0.0",
|
|
@@ -97,13 +100,14 @@
|
|
|
97
100
|
"tree-sitter-python": "^0.25.0",
|
|
98
101
|
"tree-sitter-rust": "^0.24.0",
|
|
99
102
|
"tree-sitter-typescript": "^0.23.2",
|
|
100
|
-
"undici": "^7.
|
|
103
|
+
"undici": "^7.29.0",
|
|
101
104
|
"uuid": "^14.0.0",
|
|
102
105
|
"web-tree-sitter": "^0.26.8",
|
|
103
|
-
"ws": "^8.
|
|
106
|
+
"ws": "^8.21.1",
|
|
104
107
|
"zod": "^3.24.1"
|
|
105
108
|
},
|
|
106
109
|
"devDependencies": {
|
|
110
|
+
"@cyclonedx/cyclonedx-npm": "6.0.0",
|
|
107
111
|
"@playwright/test": "^1.60.0",
|
|
108
112
|
"@types/express": "^5.0.6",
|
|
109
113
|
"@types/node": "^22.10.0",
|
|
@@ -111,14 +115,20 @@
|
|
|
111
115
|
"@types/ws": "^8.18.1",
|
|
112
116
|
"@typescript-eslint/eslint-plugin": "^8.13.0",
|
|
113
117
|
"@typescript-eslint/parser": "^8.13.0",
|
|
114
|
-
"@
|
|
118
|
+
"@vitest/coverage-v8": "3.2.7",
|
|
119
|
+
"@yao-pkg/pkg": "^6.22.0",
|
|
115
120
|
"electron": "^41.4.0",
|
|
116
|
-
"electron-builder": "^26.
|
|
121
|
+
"electron-builder": "^26.15.3",
|
|
117
122
|
"eslint": "^9.13.0",
|
|
118
123
|
"tsup": "^8.3.5",
|
|
119
124
|
"tsx": "^4.19.2",
|
|
120
125
|
"typescript": "^5.7.3",
|
|
121
|
-
"vitest": "
|
|
126
|
+
"vitest": "3.2.7"
|
|
127
|
+
},
|
|
128
|
+
"overrides": {
|
|
129
|
+
"adm-zip": "0.6.0",
|
|
130
|
+
"esbuild": "0.28.1",
|
|
131
|
+
"sharp": "0.35.0"
|
|
122
132
|
},
|
|
123
133
|
"author": "jinzd",
|
|
124
134
|
"build": {
|
package/dist/ci-V5GVGYZO.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
CI_COMMENT_MARKER,
|
|
4
|
-
countSeverity,
|
|
5
|
-
runCi
|
|
6
|
-
} from "./chunk-7QWFFLKV.js";
|
|
7
|
-
import "./chunk-SMIQ6CBX.js";
|
|
8
|
-
import "./chunk-HLWUDRBO.js";
|
|
9
|
-
import "./chunk-ZRBGH245.js";
|
|
10
|
-
import "./chunk-IRSNREEO.js";
|
|
11
|
-
import "./chunk-PSXIVQ3N.js";
|
|
12
|
-
import "./chunk-5ULLIOVC.js";
|
|
13
|
-
import "./chunk-SVWIUNOA.js";
|
|
14
|
-
import "./chunk-IW3Q7AE5.js";
|
|
15
|
-
export {
|
|
16
|
-
CI_COMMENT_MARKER,
|
|
17
|
-
countSeverity,
|
|
18
|
-
runCi
|
|
19
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
formatDoctorReport,
|
|
4
|
-
runDoctorCli
|
|
5
|
-
} from "./chunk-3WKUKMBG.js";
|
|
6
|
-
import "./chunk-ZRBGH245.js";
|
|
7
|
-
import "./chunk-IRSNREEO.js";
|
|
8
|
-
import "./chunk-FOC2YWOF.js";
|
|
9
|
-
import "./chunk-PSXIVQ3N.js";
|
|
10
|
-
import "./chunk-5ULLIOVC.js";
|
|
11
|
-
import "./chunk-HOSJZMQS.js";
|
|
12
|
-
import "./chunk-SVWIUNOA.js";
|
|
13
|
-
import "./chunk-IW3Q7AE5.js";
|
|
14
|
-
export {
|
|
15
|
-
formatDoctorReport,
|
|
16
|
-
runDoctorCli
|
|
17
|
-
};
|