dsh-knowledge-library 0.1.1 → 0.2.0

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 (46) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +107 -12
  3. package/dist/client.js +1420 -303
  4. package/dist/core/extract.d.ts +1 -0
  5. package/dist/core/extract.js +62 -5
  6. package/dist/core/fetch.js +82 -11
  7. package/dist/core/grouping.d.ts +6 -0
  8. package/dist/core/grouping.js +71 -0
  9. package/dist/core/incremental.d.ts +14 -0
  10. package/dist/core/incremental.js +52 -0
  11. package/dist/core/jobs.d.ts +1 -0
  12. package/dist/core/jobs.js +4 -0
  13. package/dist/core/knowledge.d.ts +37 -0
  14. package/dist/core/knowledge.js +617 -0
  15. package/dist/core/library.d.ts +20 -2
  16. package/dist/core/library.js +271 -12
  17. package/dist/core/page-access.d.ts +6 -0
  18. package/dist/core/page-access.js +38 -0
  19. package/dist/core/purge.d.ts +20 -0
  20. package/dist/core/purge.js +106 -0
  21. package/dist/directory-settings.d.ts +18 -0
  22. package/dist/directory-settings.js +92 -0
  23. package/dist/http.d.ts +3 -1
  24. package/dist/http.js +121 -4
  25. package/dist/index.js +17 -5
  26. package/dist/knowledge-model.d.ts +18 -0
  27. package/dist/knowledge-model.js +116 -0
  28. package/dist/preview-settings.d.ts +6 -0
  29. package/dist/preview-settings.js +42 -0
  30. package/dist/public/app.css +126 -2
  31. package/dist/public/app.js +11 -7
  32. package/dist/standalone.js +8 -3
  33. package/dist/tools.d.ts +2 -1
  34. package/dist/tools.js +10 -1
  35. package/dist/types.d.ts +143 -1
  36. package/dist/ui/App.js +243 -47
  37. package/dist/ui/Dialog.d.ts +7 -0
  38. package/dist/ui/Dialog.js +32 -0
  39. package/dist/ui/Grouping.d.ts +12 -0
  40. package/dist/ui/Grouping.js +93 -0
  41. package/dist/ui/Knowledge.d.ts +26 -0
  42. package/dist/ui/Knowledge.js +106 -0
  43. package/dist/ui/api.d.ts +7 -0
  44. package/dist/ui/api.js +16 -0
  45. package/dist/ui/icons.js +2 -0
  46. package/package.json +4 -1
@@ -91,11 +91,100 @@
91
91
  .kl-filterbar b { font-weight: 400; }
92
92
  .kl-filterbar > div { display: flex; align-items: center; gap: 16px; flex: none; }
93
93
  .kl-filterbar select { background: var(--kl-bg); color: var(--kl-muted); border: 0; border-radius: 6px; padding: 3px; max-width: 110px; font-size: 12px; }
