@kirkchinese/dsh-citeciter 0.8.2 → 0.9.0-alpha.1

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 (64) hide show
  1. package/README.md +78 -29
  2. package/README.zh.md +76 -29
  3. package/lib/client.js +7183 -6236
  4. package/lib/index.js +921 -386
  5. package/lib/{typert-common-BMA9IB7p.js → typert-common-Q3dqDoUa.js} +24 -17
  6. package/lib/typert.host.js +9 -30
  7. package/lib/typert.remote-client.js +1 -1
  8. package/lib/types/actions.d.ts +10 -0
  9. package/lib/types/atomic-replace.d.ts +9 -0
  10. package/lib/types/board-capture-protocol.d.ts +45 -0
  11. package/lib/types/board-capture.d.ts +6 -1
  12. package/lib/types/board.d.ts +4 -4
  13. package/lib/types/citer-agent-registry.d.ts +2 -2
  14. package/lib/types/citer-session-access.d.ts +1 -1
  15. package/lib/types/client/action-controller.d.ts +2 -5
  16. package/lib/types/client/action-executor.d.ts +1 -1
  17. package/lib/types/client/board-capture-controller.d.ts +17 -0
  18. package/lib/types/client/citer-session-face.d.ts +17 -1
  19. package/lib/types/client/companion-controller.d.ts +17 -9
  20. package/lib/types/client/components/ActionWheel.d.ts +2 -4
  21. package/lib/types/client/components/BoardCaptureWorker.d.ts +7 -0
  22. package/lib/types/client/components/CitePanel.d.ts +6 -3
  23. package/lib/types/client/components/LearningExample.d.ts +5 -0
  24. package/lib/types/client/components/MessageImage.d.ts +8 -0
  25. package/lib/types/client/components/ToolMessage.d.ts +10 -0
  26. package/lib/types/client/components/TopicComposer.d.ts +1 -4
  27. package/lib/types/client/dock-geometry.d.ts +4 -2
  28. package/lib/types/client/draft-controller.d.ts +45 -0
  29. package/lib/types/client/draft-references.d.ts +4 -7
  30. package/lib/types/client/host-dock.d.ts +4 -2
  31. package/lib/types/client/host-icons.d.ts +13 -0
  32. package/lib/types/client/host-image-preview.d.ts +8 -0
  33. package/lib/types/client/host-ui-adapter.d.ts +24 -0
  34. package/lib/types/client/native-composer.d.ts +7 -3
  35. package/lib/types/client/native-document.d.ts +2 -8
  36. package/lib/types/client/prompt.d.ts +2 -0
  37. package/lib/types/client/selection-references.d.ts +4 -0
  38. package/lib/types/client/transcript-position.d.ts +2 -1
  39. package/lib/types/client/types.d.ts +2 -0
  40. package/lib/types/client/update-controller.d.ts +2 -2
  41. package/lib/types/document-access.d.ts +3 -0
  42. package/lib/types/document-tools.d.ts +10 -0
  43. package/lib/types/draft-contract.d.ts +98 -0
  44. package/lib/types/draft-store.d.ts +23 -0
  45. package/lib/types/host-agent-modules.d.ts +4 -2
  46. package/lib/types/host-settings-adapter.d.ts +11 -0
  47. package/lib/types/index.d.ts +3 -1
  48. package/lib/types/learning-example.d.ts +53 -0
  49. package/lib/types/learning.d.ts +24 -3
  50. package/lib/types/message-projection.d.ts +15 -0
  51. package/lib/types/model-admission.d.ts +7 -0
  52. package/lib/types/native-session-contract.d.ts +1 -0
  53. package/lib/types/session-format-guard.d.ts +6 -0
  54. package/lib/types/source-storage.d.ts +3 -0
  55. package/lib/types/tool-events.d.ts +18 -0
  56. package/lib/types/topic-archive.d.ts +5 -0
  57. package/lib/types/topic-prompts.d.ts +5 -3
  58. package/lib/types/topic-runtime.d.ts +4 -2
  59. package/lib/types/topic.d.ts +204 -17
  60. package/lib/types/typert-codec.d.ts +13 -0
  61. package/lib/types/typert-common.d.ts +1165 -100
  62. package/lib/types/typert.host.d.ts +3271 -825
  63. package/lib/{update-BtuUBRbP.js → update-BRpjPM2f.js} +187 -9
  64. package/package.json +80 -78
