@qnote/q-ai-note 1.0.6 → 1.0.8

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 (50) hide show
  1. package/README.md +11 -14
  2. package/dist/cli.js +18 -31
  3. package/dist/cli.js.map +1 -1
  4. package/dist/server/accessControl.d.ts +29 -0
  5. package/dist/server/accessControl.d.ts.map +1 -0
  6. package/dist/server/accessControl.js +161 -0
  7. package/dist/server/accessControl.js.map +1 -0
  8. package/dist/server/api/accessHelpers.d.ts +11 -0
  9. package/dist/server/api/accessHelpers.d.ts.map +1 -0
  10. package/dist/server/api/accessHelpers.js +45 -0
  11. package/dist/server/api/accessHelpers.js.map +1 -0
  12. package/dist/server/api/chat.d.ts.map +1 -1
  13. package/dist/server/api/chat.js +31 -0
  14. package/dist/server/api/chat.js.map +1 -1
  15. package/dist/server/api/diary.d.ts.map +1 -1
  16. package/dist/server/api/diary.js +61 -1
  17. package/dist/server/api/diary.js.map +1 -1
  18. package/dist/server/api/nodeEntities.d.ts.map +1 -1
  19. package/dist/server/api/nodeEntities.js +31 -0
  20. package/dist/server/api/nodeEntities.js.map +1 -1
  21. package/dist/server/api/projectSettings.d.ts +3 -0
  22. package/dist/server/api/projectSettings.d.ts.map +1 -0
  23. package/dist/server/api/projectSettings.js +29 -0
  24. package/dist/server/api/projectSettings.js.map +1 -0
  25. package/dist/server/api/sandbox.d.ts.map +1 -1
  26. package/dist/server/api/sandbox.js +35 -1
  27. package/dist/server/api/sandbox.js.map +1 -1
  28. package/dist/server/api/settings.d.ts.map +1 -1
  29. package/dist/server/api/settings.js +25 -1
  30. package/dist/server/api/settings.js.map +1 -1
  31. package/dist/server/api/workItem.d.ts.map +1 -1
  32. package/dist/server/api/workItem.js +59 -0
  33. package/dist/server/api/workItem.js.map +1 -1
  34. package/dist/server/config.d.ts +3 -2
  35. package/dist/server/config.d.ts.map +1 -1
  36. package/dist/server/config.js +6 -1
  37. package/dist/server/config.js.map +1 -1
  38. package/dist/server/index.d.ts +2 -1
  39. package/dist/server/index.d.ts.map +1 -1
  40. package/dist/server/index.js +51 -11
  41. package/dist/server/index.js.map +1 -1
  42. package/dist/server/projectConfig.d.ts +37 -0
  43. package/dist/server/projectConfig.d.ts.map +1 -0
  44. package/dist/server/projectConfig.js +180 -0
  45. package/dist/server/projectConfig.js.map +1 -0
  46. package/dist/web/app.js +618 -39
  47. package/dist/web/index.html +103 -59
  48. package/dist/web/styles.css +194 -4
  49. package/dist/web/vueRenderers.js +7 -5
  50. package/package.json +2 -3
@@ -21,7 +21,8 @@
21
21
  <li><a href="#/sandboxes" data-nav="sandboxes">沙盘</a></li>
22
22
  <li><a href="#/diaries" data-nav="diaries">日记</a></li>
23
23
  <li><a href="#/changes" data-nav="changes">变化</a></li>
24
- <li><a href="#/settings" data-nav="settings">设置</a></li>
24
+ <li><a href="#/settings" data-nav="settings">项目设置</a></li>
25
+ <li><a href="#/system-settings" data-nav="system-settings">系统设置</a></li>
25
26
  </ul>
26
27
  </nav>
27
28
  <main class="content">
@@ -112,72 +113,83 @@
112
113
  <div class="drawer-subtitle" id="drawer-node-title"></div>
113
114
  </div>
114
115
  <div class="drawer-header-actions">
115
- <button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
116
116
  <button class="btn btn-secondary btn-sm" id="close-node-drawer-btn">关闭</button>
