@hpyperry/dsh-ref-lib 0.7.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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/cordis.patch.yml +6 -0
  4. package/lib/client/RefLibBrowser.d.ts +35 -0
  5. package/lib/client/RefLibBrowser.d.ts.map +1 -0
  6. package/lib/client/RefLibBrowser.js +119 -0
  7. package/lib/client/RefLibBrowser.js.map +1 -0
  8. package/lib/client/RefLibDock.d.ts +44 -0
  9. package/lib/client/RefLibDock.d.ts.map +1 -0
  10. package/lib/client/RefLibDock.js +218 -0
  11. package/lib/client/RefLibDock.js.map +1 -0
  12. package/lib/client/RefLibPanel.d.ts +47 -0
  13. package/lib/client/RefLibPanel.d.ts.map +1 -0
  14. package/lib/client/RefLibPanel.js +59 -0
  15. package/lib/client/RefLibPanel.js.map +1 -0
  16. package/lib/client/data.d.ts +53 -0
  17. package/lib/client/data.d.ts.map +1 -0
  18. package/lib/client/data.js +74 -0
  19. package/lib/client/data.js.map +1 -0
  20. package/lib/client/index.d.ts +32 -0
  21. package/lib/client/index.d.ts.map +1 -0
  22. package/lib/client/index.js +80 -0
  23. package/lib/client/index.js.map +1 -0
  24. package/lib/client/layout.d.ts +34 -0
  25. package/lib/client/layout.d.ts.map +1 -0
  26. package/lib/client/layout.js +65 -0
  27. package/lib/client/layout.js.map +1 -0
  28. package/lib/client/locales.d.ts +80 -0
  29. package/lib/client/locales.d.ts.map +1 -0
  30. package/lib/client/locales.js +84 -0
  31. package/lib/client/locales.js.map +1 -0
  32. package/lib/client/styles.d.ts +15 -0
  33. package/lib/client/styles.d.ts.map +1 -0
  34. package/lib/client/styles.js +513 -0
  35. package/lib/client/styles.js.map +1 -0
  36. package/lib/client.js +1377 -0
  37. package/lib/client.js.map +1 -0
  38. package/lib/commands.d.ts +38 -0
  39. package/lib/commands.d.ts.map +1 -0
  40. package/lib/commands.js +49 -0
  41. package/lib/commands.js.map +1 -0
  42. package/lib/index.d.ts +36 -0
  43. package/lib/index.d.ts.map +1 -0
  44. package/lib/index.js +94 -0
  45. package/lib/index.js.map +1 -0
  46. package/lib/logic.d.ts +32 -0
  47. package/lib/logic.d.ts.map +1 -0
  48. package/lib/logic.js +48 -0
  49. package/lib/logic.js.map +1 -0
  50. package/lib/render.d.ts +18 -0
  51. package/lib/render.d.ts.map +1 -0
  52. package/lib/render.js +40 -0
  53. package/lib/render.js.map +1 -0
  54. package/lib/routes.d.ts +39 -0
  55. package/lib/routes.d.ts.map +1 -0
  56. package/lib/routes.js +210 -0
  57. package/lib/routes.js.map +1 -0
  58. package/lib/service.d.ts +88 -0
  59. package/lib/service.d.ts.map +1 -0
  60. package/lib/service.js +212 -0
  61. package/lib/service.js.map +1 -0
  62. package/lib/spec.d.ts +33 -0
  63. package/lib/spec.d.ts.map +1 -0
  64. package/lib/spec.js +13 -0
  65. package/lib/spec.js.map +1 -0
  66. package/lib/validate.d.ts +17 -0
  67. package/lib/validate.d.ts.map +1 -0
  68. package/lib/validate.js +35 -0
  69. package/lib/validate.js.map +1 -0
  70. package/package.json +64 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 跨 node/client 共享的**零依赖**校验与消毒纯函数。