@@ -1,4 +1,58 @@
1
1
  import { z } from "zod";
2
+ //#region lib/types/draft-contract.js
3
+ /** Persisted drafts are user work, never model input until explicitly submitted. */
4
+ const draftReferenceSchema = z.object({
5
+ id: z.string().min(1).max(500),
6
+ kind: z.enum([
7
+ "source",
8
+ "excerpt",
9
+ "board"
10
+ ]),
11
+ label: z.string().max(1e3),
12
+ content: z.string().max(5e5),
13
+ address: z.string().max(4e3).optional()
14
+ }).strict();
15
+ const draftFileSchema = z.object({
16
+ id: z.uuid(),
17
+ name: z.string().min(1).max(1e3),
18
+ type: z.string().max(200),
19
+ size: z.number().int().nonnegative().max(104857600),
20
+ lastModified: z.number().int().nonnegative()
21
+ }).strict();
22
+ const draftContentSchema = z.object({
23
+ text: z.string().max(11e3),
24
+ references: z.array(draftReferenceSchema).max(64),
25
+ files: z.array(draftFileSchema).max(32)
26
+ }).strict();
27
+ const draftStateSchema = z.object({
28
+ version: z.literal(1),
29
+ revision: z.number().int().nonnegative(),
30
+ content: draftContentSchema,
31
+ pending: z.object({
32
+ requestId: z.uuid(),
33
+ content: draftContentSchema
34
+ }).strict().nullable()
35
+ }).strict();
36
+ const EMPTY_DRAFT_STATE = {
37
+ version: 1,
38
+ revision: 0,
39
+ content: {
40
+ text: "",
41
+ references: [],
42
+ files: []
43
+ },
44
+ pending: null
45
+ };
46
+ const DRAFT_CHUNK_BYTES = 262144;
47
+ /** Remove only the acknowledged submission, preserving edits made while it was pending. */
48
+ function subtractSubmitted(current, submitted) {
49
+ return {
50
+ text: current.text === submitted.text ? "" : current.text,
51
+ references: current.references.filter((item) => !submitted.references.some((sent) => sent.id === item.id)),
52
+ files: current.files.filter((item) => !submitted.files.some((sent) => sent.id === item.id))
53
+ };
54
+ }
55
+ //#endregion
2
56
  //#region lib/types/native-session-contract.js
3
57
  const attachmentId = z.string().min(1).transform((value) => value);