117
117
  </div>
118
118
  </div>
119
- <div class="summary-strip compact" id="node-entity-summary"></div>
120
- <div class="drawer-diary-quick-form">
121
- <div class="sandbox-diary-quick-meta">
122
- <span id="sandbox-diary-target-label">快速日记:未选中节点</span>
123
- </div>
124
- <textarea id="drawer-diary-content" placeholder="记录进展(日记支持 Markdown)"></textarea>
125
- <div class="sandbox-diary-quick-actions">
126
- <button class="btn btn-primary btn-sm" id="drawer-diary-save-btn" type="button">记录日记</button>
127
- </div>
128
- </div>
129
- <div class="entity-filter-tabs" id="entity-filter-tabs">
130
- <button class="btn btn-secondary btn-sm active" data-entity-filter="all">全部</button>
131
- <button class="btn btn-secondary btn-sm" data-entity-filter="issue">Issue</button>
132
- <button class="btn btn-secondary btn-sm" data-entity-filter="knowledge">Knowledge</button>
133
- <button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
134
- <button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
135
- </div>
136
-
137
- <div class="drawer-create-form hidden" id="drawer-create-form">
138
- <select id="entity-type-select">
139
- <option value="issue">Issue</option>
140
- <option value="knowledge">Knowledge</option>
141
- <option value="capability">Capability</option>
142
- </select>
143
- <input type="text" id="entity-title-input" placeholder="标题(必填)">
144
- <div class="entity-field-group" id="entity-assignee-group">
145
- <input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
119
+ <section class="drawer-section">
120
+ <div class="drawer-section-title">节点概览</div>
121
+ <div class="summary-strip compact" id="node-entity-summary"></div>
122
+ </section>
123
+ <section class="drawer-section">
124
+ <div class="drawer-section-title">快速日记</div>
125
+ <div class="drawer-diary-quick-form">
126
+ <div class="sandbox-diary-quick-meta">
127
+ <span id="sandbox-diary-target-label">快速日记:未选中节点</span>
128
+ </div>
129
+ <textarea id="drawer-diary-content" placeholder="记录进展(日记支持 Markdown)"></textarea>
130
+ <div class="sandbox-diary-quick-actions">
131
+ <button class="btn btn-primary btn-sm" id="drawer-diary-save-btn" type="button">记录日记</button>
132
+ </div>
146
133
  </div>
147
- <div class="entity-field-group" id="entity-status-group">
148
- <select id="entity-status-select"></select>
134
+ </section>
135
+ <section class="drawer-section">
136
+ <div class="drawer-section-title-row">
137
+ <div class="drawer-section-title">记录管理</div>
138
+ <button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
149
139
  </div>
150
- <div class="entity-field-group" id="entity-priority-group">
151
- <select id="entity-priority-select">
152
- <option value="">优先级(Issue可选)</option>
153
- <option value="low">low</option>
154
- <option value="medium">medium</option>
155
- <option value="high">high</option>
156
- <option value="critical">critical</option>
157
- </select>
140
+ <div class="entity-filter-tabs" id="entity-filter-tabs">
141
+ <button class="btn btn-secondary btn-sm active" data-entity-filter="all">全部</button>
142
+ <button class="btn btn-secondary btn-sm" data-entity-filter="issue">Issue</button>
143
+ <button class="btn btn-secondary btn-sm" data-entity-filter="knowledge">Knowledge</button>
144
+ <button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
145
+ <button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
158
146
  </div>
159
- <div class="entity-field-group" id="entity-capability-type-group">
160
- <select id="entity-capability-type-input">
161
- <option value="">能力类型(Capability可选)</option>
162
- <option value="workflow">workflow(流程能力)</option>
163
- <option value="automation">automation(自动化能力)</option>
164
- <option value="tooling">tooling(工具能力)</option>
165
- <option value="collaboration">collaboration(协作能力)</option>
166
- <option value="analysis">analysis(分析能力)</option>
167
- <option value="delivery">delivery(交付能力)</option>
168
- <option value="governance">governance(治理能力)</option>
169
- <option value="other">other(其他)</option>
147
+
148
+ <div class="drawer-create-form hidden" id="drawer-create-form">
149
+ <select id="entity-type-select">
150
+ <option value="issue">Issue</option>
151
+ <option value="knowledge">Knowledge</option>
152
+ <option value="capability">Capability</option>
170
153
  </select>