3
+ *
4
+ * node half(service/logic/render)与 client half(client/data.ts)分属两个构建
5
+ * 产物,无法共享带 node 依赖的模块;本模块只依赖类型(spec.ts,type-only 导入
6
+ * 在打包时被擦除),两半均可直接引用——消除 `isRefLibEntry` 在 logic.ts 与
7
+ * client/data.ts 中的逐字重复,控制字符集合也在此统一维护。
8
+ * @module @hpyperry/dsh-ref-lib/src/validate
9
+ */
10
+ /**
11
+ * 不可见控制字符集合(提示词注入卫生):
12
+ * C0(\u0000-\u001f)、DEL(\u007f)、C1(\u0080-\u009f)、行/段分隔符
13
+ * (\u2028/\u2029——旧实现遗漏,同样能破坏注入格式)。
14
+ * 用于 add 拒绝(service.ts)与渲染层兜底消毒(render.ts)。
15
+ */
16
+ const CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/;
17
+ const CONTROL_CHARACTERS_GLOBAL = /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g;
18
+ /** 文本是否含不可见控制字符。 */
19
+ export function hasControlCharacters(text) {
20
+ return CONTROL_CHARACTERS.test(text);
21
+ }
22
+ /** 把全部不可见控制字符替换为 U+FFFD(路径/备注最终会进入系统提示词,兜底消毒)。 */
23
+ export function sanitizeControlCharacters(text) {
24
+ return text.replace(CONTROL_CHARACTERS_GLOBAL, '\uFFFD');
25
+ }
26
+ /** 校验一个未知对象是否为合法条目(宽松:仅要求 id/path 字符串、note 可选字符串)。 */
27
+ export function isRefLibEntry(value) {
28
+ if (typeof value !== 'object' || value === null)
29
+ return false;
30
+ const { id, path, note } = value;
31
+ if (typeof id !== 'string' || typeof path !== 'string')
32
+ return false;
33
+ return note === undefined || typeof note === 'string';
34
+ }
35
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,0CAA0C,CAAA;AACrE,MAAM,yBAAyB,GAAG,2CAA2C,CAAA;AAE7E,oBAAoB;AACpB,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAA;AAC1D,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAyD,CAAA;IACpF,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACpE,OAAO,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAA;AACvD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@hpyperry/dsh-ref-lib",
3
+ "version": "0.7.0",
4
+ "description": "只读参考库插件:UI 交互式管理(应用内目录浏览器/系统选择器/手动路径直加)+ systemPrompt 注入 + per-session sidecar 持久化",
5
+ "license": "MIT",
6
+ "private": false,
7
+ "type": "module",
8
+ "main": "lib/index.js",
9
+ "types": "lib/index.d.ts",
10
+ "files": [
11
+ "lib",
12
+ "cordis.patch.yml"
13
+ ],
14
+ "exports": {
15
+ ".": {
16
+ "types": "./lib/index.d.ts",
17
+ "default": "./lib/index.js"
18
+ },
19
+ "./client": {
20
+ "types": "./lib/client/index.d.ts",
21
+ "default": "./lib/client.js"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "dsh": {
26
+ "bundle": {
27
+ "patch": "./cordis.patch.yml"
28
+ },
29
+ "client": {
30
+ "platform": "web"
31
+ }
32
+ },
33
+ "scripts": {
34
+ "build": "tsc && tsdown",
35
+ "build:node": "tsc",
36
+ "build:client": "tsdown",
37
+ "lint": "eslint .",
38
+ "test": "vitest run",
39
+ "typecheck": "tsc --noEmit"
40
+ },
41
+ "peerDependencies": {
42
+ "@deepseek-ai/cordis": "^4.0.1",
43
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
44
+ "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
45
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
46
+ "@deepseek-ai/dsh-commands": "^0.1.0-rc.6",
47
+ "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6",
48
+ "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6",
49
+ "@deepseek-ai/dsh-session": "^0.1.0-rc.6",
50
+ "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6",
51
+ "react": "^18.2.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.0.0",
55
+ "@types/react": "^18.3.31",
56
+ "eslint": "^10.8.1",
57
+ "prettier": "^3.9.6",
58
+ "react": "^18.3.1",
59
+ "tsdown": "^0.22.14",
60
+ "typescript": "^5.6.0",
61
+ "typescript-eslint": "^8.67.0",
62
+ "vitest": "^4.0.0"
63
+ }
64
+ }