4
58
  const nativeImageSchema = z.object({
@@ -38,6 +92,7 @@ const nativeAttachmentSchema = z.discriminatedUnion("type", [z.object({
38
92
  }).strict()]);
39
93
  /** Read-only control projection. The Agent inbox remains the only authoritative queue. */
40
94
  const nativeStateSchema = z.object({
95
+ modelSelectionRequired: z.boolean().optional(),
41
96
  running: z.boolean(),
42
97
  blank: z.boolean(),
43
98
  error: z.string().nullable(),
@@ -312,6 +367,71 @@ Object.freeze({
312
367
  invalid: 0
313
368
  });
314
369
  //#endregion
370
+ //#region lib/types/board-capture-protocol.js
371
+ /** Immutable board revision requested by one real model tool call, independent of UI selection. */
372
+ const boardCaptureJobSchema = z.object({
373
+ id: z.string().min(1),
374
+ sessionId: z.string().min(1),
375
+ board: boardSnapshotSchema
376
+ }).strict();
377
+ //#endregion
378
+ //#region lib/types/learning-example.js
379
+ /** Shared contract for model input and persisted card examples. Code is never Markdown. */
380
+ const descriptions = {
381
+ text: "A prose example in Markdown, at most 1500 characters. Use the code variant for source code.",
382
+ code: "Raw source code, at most 1500 characters. Preserve line breaks and indentation; do not add Markdown fences.",
383
+ language: "Language identifier such as javascript, python, html or text; 1–40 letters, digits, underscores, plus signs, dots, hashes or hyphens."
384
+ };
385
+ const learningExampleSchema = z.discriminatedUnion("kind", [z.object({
386
+ kind: z.literal("text"),
387
+ content: z.string().trim().min(1).max(1500).describe(descriptions.text)
388
+ }).strict(), z.object({
389
+ kind: z.literal("code"),
390
+ content: z.string().min(1).max(1500).refine((value) => value.trim().length > 0, "Code must not be blank").describe(descriptions.code),
391
+ language: z.string().regex(/^[a-zA-Z0-9_+#.-]{1,40}$/).describe(descriptions.language)
392
+ }).strict()]);
393
+ /** Native DSH tool schema; kept beside the validator to expose the same tagged contract. */
394
+ const LEARNING_EXAMPLE_PARAMETER = {
395
+ required: true,
396
+ description: "Choose text for prose or code for literal source code.",
397
+ oneOf: [{
398
+ type: "object",
399
+ additionalProperties: false,
400
+ properties: {
401
+ kind: {
402
+ type: "string",
403
+ enum: ["text"],
404
+ required: true
405
+ },
406
+ content: {
407
+ type: "string",
408
+ required: true,
409
+ description: descriptions.text
410
+ }
411
+ }
412
+ }, {
413
+ type: "object",
414
+ additionalProperties: false,
415
+ properties: {
416
+ kind: {
417
+ type: "string",
418
+ enum: ["code"],
419
+ required: true
420
+ },
421
+ content: {
422
+ type: "string",
423
+ required: true,
424
+ description: descriptions.code
425
+ },
426
+ language: {
427
+ type: "string",
428
+ required: true,
429
+ description: descriptions.language
430
+ }
431
+ }
432
+ }]
433
+ };
434
+ //#endregion
315
435
  //#region lib/types/learning.js
316
436
  /** User-selected teaching stages; these indicate intent, never measured mastery. */
317
437
  const LEARNING_STAGES = [
@@ -356,20 +476,31 @@ function learningQuestion(stageId, question = "") {
356
476
  const stage = LEARNING_STAGES.find((candidate) => candidate.id === stageId);
357
477
  return `【学习阶段:${stage.label}】\n${stage.instruction}${question.trim() === "" ? "" : `\n\n我的问题:${question.trim()}`}`;
358
478
  }
479
+ /** The validation schema and model-visible native tool must expose the same field contract. */
480
+ const LEARNING_CARD_FIELD_DESCRIPTIONS = {
481
+ title: "Non-empty title, at most 100 characters.",
482
+ summary: "Markdown summary, at most 2000 characters. Separate independent points with lists or paragraphs; include conditions and corrections.",
483
+ question: "Non-empty self-test question, at most 500 characters.",
484
+ answer: "Markdown reference answer, at most 2000 characters, consistent with the summary and example. Fence multiline code."
485
+ };
359
486
  const learningCardSchema = z.object({
360
- title: z.string().trim().min(1).max(100),
361
- summary: z.string().trim().min(1).max(2e3),
362
- example: z.string().trim().min(1).max(1500),
363
- question: z.string().trim().min(1).max(500),
364
- answer: z.string().trim().min(1).max(2e3)
487
+ title: z.string().trim().min(1).max(100).describe(LEARNING_CARD_FIELD_DESCRIPTIONS.title),
488
+ summary: z.string().trim().min(1).max(2e3).describe(LEARNING_CARD_FIELD_DESCRIPTIONS.summary),
489
+ example: learningExampleSchema,
490
+ question: z.string().trim().min(1).max(500).describe(LEARNING_CARD_FIELD_DESCRIPTIONS.question),
491
+ answer: z.string().trim().min(1).max(2e3).describe(LEARNING_CARD_FIELD_DESCRIPTIONS.answer)
365
492
  }).strict();
366
493
  const learningCardsInputSchema = z.object({ cards: z.array(learningCardSchema).min(1).max(8) }).strict();
494
+ z.object({ cards: z.array(learningCardSchema.extend({ example: z.union([learningExampleSchema, z.string().trim().min(1).max(1500).transform((content) => ({
495
+ kind: "text",
496
+ content
497
+ }))]) })).min(1).max(8) }).strict();
367
498
  /** Shared teaching contract appended to every scenario's logged tutor section. */
368
499
  const LEARNING_PROMPT = `The optional learning route is 底层逻辑 → 定性分析 → 定量分析(板书) → 概念关联 → 总结学习卡片. A user may select or skip any stage. Respond to the current request only; never advance automatically or claim that a stage proves mastery. Never schedule spaced repetition or reminders. Do not require quizzes before continuing.
369
500
 
370
501
  Use learning_cards only when the user asks to summarize or revise learning cards. Before composing cards in this same turn, check the Topic's conclusions and existing board for incorrect definitions, missing conditions, faulty derivations or arithmetic, and contradictions. Earlier assistant output is not evidence. Read available sources when needed; distinguish source evidence from general knowledge. Correct errors before saving, and explicitly label unresolved claims as 未核实 (unverified) or omit them. Check every card's summary, example, question and reference answer for consistency: a correction in the summary must also reach its example and answer. Briefly report corrections and unresolved points; do not present this self-check as independent verification.
371
502
 
372
- Each successful learning_cards call replaces the visible card set for this Topic; older sets remain in its log. Send the complete desired set in one call, not separate calls for individual cards. Write concise, source-grounded summaries and examples, plus a question and reference answer for optional self-testing. Preserve real available source locators inside summaries; do not invent offsets, sources or evidence. Cards and blackboard tools only record learning material inside this independent Topic; they never write to the workspace or source Session.`;
503
+ Each successful learning_cards call replaces the visible card set for this Topic; older sets remain in its log. Send the complete desired set in one call, not separate calls for individual cards. Respect the user's requested count: one card means one card, not one per stage. Write concise, source-grounded summaries and examples, plus a question and reference answer for optional self-testing. Choose example.kind=text for Markdown prose or example.kind=code for raw source code; code includes its language and preserves indentation without Markdown fences. Put explanations in the summary or answer, not around a code example. Preserve real available source locators inside summaries; do not invent offsets, sources or evidence. Cards and blackboard tools only record learning material inside this independent Topic; they never write to the workspace or source Session.`;
373
504
  //#endregion
374
505
  //#region lib/types/actions.js
375
506
  /** One persisted wheel slot; its prompt is sent as a durable user message. */
@@ -378,7 +509,8 @@ const citeActionSchema = z.object({
378
509
  prompt: z.string().max(4e3),
379
510
  ask: z.boolean(),
380
511
  scenario: z.enum(["qa", "present"]),
381
- presentation: z.enum(["side", "floating"])
512
+ presentation: z.enum(["side", "floating"]),
513
+ target: z.enum(["current", "new"]).optional()
382
514
  }).strict().refine((action) => action.ask || action.prompt.trim() !== "", "直接执行的模式需要提示词");
383
515
  const wheelSlotsSchema = z.array(citeActionSchema.nullable()).length(8);
384
516
  const wheelTriggerSchema = z.enum([
@@ -399,7 +531,8 @@ const DEFAULT_WHEEL_SLOTS = [
399
531
  prompt: "",
400
532
  ask: true,
401
533
  scenario: "qa",
402
- presentation: "side"
534
+ presentation: "side",
535
+ target: "current"
403
536
  },
404
537
  {
405
538
  label: "解释这段",
@@ -439,6 +572,11 @@ const DEFAULT_WHEEL_SLOTS = [
439
572
  null,
440
573
  null
441
574
  ];
575
+ /** Preserve customized legacy slots; only the unchanged built-in free question gains append behavior. */
576
+ function actionTarget(action) {
577
+ if (action.target !== void 0) return action.target;
578
+ return action.label === "自由提问" && action.prompt === "" && action.ask && action.scenario === "qa" && action.presentation === "side" ? "current" : "new";
579
+ }
442
580
  /** Host settings namespace mirrored by the browser settings scope. */
443
581
  const CITECITER_SETTINGS_NAMESPACE = "citeciter";
444
582
  /** Topic-scoped system prompt section. */
@@ -648,6 +786,7 @@ const modelConfigSchema = z.object({
648
786
  }).strict();
649
787
  /** Fields shared by the canonical Topic metadata schema and its on-disk reader. */
650
788
  const topicMetadataFields = {
789
+ modelSelectionRequired: z.boolean().optional(),
651
790
  hosted: z.boolean().optional(),
652
791
  storage: z.literal("source").optional(),
653
792
  topicId: z.number().int().positive(),
@@ -719,6 +858,7 @@ const permissionSchema = z.enum([
719
858
  "danger-full-access"
720
859
  ]);
721
860
  const topicSummarySchema = z.object({
861
+ modelSelectionRequired: z.boolean().optional(),
722
862
  permission: permissionSchema.optional(),
723
863
  hosted: z.boolean().optional(),
724
864
  storage: z.literal("source").optional(),
@@ -928,6 +1068,28 @@ const createRequestSchema = z.union([
928
1068
  ]);
929
1069
  /** One strict direct-RPC command for the private CiteCiter runtime. */
930
1070
  const citeCiterRequestSchema = z.union([createRequestSchema, z.discriminatedUnion("action", [
1071
+ z.object({
1072
+ action: z.literal("draft-get"),
1073
+ topicSessionId: topicSessionIdSchema
1074
+ }).strict(),
1075
+ z.object({
1076
+ action: z.literal("draft-save"),
1077
+ topicSessionId: topicSessionIdSchema,
1078
+ state: draftStateSchema
1079
+ }).strict(),
1080
+ z.object({
1081
+ action: z.literal("draft-file-put"),
1082
+ topicSessionId: topicSessionIdSchema,
1083
+ file: draftFileSchema,
1084
+ offset: z.number().int().nonnegative(),
1085
+ data: z.string().max(349528).regex(/^[A-Za-z0-9+/]*={0,2}$/)
1086
+ }).strict(),
1087
+ z.object({
1088
+ action: z.literal("draft-file-get"),
1089
+ topicSessionId: topicSessionIdSchema,
1090
+ fileId: z.uuid(),
1091
+ offset: z.number().int().nonnegative()
1092
+ }).strict(),
931
1093
  z.object({
932
1094
  action: z.literal("list"),
933
1095
  sourceSessionId: z.string().min(1),
@@ -940,6 +1102,7 @@ const citeCiterRequestSchema = z.union([createRequestSchema, z.discriminatedUnio
940
1102
  png: z.string().max(8e6).regex(/^[A-Za-z0-9+/]+={0,2}$/).optional(),
941
1103
  error: z.string().max(500).optional()
942
1104
  }).strict(),
1105
+ z.object({ action: z.literal("board-capture-pending") }).strict(),
943
1106
  z.object({
944
1107
  action: z.literal("get"),
945
1108
  topicSessionId: topicSessionIdSchema
@@ -1030,6 +1193,21 @@ const citeCiterRequestSchema = z.union([createRequestSchema, z.discriminatedUnio
1030
1193
  ])]);
1031
1194
  /** Strict response union returned by the single Remote command endpoint. */
1032
1195
  const citeCiterResponseSchema = z.discriminatedUnion("kind", [
1196
+ z.object({
1197
+ kind: z.literal("draft"),
1198
+ state: draftStateSchema,
1199
+ conflict: z.boolean()
1200
+ }).strict(),
1201
+ z.object({ kind: z.literal("draft-file-saved") }).strict(),
1202
+ z.object({
1203
+ kind: z.literal("draft-file"),
1204
+ data: z.string().max(349528).regex(/^[A-Za-z0-9+/]*={0,2}$/)
1205
+ }).strict(),
1206
+ z.object({
1207
+ kind: z.literal("board-captures"),
1208
+ jobs: z.array(boardCaptureJobSchema)
1209
+ }).strict(),
1210
+ z.object({ kind: z.literal("board-capture-accepted") }).strict(),
1033
1211
  z.object({
1034
1212
  kind: z.literal("native-state"),
1035
1213
  state: nativeStateSchema
@@ -1338,4 +1516,4 @@ function waitForCaller(operation, signal) {
1338
1516
  });
1339
1517
  }
1340
1518
  //#endregion
1341
- export { topicSummarySchema as C, EMPTY_BOARD_STATE as D, learningCardsInputSchema as E, applyBoardOps as O, topicSnapshotSchema as S, LEARNING_PROMPT as T, documentSummarySchema as _, CITECITER_SETTINGS_NAMESPACE as a, toolEvidenceClaimSchema as b, canonicalCitationIdentity as c, citationSelectionClaimSchema as d, citeCiterRequestSchema as f, documentEvidenceClaimSchema as g, documentContentSchema as h, CITATION_CONTEXT_NAME as i, boardBatchSchema as k, citationDraftSchema as l, citeCiterSettingsSchema as m, updateCheckErrorCodeSchema as n, DEFAULT_CITECITER_SETTINGS as o, citeCiterResponseSchema as p, updateCheckResponseSchema as r, TUTOR_SECTION_NAME as s, UpdateChecker as t, citationRecordSchema as u, parseTopicMetadataFile as v, DEFAULT_WHEEL_SLOTS as w, topicMetadataSchema as x, renderCitationContext as y };
1519
+ export { EMPTY_BOARD_STATE as A, topicSummarySchema as C, LEARNING_PROMPT as D, LEARNING_CARD_FIELD_DESCRIPTIONS as E, draftFileSchema as F, draftStateSchema as I, subtractSubmitted as L, boardBatchSchema as M, DRAFT_CHUNK_BYTES as N, learningCardsInputSchema as O, EMPTY_DRAFT_STATE as P, topicSnapshotSchema as S, actionTarget as T, documentSummarySchema as _, CITECITER_SETTINGS_NAMESPACE as a, toolEvidenceClaimSchema as b, canonicalCitationIdentity as c, citationSelectionClaimSchema as d, citeCiterRequestSchema as f, documentEvidenceClaimSchema as g, documentContentSchema as h, CITATION_CONTEXT_NAME as i, applyBoardOps as j, LEARNING_EXAMPLE_PARAMETER as k, citationDraftSchema as l, citeCiterSettingsSchema as m, updateCheckErrorCodeSchema as n, DEFAULT_CITECITER_SETTINGS as o, citeCiterResponseSchema as p, updateCheckResponseSchema as r, TUTOR_SECTION_NAME as s, UpdateChecker as t, citationRecordSchema as u, parseTopicMetadataFile as v, DEFAULT_WHEEL_SLOTS as w, topicMetadataSchema as x, renderCitationContext as y };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kirkchinese/dsh-citeciter",
3
- "version": "0.8.2",
3
+ "version": "0.9.0-alpha.1",
4
4
  "description": "Source-aware native DSH Topics with manual drafts, permissions, visual boards and learning cards",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -34,7 +34,9 @@
34
34
  "node": "^22.19.0 || >=24.0.0"
35
35
  },
36
36
  "publishConfig": {
37
- "access": "public"
37
+ "access": "public",
38
+ "tag": "next",
39
+ "registry": "https://registry.npmjs.org"
38
40
  },
39
41
  "main": "lib/index.js",
40
42
  "types": "lib/types/index.d.ts",
@@ -84,81 +86,35 @@
84
86
  "README.zh.md"
85
87
  ],
86
88
  "peerDependencies": {
87
- "@deepseek-ai/cordis": "^4.0.2",
88
- "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
89
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.1",
90
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
91
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
92
- "@deepseek-ai/dsh-fs": "0.1.5-rc.1",
93
- "@deepseek-ai/dsh-home-paths": "0.1.5-rc.1",
94
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
95
- "@deepseek-ai/dsh-output-retention": "0.1.5-rc.1",
96
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
97
- "@deepseek-ai/dsh-session": "0.1.5-rc.1",
98
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
99
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
100
- "@deepseek-ai/dsh-session-query": "0.1.5-rc.1",
101
- "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
102
- "@deepseek-ai/dsh-session-title-llm": "0.1.5-rc.1",
103
- "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
104
- "@deepseek-ai/dsh-spill": "0.1.5-rc.1",
105
- "@deepseek-ai/dsh-subprocess": "0.1.5-rc.1",
106
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
107
- "@deepseek-ai/dsh-tool-ask-user": "0.1.5-rc.1",
108
- "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.1",
109
- "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.1",
110
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
111
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
112
- "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",
113
- "@deepseek-ai/schemastery": "^3.18.1",
114
- "zod": "^4.4.3"
89
+ "zod": "^4.1.12",
90
+ "@deepseek-ai/cordis": "4.0.2 || 4.0.4",
91
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
92
+ "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
93
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
94
+ "@deepseek-ai/dsh-fs": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
95
+ "@deepseek-ai/dsh-home-paths": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
96
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
97
+ "@deepseek-ai/dsh-output-retention": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
98
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
99
+ "@deepseek-ai/dsh-session": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
100
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
101
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
102
+ "@deepseek-ai/dsh-session-query": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
103
+ "@deepseek-ai/dsh-session-title": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
104
+ "@deepseek-ai/dsh-session-title-llm": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
105
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
106
+ "@deepseek-ai/dsh-spill": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
107
+ "@deepseek-ai/dsh-subprocess": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
108
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
109
+ "@deepseek-ai/dsh-tool-ask-user": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
110
+ "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
111
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
112
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
113
+ "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
114
+ "@deepseek-ai/dsh-user-questions": "0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
115
+ "@deepseek-ai/schemastery": "3.18.2 || 3.18.4"
115
116
  },
116
117
  "devDependencies": {
117
- "@deepseek-ai/cordis": "^4.0.2",
118
- "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
119
- "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.1",
120
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
121
- "@deepseek-ai/dsh-api-gateway": "0.1.5-rc.1",
122
- "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.1",
123
- "@deepseek-ai/dsh-api-settings-controller": "0.1.5-rc.1",
124
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
125
- "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
126
- "@deepseek-ai/dsh-client-store": "0.1.5-rc.1",
127
- "@deepseek-ai/dsh-client-ui-approval": "0.1.5-rc.1",
128
- "@deepseek-ai/dsh-client-ui-chat": "0.1.5-rc.1",
129
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
130
- "@deepseek-ai/dsh-client-ui-layout": "0.1.5-rc.1",
131
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.5-rc.1",
132
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1",
133
- "@deepseek-ai/dsh-client-ui-session": "0.1.5-rc.1",
134
- "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.1",
135
- "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.1.5-rc.2",
136
- "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1",
137
- "@deepseek-ai/dsh-client-ui-user-questions": "0.1.5-rc.1",
138
- "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
139
- "@deepseek-ai/dsh-fs": "0.1.5-rc.1",
140
- "@deepseek-ai/dsh-home-paths": "0.1.5-rc.1",
141
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
142
- "@deepseek-ai/dsh-output-retention": "0.1.5-rc.1",
143
- "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
144
- "@deepseek-ai/dsh-session": "0.1.5-rc.1",
145
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
146
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
147
- "@deepseek-ai/dsh-session-query": "0.1.5-rc.1",
148
- "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
149
- "@deepseek-ai/dsh-session-title-llm": "0.1.5-rc.1",
150
- "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
151
- "@deepseek-ai/dsh-spill": "0.1.5-rc.1",
152
- "@deepseek-ai/dsh-subprocess": "0.1.5-rc.1",
153
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
154
- "@deepseek-ai/dsh-tool-ask-user": "0.1.5-rc.1",
155
- "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.1",
156
- "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.1",
157
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
158
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
159
- "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",
160
- "@deepseek-ai/dsh-util-workspace-path": "0.1.5-rc.2",
161
- "@deepseek-ai/schemastery": "^3.18.1",
162
118
  "@types/mdast": "^4.0.4",
163
119
  "@types/node": "^24.10.0",
164
120
  "@types/react": "~18.3.1",
@@ -172,12 +128,58 @@
172
128
  "react-dom": "^18.2.0",
173
129
  "tsdown": "^0.22.2",
174
130
  "typescript": "^6.0.3",
175
- "zod": "^4.4.3"
131
+ "zod": "^4.4.3",
132
+ "@deepseek-ai/cordis": "4.0.4",
133
+ "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
134
+ "@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2",
135
+ "@deepseek-ai/dsh-agent-preset-registry": "0.1.7-rc.2",
136
+ "@deepseek-ai/dsh-api-gateway": "0.1.7-rc.2",
137
+ "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.2",
138
+ "@deepseek-ai/dsh-api-settings-controller": "0.1.7-rc.2",
139
+ "@deepseek-ai/dsh-attachment": "0.1.7-rc.2",
140
+ "@deepseek-ai/dsh-client-connection": "0.1.7-rc.2",
141
+ "@deepseek-ai/dsh-client-store": "0.1.7-rc.2",
142
+ "@deepseek-ai/dsh-client-ui-approval": "0.1.7-rc.2",
143
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.2",
144
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.2",
145
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.7-rc.2",
146
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.7-rc.2",
147
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.2",
148
+ "@deepseek-ai/dsh-client-ui-session": "0.1.7-rc.2",
149
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.2",
150
+ "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.1.7-rc.2",
151
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.2",
152
+ "@deepseek-ai/dsh-client-ui-user-questions": "0.1.7-rc.2",
153
+ "@deepseek-ai/dsh-commands": "0.1.7-rc.2",
154
+ "@deepseek-ai/dsh-fs": "0.1.7-rc.2",
155
+ "@deepseek-ai/dsh-home-paths": "0.1.7-rc.2",
156
+ "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
157
+ "@deepseek-ai/dsh-output-retention": "0.1.7-rc.2",
158
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.2",
159
+ "@deepseek-ai/dsh-session": "0.1.7-rc.2",
160
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
161
+ "@deepseek-ai/dsh-session-projection": "0.1.7-rc.2",
162
+ "@deepseek-ai/dsh-session-query": "0.1.7-rc.2",
163
+ "@deepseek-ai/dsh-session-title": "0.1.7-rc.2",
164
+ "@deepseek-ai/dsh-session-title-llm": "0.1.7-rc.2",
165
+ "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
166
+ "@deepseek-ai/dsh-spill": "0.1.7-rc.2",
167
+ "@deepseek-ai/dsh-subprocess": "0.1.7-rc.2",
168
+ "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
169
+ "@deepseek-ai/dsh-tool-ask-user": "0.1.7-rc.2",
170
+ "@deepseek-ai/dsh-tool-fs": "0.1.7-rc.2",
171
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.7-rc.2",
172
+ "@deepseek-ai/dsh-tools": "0.1.7-rc.2",
173
+ "@deepseek-ai/dsh-typert-protocol": "0.1.7-rc.2",
174
+ "@deepseek-ai/dsh-user-questions": "0.1.7-rc.2",
175
+ "@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
176
+ "@deepseek-ai/schemastery": "3.18.4",
177
+ "@deepseek-ai/dsh-typert-registry": "0.1.7-rc.2"
176
178
  },
177
179
  "dependencies": {
178
- "@deepseek-ai/dsh-util-values": "0.1.5-rc.1",
179
180
  "html-to-image": "1.11.13",
180
- "katex": "^0.18.4"
181
+ "katex": "^0.18.4",
182
+ "@deepseek-ai/dsh-util-values": "0.1.7-rc.2"
181
183
  },
182
184
  "scripts": {
183
185
  "build": "npm run build:lib && npm run build:bundle",