154
+ <input type="text" id="entity-title-input" placeholder="标题(必填)">
155
+ <div class="entity-field-group" id="entity-assignee-group">
156
+ <input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
157
+ </div>
158
+ <div class="entity-field-group" id="entity-status-group">
159
+ <select id="entity-status-select"></select>
160
+ </div>
161
+ <div class="entity-field-group" id="entity-priority-group">
162
+ <select id="entity-priority-select">
163
+ <option value="">优先级(Issue可选)</option>
164
+ <option value="low">low</option>
165
+ <option value="medium">medium</option>
166
+ <option value="high">high</option>
167
+ <option value="critical">critical</option>
168
+ </select>
169
+ </div>
170
+ <div class="entity-field-group" id="entity-capability-type-group">
171
+ <select id="entity-capability-type-input">
172
+ <option value="">能力类型(Capability可选)</option>
173
+ <option value="workflow">workflow(流程能力)</option>
174
+ <option value="automation">automation(自动化能力)</option>
175
+ <option value="tooling">tooling(工具能力)</option>
176
+ <option value="collaboration">collaboration(协作能力)</option>
177
+ <option value="analysis">analysis(分析能力)</option>
178
+ <option value="delivery">delivery(交付能力)</option>
179
+ <option value="governance">governance(治理能力)</option>
180
+ <option value="other">other(其他)</option>
181
+ </select>
182
+ </div>
183
+ <textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
184
+ <div class="entity-form-hint" id="entity-form-hint"></div>
185
+ <div class="entity-form-actions">
186
+ <button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
187
+ <button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
188
+ </div>
171
189
  </div>
172
- <textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
173
- <div class="entity-form-hint" id="entity-form-hint"></div>
174
- <div class="entity-form-actions">
175
- <button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
176
- <button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
177
- </div>
178
- </div>
179
190
 
180
- <div class="drawer-list" id="node-entity-list"></div>
191
+ <div class="drawer-list" id="node-entity-list"></div>
192
+ </section>
181
193
  </aside>
182
194
  </div>
183
195
  </div>
@@ -249,7 +261,35 @@
249
261
  </div>
250
262
 
251
263
  <div id="page-settings" class="page hidden">
252
- <h2>设置</h2>
264
+ <h2>项目设置</h2>
265
+ <div class="settings-form">
266
+ <div class="setting-group project-setting-section">
267
+ <div class="project-setting-header">
268
+ <label>Users(按 IP 精确匹配,IP 不能复用)</label>
269
+ <button class="btn btn-secondary btn-sm" id="add-project-user-btn" type="button">+ 添加用户</button>
270
+ </div>
271
+ <div class="project-setting-list" id="project-users-list"></div>
272
+ </div>
273
+ <div class="setting-group project-setting-section">
274
+ <div class="project-setting-header">
275
+ <label>Profiles(支持 apply_to_all_users)</label>
276
+ <button class="btn btn-secondary btn-sm" id="add-project-profile-btn" type="button">+ 添加 Profile</button>
277
+ </div>
278
+ <div class="project-setting-list" id="project-profiles-list"></div>
279
+ </div>
280
+ <div class="setting-group project-setting-section">
281
+ <div class="project-setting-header">
282
+ <label>Bindings(user -> profiles)</label>
283
+ <button class="btn btn-secondary btn-sm" id="add-project-binding-btn" type="button">+ 添加绑定</button>
284
+ </div>
285
+ <div class="project-setting-list" id="project-bindings-list"></div>
286
+ </div>
287
+ <button class="btn btn-primary" id="save-project-settings-btn">保存项目设置</button>
288
+ </div>
289
+ </div>
290
+
291
+ <div id="page-system-settings" class="page hidden">
292
+ <h2>系统设置</h2>
253
293
  <div class="settings-form">