94
+ .kl-trash-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 var(--kl-gutter) 12px; }
95
+ .kl-trash-toolbar p { color: var(--kl-muted); font-size: 12px; margin: 0; min-width: 0; }
96
+ .kl-trash-toolbar button { flex: none; }
97
+ .kl-knowledge-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 var(--kl-gutter) 12px; }
98
+ .kl-knowledge-toolbar p { margin: 0; font-size: 12px; color: var(--kl-muted); }
99
+ .kl-knowledge-toolbar > div, .kl-knowledge-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
100
+ .kl-knowledge-toolbar > div { flex: none; }
101
+ .kl-knowledge-badge { display: inline-flex; align-items: center; padding: 2px 6px; border-radius: 5px; background: var(--kl-hover); color: var(--kl-muted); font-size: 11px; line-height: 18px; white-space: nowrap; font-weight: 400; }
102
+ .kl-knowledge-badge:is(.draft, .running, .queued, .grouping, .classifying) { color: var(--kl-link); }
103
+ .kl-knowledge-badge.failed { color: var(--kl-error); }
104
+ .kl-knowledge-badge.completed { color: var(--kl-ink); }
105
+ .kl-item-bottom { flex-wrap: wrap; }
106
+ .kl-item-row.kl-selectable { padding-left: 30px; }
107
+ .kl-material-checkbox { position: absolute; left: 9px; top: 17px; width: 15px; height: 15px; accent-color: var(--kl-primary); cursor: pointer; }
108
+ .kl-knowledge-source { border-block: .5px solid var(--kl-line); padding-block: 16px; margin: 20px 0; }
109
+ .kl-knowledge-source > div:first-child { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--kl-muted); margin-bottom: 12px; }
110
+ .kl-knowledge-form, .kl-knowledge-jobs { padding: 0 24px 24px; }
111
+ .kl-knowledge-form label, .kl-knowledge-draft label { display: flex; flex-direction: column; gap: 7px; font-size: 13px; margin: 16px 0; }
112
+ .kl-knowledge-form input, .kl-knowledge-draft input, .kl-knowledge-draft textarea { width: 100%; border: .5px solid var(--kl-line); border-radius: 8px; padding: 10px 12px; color: var(--kl-ink); background: var(--kl-bg); min-width: 0; font: inherit; }
113
+ .kl-knowledge-draft textarea { line-height: 1.8; resize: vertical; font-size: 13px; }
114
+ .kl-knowledge-form small, .kl-knowledge-jobs small { font-size: 12px; color: var(--kl-muted); line-height: 1.7; }
115
+ .kl-knowledge-summary { display: flex; align-items: center; justify-content: space-between; font-size: 13px; }
116
+ .kl-knowledge-summary b { font-weight: 500; }
117
+ .kl-knowledge-summary span { color: var(--kl-muted); }
118
+ .kl-knowledge-source-list { padding: 0; list-style: none; max-height: 150px; overflow: auto; }
119
+ .kl-knowledge-source-list li { display: flex; align-items: center; gap: 8px; margin-block: 8px; font-size: 13px; overflow-wrap: anywhere; }
120
+ .kl-knowledge-model { color: var(--kl-muted); font-size: 12px; line-height: 1.8; }
121
+ .kl-knowledge-help { font-size: 12px; color: var(--kl-link); display: inline-flex; align-items: center; gap: 4px; }
122
+ .kl-knowledge-form > .kl-muted { font-size: 13px; line-height: 1.8; }
123
+ .kl-knowledge-form footer, .kl-knowledge-draft footer { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; margin-top: 20px; }
124
+ .kl-knowledge-back { background: transparent; border: 0; padding: 0; color: var(--kl-muted); font-size: 12px; margin-bottom: 18px; }
125
+ .kl-knowledge-empty { display: flex; align-items: center; flex-direction: column; text-align: center; padding: 24px 0; color: var(--kl-muted); }
126
+ .kl-knowledge-empty p { color: var(--kl-ink); }
127
+ .kl-knowledge-job { display: block; width: 100%; border: 0; border-top: .5px solid var(--kl-line); background: transparent; text-align: left; padding: 16px 0; }
128
+ .kl-knowledge-job:hover { background: var(--kl-hover); }
129
+ .kl-knowledge-job > div, .kl-knowledge-job-heading { display: flex; gap: 12px; justify-content: space-between; align-items: flex-start; }
130
+ .kl-knowledge-job strong, .kl-knowledge-job-heading strong { font-size: 14px; font-weight: 500; overflow-wrap: anywhere; min-width: 0; }
131
+ .kl-knowledge-job p { color: var(--kl-muted); font-size: 12px; margin: 8px 0 0; }
132
+ .kl-knowledge-job small { display: block; margin-top: 8px; }
133
+ .kl-knowledge-progress { display: flex; align-items: center; gap: 8px; color: var(--kl-muted); font-size: 13px; margin: 20px 0; }
134
+ .kl-knowledge-jobs > .kl-knowledge-actions { margin-top: 18px; }
135
+ .kl-knowledge-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
136
+ .kl-knowledge-citations { font-size: 12px; color: var(--kl-muted); border-block: .5px solid var(--kl-line); padding-block: 12px; }
137
+ .kl-knowledge-citations summary { cursor: pointer; }
138
+ .kl-knowledge-citations button { border: 0; background: transparent; display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; padding: 8px 0; }
139
+ .kl-knowledge-citations button span { min-width: 0; overflow-wrap: anywhere; }
140
+ .kl-knowledge-mode { margin: 16px 0; padding: 12px; border: .5px solid var(--kl-line); border-radius: 8px; }
141
+ .kl-knowledge-mode legend { padding: 0 4px; font-size: 12px; color: var(--kl-muted); }
142
+ .kl-knowledge-mode label { flex-direction: row; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
143
+ .kl-knowledge-mode input { width: 15px; padding: 0; accent-color: var(--kl-primary); }
144
+ .kl-knowledge-mode small { margin-left: auto; }
145
+ .kl-grouping-editor { margin-top: 18px; }
146
+ .kl-grouping-summary { display: flex; align-items: center; gap: 14px; font-size: 13px; }
147
+ .kl-grouping-summary b { font-weight: 500; }
148
+ .kl-grouping-summary span { color: var(--kl-muted); }
149
+ .kl-grouping-group { border: .5px solid var(--kl-line); border-radius: 8px; padding: 12px 14px; margin: 12px 0; }
150
+ .kl-grouping-group-title, .kl-grouping-source-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
151
+ .kl-grouping-group-title { font-size: 12px; color: var(--kl-muted); }
152
+ .kl-grouping-group ul { margin: 10px 0 0; padding-left: 18px; color: var(--kl-muted); font-size: 12px; line-height: 1.8; }
153
+ .kl-grouping-group li { overflow-wrap: anywhere; }
154
+ .kl-grouping-editor label { display: flex; flex-direction: column; gap: 7px; margin: 12px 0; font-size: 12px; }
155
+ .kl-grouping-editor :is(input,textarea,select) { width: 100%; min-width: 0; border: .5px solid var(--kl-line); border-radius: 8px; padding: 9px 10px; background: var(--kl-bg); color: var(--kl-ink); font: inherit; }
156
+ .kl-grouping-editor textarea { line-height: 1.7; resize: vertical; }
157
+ .kl-grouping-reason { margin: 8px 0; font-size: 12px; line-height: 1.8; color: var(--kl-muted); overflow-wrap: anywhere; }
158
+ .kl-grouping-settings summary, .kl-grouping-source summary { cursor: pointer; font-size: 12px; color: var(--kl-muted); }
159
+ .kl-grouping-settings summary span { margin-left: 8px; color: var(--kl-ink); }
160
+ .kl-grouping-section-title { font-size: 14px; font-weight: 500; margin: 24px 0 10px; }
161
+ .kl-grouping-source { border-top: .5px solid var(--kl-line); padding: 14px 0; }
162
+ .kl-grouping-source-title strong { font-size: 13px; font-weight: 500; min-width: 0; overflow-wrap: anywhere; }
163
+ .kl-grouping-source p, .kl-grouping-pending p, .kl-grouping-recovery p { font-size: 12px; line-height: 1.8; color: var(--kl-muted); overflow-wrap: anywhere; }
164
+ .kl-grouping-source details button { margin-top: 8px; }
165
+ .kl-grouping-editor .kl-grouping-sync { flex-direction: row; align-items: center; gap: 8px; margin-top: 20px; }
166
+ .kl-grouping-sync input { width: 15px; height: 15px; padding: 0; accent-color: var(--kl-primary); flex: none; }
167
+ .kl-grouping-editor footer { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
168
+ .kl-grouping-recovery { border-left: 2px solid var(--kl-link); padding-left: 12px; font-size: 13px; }
169
+ .kl-grouping-pending { border-top: .5px solid var(--kl-line); padding-top: 14px; font-size: 13px; }
170
+ .kl-note-integration { border: .5px solid var(--kl-line); border-radius: 8px; padding: 14px; margin: 16px 0; }
171
+ .kl-note-integration > strong { font-size: 14px; font-weight: 500; }
172
+ .kl-note-integration p, .kl-integration-findings { font-size: 12px; line-height: 1.8; overflow-wrap: anywhere; }
173
+ .kl-integration-findings { display: grid; grid-template-columns: 90px minmax(0, 1fr); gap: 12px; padding: 8px 0; border-top: .5px solid var(--kl-line); }
174
+ .kl-integration-findings > span { color: var(--kl-muted); }
175
+ .kl-integration-findings ul { margin: 0; padding-left: 16px; }
176
+ .kl-integration-target { font-weight: 500; }
177
+ .kl-integration-preview { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 300px; overflow-y: auto; padding: 12px; background: var(--kl-hover); border-radius: 6px; font: inherit; font-size: 12px; line-height: 1.8; }
178
+ .kl-note-integration details summary, .kl-knowledge-draft > details summary { cursor: pointer; font-size: 12px; color: var(--kl-muted); }
94
179
  .kl-body { position: relative; display: flex; flex: 1; min-height: 0; overflow: hidden; }
95
180
  .kl-list { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; padding: 0 calc(var(--kl-gutter) - 8px) 24px; }
96
181
  .kl-body.with-detail .kl-list { flex: 0 0 38%; padding: 0 16px 24px calc(var(--kl-gutter) - 8px); }
97
182
  .kl-item { width: 100%; display: block; text-align: left; padding: 14px 12px; margin-bottom: 2px; border: 0; border-radius: var(--kl-radius); background: transparent; }
98
183
  .kl-item:hover, .kl-item.selected { background: var(--kl-hover); }
184
+ .kl-item-row { position: relative; }
185
+ .kl-item-row .kl-item { padding-right: 48px; }
186
+ .kl-app .kl-row-action { position: absolute; top: 8px; right: 8px; }
187
+ .kl-app .kl-danger, .kl-app .kl-danger:hover { color: var(--kl-error); }
99
188
  .kl-item-top { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 5px; }
100
189
  .kl-type { display: inline-flex; gap: 5px; align-items: center; font-size: 12px; color: var(--kl-muted); }
101
190
  .kl-item time { color: var(--kl-muted); font-size: 12px; }
@@ -176,6 +265,9 @@
176
265
  .kl-dialog > header p { margin: 0; color: var(--kl-muted); font-size: 12px; line-height: 1.7; }
177
266
  .kl-dialog > header > button { border: 0; border-radius: 8px; background: transparent; color: var(--kl-muted); padding: 4px; display: flex; }
178
267
  .kl-dialog > header > button:hover { background: var(--kl-hover); }
268
+ .kl-delete-dialog { padding: 0 24px 24px; }
269
+ .kl-delete-title { margin: 0 0 12px; font-weight: 500; overflow-wrap: anywhere; }
270
+ .kl-delete-dialog footer { display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px; }
179
271
  .kl-editor { padding: 0 24px; }
180
272
  .kl-tabs { display: flex; gap: 8px; margin-bottom: 20px; }
181
273
  .kl-tabs button { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; background: transparent; border: 0; color: var(--kl-muted); border-radius: 14px; min-height: 32px; padding: 5px 8px; font-size: 13px; }
@@ -202,14 +294,39 @@
202
294
  .kl-job time { font-size: 11px; color: var(--kl-muted); }
203
295
  .kl-job > strong { display: block; overflow-wrap: anywhere; font-size: 13px; font-weight: 400; margin: 12px 0; }
204
296
  .kl-job > p { font-size: 12px; color: var(--kl-error); line-height: 1.7; }
205
- .kl-job button { display: flex; align-items: center; gap: 4px; color: var(--kl-link); font-size: 12px; border: 0; background: transparent; border-radius: 6px; padding: 4px; }
206
- .kl-job button:hover { background: var(--kl-hover); }
297
+ .kl-job button, .kl-job a { display: flex; align-items: center; gap: 4px; color: var(--kl-link); font-size: 12px; border: 0; background: transparent; border-radius: 6px; padding: 4px; text-decoration: none; }
298
+ .kl-job button:hover, .kl-job a:hover { background: var(--kl-hover); }
299
+ .kl-job .kl-job-actions { justify-content: flex-start; flex-wrap: wrap; gap: 8px; }
207
300
  .kl-job-status { font-size: 11px; border-radius: 6px; padding: 3px 7px; background: var(--kl-hover); color: var(--kl-secondary); }
208
301
  .kl-job-status.failed { color: var(--kl-error); }
209
302
  .kl-job-status.running { color: var(--kl-link); }
210
303
  .kl-info label { display: block; font-size: 12px; color: var(--kl-muted); margin-bottom: 8px; }
211
304
  .kl-info code { display: block; overflow-wrap: anywhere; background: var(--kl-sidebar); padding: 12px; border-radius: 8px; font-size: 12px; }
212
305
  .kl-info p { font-size: 13px; line-height: 1.8; color: var(--kl-secondary); margin: 16px 0; }
306
+ .kl-root-field, .kl-folder-path { display: flex; gap: 8px; align-items: center; }
307
+ .kl-root-field input, .kl-folder-path input { flex: 1; min-width: 0; border: .5px solid var(--kl-line); background: var(--kl-panel); border-radius: var(--kl-radius); padding: 10px 12px; font-size: 12px; }
308
+ .kl-root-field input[readonly] { background: var(--kl-sidebar); }
309
+ .kl-root-field button, .kl-folder-path button { flex-shrink: 0; }
310
+ .kl-root-confirm { margin-top: 14px; padding: 12px; border: .5px solid var(--kl-line); border-radius: 10px; background: var(--kl-sidebar); }
311
+ .kl-root-confirm p { margin: 0 0 12px; }
312
+ .kl-root-confirm > div, .kl-folder-actions { display: flex; justify-content: flex-end; gap: 8px; }
313
+ .kl-folder-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
314
+ .kl-folder-heading strong { font-size: 14px; font-weight: 500; }
315
+ .kl-folder-crumbs { display: flex; flex-wrap: wrap; gap: 4px; margin: 12px 0; }
316
+ .kl-folder-crumbs button { border: 0; background: transparent; padding: 3px 0; font-size: 12px; color: var(--kl-muted); overflow-wrap: anywhere; }
317
+ .kl-folder-crumbs span { padding: 0 6px; color: var(--kl-caption); }
318
+ .kl-folder-entries { height: 240px; overflow: auto; border: .5px solid var(--kl-line); border-radius: 10px; padding: 6px; }
319
+ .kl-folder-entries > button { width: 100%; display: flex; align-items: center; gap: 10px; text-align: left; border: 0; border-radius: 6px; padding: 10px; background: transparent; }
320
+ .kl-folder-entries > button:hover { background: var(--kl-hover); }
321
+ .kl-folder-entries > button span { flex: 1; min-width: 0; overflow-wrap: anywhere; }
322
+ .kl-folder-entries > p { padding: 0 10px; }
323
+ .kl-folder-actions { margin-top: 16px; }
324
+ .kl-info .kl-settings-error { color: var(--kl-error); overflow-wrap: anywhere; }
325
+ .kl-network-settings { margin-top: 20px; padding-top: 16px; border-top: .5px solid var(--kl-line); }
326
+ .kl-network-settings h3 { font-size: 13px; font-weight: 500; margin: 0 0 12px; }
327
+ .kl-info .kl-proxy-option { display: flex; align-items: flex-start; gap: 8px; color: var(--kl-ink); font-size: 13px; line-height: 20px; cursor: pointer; }
328
+ .kl-proxy-option input { flex: none; width: 16px; height: 16px; margin: 2px 0; accent-color: var(--kl-ink); }
329
+ .kl-network-settings p { font-size: 12px; margin: 8px 0 12px; }
213
330
  .kl-error, .kl-form-error { background: var(--kl-sidebar); color: var(--kl-error); font-size: 13px; line-height: 1.7; padding: 10px 12px; border-radius: 8px; overflow-wrap: anywhere; }
214
331
  .kl-error { display: flex; align-items: center; gap: 12px; margin: 0 var(--kl-gutter) 14px; }
215
332
  .kl-error button { margin-left: auto; border: 0; background: transparent; color: inherit; display: flex; padding: 4px; }
@@ -237,10 +354,14 @@
237
354
  .kl-toolbar { padding: 0 20px 12px; gap: 4px; }
238
355
  .kl-search kbd, .kl-job-button span, .kl-sort-label { display: none; }
239
356
  .kl-filterbar { padding: 0 20px 10px; }
357
+ .kl-trash-toolbar { padding: 0 20px 12px; flex-wrap: wrap; }
358
+ .kl-knowledge-toolbar { padding: 0 20px 12px; flex-wrap: wrap; }
240
359
  .kl-list { padding: 0 12px 16px; }
241
360
  .kl-empty { padding: 40px 12px; }
242
361
  .kl-detail article { padding: 20px; }
243
362
  .kl-detail-toolbar { padding: 8px 12px; }
363
+ .kl-detail-toolbar { flex-wrap: wrap; }
364
+ .kl-detail-toolbar > div { margin-left: auto; }
244
365
  .kl-error { margin: 0 20px 12px; }
245
366
  }
246
367
  /* Fixed dialogs use viewport width even when the host panel is narrow. */
@@ -248,6 +369,8 @@
248
369
  .kl-modal-backdrop { padding: 12px; }
249
370
  .kl-dialog { max-height: calc(100dvh - 24px); }
250
371
  .kl-dialog > header { padding: 20px 18px 16px; }
372
+ .kl-knowledge-form, .kl-knowledge-jobs { padding-inline: 18px; }
373
+ .kl-knowledge-fields { grid-template-columns: 1fr; gap: 0; }
251
374
  .kl-editor { padding: 0 18px; }
252
375
  .kl-editor footer { margin-left: -18px; margin-right: -18px; padding: 14px 18px; }
253
376
  .kl-editor footer > span { font-size: 10px; }
@@ -255,6 +378,7 @@
255
378
  .kl-tabs button { padding: 5px; font-size: 12px; }
256
379
  .kl-form-grid { gap: 12px; }
257
380
  .kl-jobs, .kl-info { padding: 0 18px 20px; }
381
+ .kl-delete-dialog { padding: 0 18px 20px; }
258
382
  }
259
383
  @media (prefers-reduced-motion: reduce) {
260
384
  .kl-app * { animation: none !important; transition: none !important; }