254
294
  <div class="setting-group">
255
295
  <label>API URL</label>
@@ -268,6 +308,10 @@
268
308
  <div class="settings-kv-list" id="setting-headers-list"></div>
269
309
  <button class="btn btn-secondary btn-sm" id="add-setting-header-btn" type="button">+ 添加 Header</button>
270
310
  </div>
311
+ <div class="setting-group">
312
+ <label>系统可编辑 IP(精确 IP,一行一个)</label>
313
+ <textarea id="setting-editable-ips" rows="5" placeholder="10.1.2.3&#10;192.168.1.20"></textarea>
314
+ </div>
271
315
  <button class="btn btn-primary" id="save-settings-btn">保存</button>
272
316
  </div>
273
317
  </div>
@@ -134,6 +134,11 @@ body {
134
134
  animation: fadeIn 0.2s ease;
135
135
  }
136
136
 
137
+ #page-sandbox-detail {
138
+ max-width: none;
139
+ margin: 0;
140
+ }
141
+
137
142
  .page.hidden {
138
143
  display: none;
139
144
  }
@@ -808,6 +813,18 @@ h2 {
808
813
  border-top: 1.2px solid #9bb3d8;
809
814
  }
810
815
 
816
+ /* Last sibling ends with an "L" connector */
817
+ .lane-tree-children > .lane-tree-node:last-child::after {
818
+ content: '';
819
+ position: absolute;
820
+ left: -10px;
821
+ top: 13px;
822
+ bottom: -2px;
823
+ width: 2px;
824
+ background: var(--bg-secondary);
825
+ pointer-events: none;
826
+ }
827
+
811
828
  .dense-lane > .dense-lane-body > .lane-tree-node > .lane-tree-node-row::before {
812
829
  display: none;
813
830
  }
@@ -1581,7 +1598,7 @@ h2 {
1581
1598
  background: var(--bg);
1582
1599
  border-radius: 12px;
1583
1600
  padding: 24px;
1584
- max-width: 600px;
1601
+ max-width: 980px;
1585
1602
  box-shadow: var(--shadow);
1586
1603
  }
1587
1604
 
@@ -1628,6 +1645,160 @@ h2 {
1628
1645
  width: 100%;
1629
1646
  }
1630
1647
 
1648
+ .project-setting-section {
1649
+ border: 1px solid var(--border);
1650
+ border-radius: 10px;
1651
+ padding: 12px;
1652
+ background: #fcfdff;
1653
+ }
1654
+
1655
+ .project-setting-header {
1656
+ display: flex;
1657
+ align-items: center;
1658
+ justify-content: space-between;
1659
+ gap: 10px;
1660
+ margin-bottom: 10px;
1661
+ }
1662
+
1663
+ .project-setting-list {
1664
+ display: flex;
1665
+ flex-direction: column;
1666
+ gap: 10px;
1667
+ }
1668
+
1669
+ .project-empty {
1670
+ font-size: 12px;
1671
+ color: var(--text-secondary);
1672
+ background: var(--bg);
1673
+ border: 1px dashed var(--border);
1674
+ border-radius: 8px;
1675
+ padding: 10px;
1676
+ }
1677
+
1678
+ .project-row {
1679
+ display: grid;
1680
+ grid-template-columns: minmax(150px, 0.9fr) minmax(180px, 1fr) minmax(360px, 1.8fr) auto;
1681
+ gap: 8px;
1682
+ align-items: center;
1683
+ }
1684
+
1685
+ .project-row select,
1686
+ .project-profile-grid select,
1687
+ .project-profile-grid input,
1688
+ .project-row input {
1689
+ width: 100%;
1690
+ border: 1px solid var(--border);
1691
+ border-radius: 8px;
1692
+ padding: 8px 10px;
1693
+ font-size: 13px;
1694
+ background: var(--bg);
1695
+ }
1696
+
1697
+ .project-ip-editor {
1698
+ border: 1px solid var(--border);
1699
+ border-radius: 8px;
1700
+ background: var(--bg);
1701
+ padding: 8px;
1702
+ display: flex;
1703
+ flex-direction: column;
1704
+ gap: 8px;
1705
+ }
1706
+
1707
+ .project-ip-chips {
1708
+ display: flex;
1709
+ flex-wrap: wrap;
1710
+ gap: 6px;
1711
+ min-height: 24px;
1712
+ }
1713
+
1714
+ .project-ip-chip {
1715
+ display: inline-flex;
1716
+ align-items: center;
1717
+ gap: 6px;
1718
+ padding: 2px 8px;
1719
+ border-radius: 999px;
1720
+ background: #eef4ff;
1721
+ border: 1px solid #c7d9ff;
1722
+ color: #1d4fae;
1723
+ font-size: 12px;
1724
+ }
1725
+
1726
+ .project-ip-remove {
1727
+ border: none;
1728
+ background: transparent;
1729
+ color: #1d4fae;
1730
+ cursor: pointer;
1731
+ font-size: 14px;
1732
+ line-height: 1;
1733
+ }
1734
+
1735
+ .project-ip-input-row {
1736
+ display: grid;
1737
+ grid-template-columns: 1fr auto;
1738
+ gap: 8px;
1739
+ align-items: center;
1740
+ }
1741
+
1742
+ .project-row.compact {
1743
+ grid-template-columns: 1fr 160px auto;
1744
+ }
1745
+
1746
+ .project-profile-card,
1747
+ .project-binding-card {
1748
+ border: 1px solid var(--border);
1749
+ background: var(--bg);
1750
+ border-radius: 8px;
1751
+ padding: 10px;
1752
+ display: flex;
1753
+ flex-direction: column;
1754
+ gap: 10px;
1755
+ }
1756
+
1757
+ .project-profile-grid {
1758
+ display: grid;
1759
+ grid-template-columns: minmax(170px, 1fr) minmax(200px, 1.2fr) minmax(240px, 0.8fr) auto;
1760
+ gap: 8px;
1761
+ align-items: center;
1762
+ }
1763
+
1764
+ .project-profile-pages {
1765
+ display: flex;
1766
+ flex-wrap: wrap;
1767
+ gap: 10px;
1768
+ }
1769
+
1770
+ .project-sandbox-items {
1771
+ display: flex;
1772
+ flex-direction: column;
1773
+ gap: 8px;
1774
+ }
1775
+
1776
+ .project-profile-footer {
1777
+ display: flex;
1778
+ justify-content: flex-end;
1779
+ }
1780
+
1781
+ .project-binding-profiles {
1782
+ display: flex;
1783
+ flex-wrap: wrap;
1784
+ gap: 10px;
1785
+ }
1786
+
1787
+ @media (max-width: 1180px) {
1788
+ .settings-form {
1789
+ max-width: 100%;
1790
+ }
1791
+ .project-row {
1792
+ grid-template-columns: 1fr;
1793
+ }
1794
+ .project-row.compact {
1795
+ grid-template-columns: 1fr;
1796
+ }
1797
+ .project-profile-grid {
1798
+ grid-template-columns: 1fr;
1799
+ }
1800
+ }
1801
+
1631
1802
  /* Dialog */
1632
1803
  dialog {
1633
1804
  position: fixed;
@@ -1939,7 +2110,7 @@ dialog::backdrop {
1939
2110
  }
1940
2111
 
1941
2112
  .summary-strip.compact {
1942
- margin-bottom: 10px;
2113
+ margin-bottom: 0;
1943
2114
  gap: 8px;
1944
2115
  }
1945
2116
 
@@ -1953,6 +2124,25 @@ dialog::backdrop {
1953
2124
  font-size: 14px;
1954
2125
  }
1955
2126
 
2127
+ .drawer-section {
2128
+ margin-bottom: 12px;
2129
+ }
2130
+
2131
+ .drawer-section-title {
2132
+ font-size: 12px;
2133
+ font-weight: 600;
2134
+ color: var(--text-secondary);
2135
+ margin: 0 0 8px;
2136
+ }
2137
+
2138
+ .drawer-section-title-row {
2139
+ display: flex;
2140
+ align-items: center;
2141
+ justify-content: space-between;
2142
+ gap: 8px;
2143
+ margin-bottom: 8px;
2144
+ }
2145
+
1956
2146
  .drawer-create-form {
1957
2147
  display: grid;
1958
2148
  gap: 8px;
@@ -1960,7 +2150,7 @@ dialog::backdrop {
1960
2150
  background: #f8f9fb;
1961
2151
  border: 1px solid var(--border);
1962
2152
  border-radius: 10px;
1963
- margin-bottom: 10px;
2153
+ margin-bottom: 8px;
1964
2154
  }
1965
2155
 
1966
2156
  .drawer-create-form.hidden {
@@ -2053,7 +2243,7 @@ dialog::backdrop {
2053
2243
  display: flex;
2054
2244
  flex-wrap: wrap;
2055
2245
  gap: 6px;
2056
- margin-bottom: 10px;
2246
+ margin-bottom: 8px;
2057
2247
  }
2058
2248
 
2059
2249
  .entity-filter-tabs .btn.active {
@@ -319,6 +319,8 @@ function renderDenseLaneNode(node, byParent, expandedIdSet, entitySummaryByNodeI
319
319
  const isExpanded = expandedIdSet.has(node.id);
320
320
  const nodeSummary = entitySummaryByNodeId?.[node.id] || { issue: 0, knowledge: 0, capability: 0 };
321
321
  const useStackSummary = depth >= 3;
322
+ const summaryBadgeHtml = renderEntityBadges(nodeSummary);
323
+ const summaryAssigneeHtml = showAssignee && node.assignee ? `<span class="node-meta">@${esc(node.assignee)}</span>` : '';
322
324
  const previewHtml = renderEntityPreviewBoxes(node.id, entityRowsByNodeId, elementPreviewMode);
323
325
  const childrenHtml = hasChildren && isExpanded
324
326
  ? `<div class="lane-tree-children">${children.map((child) => renderDenseLaneNode(child, byParent, expandedIdSet, entitySummaryByNodeId, depth + 1, showAssignee, entityRowsByNodeId, elementPreviewMode, readonly, selectedId)).join('')}</div>`
@@ -343,13 +345,13 @@ function renderDenseLaneNode(node, byParent, expandedIdSet, entitySummaryByNodeI
343
345
  <div class="lane-tree-node-main ${useStackSummary ? 'stack-summary' : ''}">
344
346
  <div class="lane-tree-title-line">
345
347
  <span class="dense-node-name">${esc(node.name)}</span>
346
- ${!useStackSummary ? renderEntityBadges(nodeSummary) : ''}
347
- ${!useStackSummary && showAssignee && node.assignee ? `<span class="node-meta">@${esc(node.assignee)}</span>` : ''}
348
+ ${!useStackSummary ? summaryBadgeHtml : ''}
349
+ ${!useStackSummary ? summaryAssigneeHtml : ''}
348
350
  </div>
349
- ${useStackSummary ? `
351
+ ${useStackSummary && (summaryBadgeHtml || summaryAssigneeHtml) ? `
350
352
  <div class="lane-tree-summary-line">
351
- ${renderEntityBadges(nodeSummary)}
352
- ${showAssignee && node.assignee ? `<span class="node-meta">@${esc(node.assignee)}</span>` : ''}
353
+ ${summaryBadgeHtml}
354
+ ${summaryAssigneeHtml}
353
355
  </div>
354
356
  ` : ''}
355
357
  </div>
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@qnote/q-ai-note",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "type": "module",
5
5
  "description": "AI-assisted personal work sandbox and diary system",
6
6
  "main": "dist/server/index.js",
7
7
  "bin": {
8
8
  "q-ai-note": "dist/cli.js",
9
- "q-ai-note-server": "dist/cli.js",
10
- "q-ai-note-my-server": "dist/cli.js"
9
+ "q-ai-note-server": "dist/cli.js"
11
10
  },
12
11
  "files": [
13
12
  "dist/**/*",