@trungtamcongnghedigital/vsaf 1.4.3 → 1.4.4-rc.2

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 (97) hide show
  1. package/README.md +6 -3
  2. package/package.json +1 -1
  3. package/packages/cli/dist/approval/secrets.d.ts +24 -0
  4. package/packages/cli/dist/approval/secrets.d.ts.map +1 -1
  5. package/packages/cli/dist/approval/secrets.js +14 -0
  6. package/packages/cli/dist/approval/secrets.js.map +1 -1
  7. package/packages/cli/dist/commands/install/hooks.d.ts +5 -3
  8. package/packages/cli/dist/commands/install/hooks.d.ts.map +1 -1
  9. package/packages/cli/dist/commands/install/hooks.js +5 -3
  10. package/packages/cli/dist/commands/install/hooks.js.map +1 -1
  11. package/packages/cli/dist/commands/install.d.ts +1 -1
  12. package/packages/cli/dist/commands/install.d.ts.map +1 -1
  13. package/packages/cli/dist/commands/install.js +204 -25
  14. package/packages/cli/dist/commands/install.js.map +1 -1
  15. package/packages/cli/dist/commands/run-cancel.d.ts +12 -0
  16. package/packages/cli/dist/commands/run-cancel.d.ts.map +1 -0
  17. package/packages/cli/dist/commands/run-cancel.js +34 -0
  18. package/packages/cli/dist/commands/run-cancel.js.map +1 -0
  19. package/packages/cli/dist/commands/skill.d.ts.map +1 -1
  20. package/packages/cli/dist/commands/skill.js +12 -3
  21. package/packages/cli/dist/commands/skill.js.map +1 -1
  22. package/packages/cli/dist/commands/source/mcp-tools.d.ts +0 -10
  23. package/packages/cli/dist/commands/source/mcp-tools.d.ts.map +1 -1
  24. package/packages/cli/dist/commands/source/mcp-tools.js +0 -19
  25. package/packages/cli/dist/commands/source/mcp-tools.js.map +1 -1
  26. package/packages/cli/dist/commands/telemetry-skill.d.ts +25 -2
  27. package/packages/cli/dist/commands/telemetry-skill.d.ts.map +1 -1
  28. package/packages/cli/dist/commands/telemetry-skill.js +90 -9
  29. package/packages/cli/dist/commands/telemetry-skill.js.map +1 -1
  30. package/packages/cli/dist/gateway/commands.d.ts +83 -0
  31. package/packages/cli/dist/gateway/commands.d.ts.map +1 -0
  32. package/packages/cli/dist/gateway/commands.js +519 -0
  33. package/packages/cli/dist/gateway/commands.js.map +1 -0
  34. package/packages/cli/dist/gateway/key-info.d.ts +70 -0
  35. package/packages/cli/dist/gateway/key-info.d.ts.map +1 -0
  36. package/packages/cli/dist/gateway/key-info.js +150 -0
  37. package/packages/cli/dist/gateway/key-info.js.map +1 -0
  38. package/packages/cli/dist/gateway/local-settings.d.ts +63 -0
  39. package/packages/cli/dist/gateway/local-settings.d.ts.map +1 -0
  40. package/packages/cli/dist/gateway/local-settings.js +252 -0
  41. package/packages/cli/dist/gateway/local-settings.js.map +1 -0
  42. package/packages/cli/dist/gateway/project-dirs.d.ts +38 -0
  43. package/packages/cli/dist/gateway/project-dirs.d.ts.map +1 -0
  44. package/packages/cli/dist/gateway/project-dirs.js +108 -0
  45. package/packages/cli/dist/gateway/project-dirs.js.map +1 -0
  46. package/packages/cli/dist/index.js +233 -7
  47. package/packages/cli/dist/index.js.map +1 -1
  48. package/packages/cli/dist/mcp/server.d.ts +92 -9
  49. package/packages/cli/dist/mcp/server.d.ts.map +1 -1
  50. package/packages/cli/dist/mcp/server.js +238 -30
  51. package/packages/cli/dist/mcp/server.js.map +1 -1
  52. package/packages/cli/dist/telemetry/active-node.d.ts +46 -0
  53. package/packages/cli/dist/telemetry/active-node.d.ts.map +1 -1
  54. package/packages/cli/dist/telemetry/active-node.js +118 -43
  55. package/packages/cli/dist/telemetry/active-node.js.map +1 -1
  56. package/packages/cli/dist/telemetry/backfill.d.ts +26 -0
  57. package/packages/cli/dist/telemetry/backfill.d.ts.map +1 -0
  58. package/packages/cli/dist/telemetry/backfill.js +198 -0
  59. package/packages/cli/dist/telemetry/backfill.js.map +1 -0
  60. package/packages/cli/dist/telemetry/callbacks.d.ts +19 -0
  61. package/packages/cli/dist/telemetry/callbacks.d.ts.map +1 -1
  62. package/packages/cli/dist/telemetry/callbacks.js +41 -0
  63. package/packages/cli/dist/telemetry/callbacks.js.map +1 -1
  64. package/packages/cli/dist/telemetry/langfuse-scores.d.ts +3 -1
  65. package/packages/cli/dist/telemetry/langfuse-scores.d.ts.map +1 -1
  66. package/packages/cli/dist/telemetry/langfuse-scores.js +5 -2
  67. package/packages/cli/dist/telemetry/langfuse-scores.js.map +1 -1
  68. package/packages/cli/dist/telemetry/otel-sdk.d.ts +54 -2
  69. package/packages/cli/dist/telemetry/otel-sdk.d.ts.map +1 -1
  70. package/packages/cli/dist/telemetry/otel-sdk.js +100 -1
  71. package/packages/cli/dist/telemetry/otel-sdk.js.map +1 -1
  72. package/packages/cli/dist/telemetry/otel-tracer.d.ts +24 -1
  73. package/packages/cli/dist/telemetry/otel-tracer.d.ts.map +1 -1
  74. package/packages/cli/dist/telemetry/otel-tracer.js +129 -1
  75. package/packages/cli/dist/telemetry/otel-tracer.js.map +1 -1
  76. package/packages/cli/dist/telemetry/tracer.d.ts +35 -0
  77. package/packages/cli/dist/telemetry/tracer.d.ts.map +1 -1
  78. package/packages/cli/dist/telemetry/tracer.js.map +1 -1
  79. package/packages/cli/dist/telemetry/user.d.ts +17 -4
  80. package/packages/cli/dist/telemetry/user.d.ts.map +1 -1
  81. package/packages/cli/dist/telemetry/user.js +54 -7
  82. package/packages/cli/dist/telemetry/user.js.map +1 -1
  83. package/packages/core/dist/engine/dag-executor.d.ts +4 -1
  84. package/packages/core/dist/engine/dag-executor.d.ts.map +1 -1
  85. package/packages/core/dist/engine/dag-executor.js.map +1 -1
  86. package/packages/core/dist/store/run-store.d.ts +17 -1
  87. package/packages/core/dist/store/run-store.d.ts.map +1 -1
  88. package/packages/core/dist/store/run-store.js +42 -0
  89. package/packages/core/dist/store/run-store.js.map +1 -1
  90. package/packages/core/dist/store/types.d.ts +27 -2
  91. package/packages/core/dist/store/types.d.ts.map +1 -1
  92. package/scripts/probe/dem-chu-nhay-cam.sh +49 -0
  93. package/scripts/probe/do-lop-va.mjs +313 -0
  94. package/scripts/probe/ho-so/domains.json +21 -0
  95. package/scripts/probe/soi-chu-nhay-cam.sh +106 -0
  96. package/scripts/probe/soi-master-knowledge.sh +188 -0
  97. package/scripts/probe/ten-nguoi.vi-du.txt +18 -0
package/README.md CHANGED
@@ -163,8 +163,11 @@ vsaf source list [--json] # List every declared source
163
163
  vsaf source remove kho # Drop one
164
164
  ```
165
165
 
166
- Declared in `~/.vsaf/sources.yaml`, a separate file next to `registry.yaml`. Read-only MCP tools
167
- `vsaf_source_path` and `vsaf_source_list` expose the same lookup to an agent.
166
+ Declared in `~/.vsaf/sources.yaml`, a separate file next to `registry.yaml`.
167
+
168
+ These CLI commands are unchanged: they print paths, for humans and scripts. Agents take a
169
+ different road — the read-only MCP tool `vsaf_knowledge_query` returns **content** with citation
170
+ labels and never a path. The two older path-returning tools were removed in this release.
168
171
 
169
172
  Full guide (Vietnamese): [docs/huong-dan-nguon-tren-may.md](docs/huong-dan-nguon-tren-may.md).
170
173
 
@@ -701,7 +704,7 @@ Existing `telemetry.langfuse` configs (and `LANGFUSE_*` env vars) are **auto-map
701
704
 
702
705
  ### Privacy note
703
706
 
704
- Traces carry `user.id` (from `VSAF_USER` → `git config user.name` → OS username), the run args (truncated at 4KB), and model names — all sent to whatever endpoint is configured, exactly as with the previous Langfuse SDK. Only point telemetry at infrastructure you trust.
707
+ Traces carry `user.id` (from the AI Gateway user name of the key saved by `vsaf virtual key setup` → the key alias saved the same way → `VSAF_USER` → `git config user.name` → OS username), the run args (truncated at 4KB), and model names — all sent to whatever endpoint is configured, exactly as with the previous Langfuse SDK. Only point telemetry at infrastructure you trust.
705
708
 
706
709
  ### Session grouping (MCP mode) — SessionStart hook
707
710
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trungtamcongnghedigital/vsaf",
3
- "version": "1.4.3",
3
+ "version": "1.4.4-rc.2",
4
4
  "description": "is it ready to use ?",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -27,10 +27,27 @@ export interface ProxyCredentials {
27
27
  base_url?: string;
28
28
  auth_token?: string;
29
29
  }
30
+ /** Phần AI Gateway của tệp bí mật. Ghi bởi `vsaf virtual key setup` sau khi gateway xác nhận key. */
31
+ export interface GatewayCredentials {
32
+ virtual_key?: string;
33
+ /**
34
+ * Tên key (key alias) gateway trả về cho `virtual_key` lúc cài. Không phải bí mật, nằm đây
35
+ * để đi cùng key: đổi key thì tên đổi theo. Dùng làm `user.id` trên trace để khớp với trace
36
+ * của gateway. Key không đọc được tên thì không có trường này.
37
+ */
38
+ key_alias?: string;
39
+ /**
40
+ * Tên người dùng gateway trả về cho `virtual_key` lúc cài (trường `user_name` của
41
+ * `/key/info`), đúng tên gateway dùng trên Langfuse. Đứng trước `key_alias` khi đặt `user.id`
42
+ * cho trace. Gateway đời cũ không trả, khi đó không có trường này.
43
+ */
44
+ user_name?: string;
45
+ }
30
46
  /** Toàn bộ tệp bí mật theo máy. Một tệp cho mọi bí mật, không phải mỗi thứ một chỗ. */
31
47
  export interface VsafCredentials {
32
48
  telegram?: TelegramCredentials;
33
49
  proxy?: ProxyCredentials;
50
+ gateway?: GatewayCredentials;
34
51
  }
35
52
  /**
36
53
  * Thư mục nhà của vsaf trên máy này.
@@ -95,6 +112,13 @@ export declare function daBatCapTuThongTin(credentials: VsafCredentials, env?: N
95
112
  * bị đọc nhầm thành bot token hỏng, xem phần phân loại lỗi.
96
113
  */
97
114
  export declare function resolveProxyAuthToken(credentials: VsafCredentials, env?: NodeJS.ProcessEnv): ResolvedSecret | null;
115
+ /**
116
+ * Virtual key của AI Gateway: biến môi trường trước, tệp sau.
117
+ *
118
+ * Cùng thứ tự với hai bí mật trên và cùng lý do: máy dùng chung và máy chạy tự động truyền
119
+ * key qua biến môi trường, máy cá nhân ghi tệp một lần lúc chạy lệnh cài key.
120
+ */
121
+ export declare function resolveGatewayKey(credentials: VsafCredentials, env?: NodeJS.ProcessEnv): ResolvedSecret | null;
98
122
  /**
99
123
  * Xoá dấu vết bot token khỏi một đường dẫn.
100
124
  *
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/approval/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAOD;;;;;;GAMG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,qCAAqC;AACrC,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,SAAoB,GAAG,eAAe,CAWpF;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAWvE;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,SAAoB,GAAG,eAAe,CAWzE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,SAAoB,GAAG,IAAI,CASvF;AAOD,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,eAAe,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,GAAG,IAAI,CAKvB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,eAAe,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,eAAe,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,GAAG,IAAI,CAKvB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAOtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CActF;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,CAGnE"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/approval/secrets.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ exports.writeCredentials = writeCredentials;
26
26
  exports.resolveBotToken = resolveBotToken;
27
27
  exports.daBatCapTuThongTin = daBatCapTuThongTin;
28
28
  exports.resolveProxyAuthToken = resolveProxyAuthToken;
29
+ exports.resolveGatewayKey = resolveGatewayKey;
29
30
  exports.maskTokenInUrl = maskTokenInUrl;
30
31
  exports.redactSecrets = redactSecrets;
31
32
  exports.validateProxyAuthToken = validateProxyAuthToken;
@@ -155,6 +156,19 @@ function resolveProxyAuthToken(credentials, env = process.env) {
155
156
  const fromFile = nonEmpty(credentials.proxy?.auth_token);
156
157
  return fromFile ? { value: fromFile, source: 'file' } : null;
157
158
  }
159
+ /**
160
+ * Virtual key của AI Gateway: biến môi trường trước, tệp sau.
161
+ *
162
+ * Cùng thứ tự với hai bí mật trên và cùng lý do: máy dùng chung và máy chạy tự động truyền
163
+ * key qua biến môi trường, máy cá nhân ghi tệp một lần lúc chạy lệnh cài key.
164
+ */
165
+ function resolveGatewayKey(credentials, env = process.env) {
166
+ const fromEnv = nonEmpty(env.VSAF_GATEWAY_KEY);
167
+ if (fromEnv)
168
+ return { value: fromEnv, source: 'env' };
169
+ const fromFile = nonEmpty(credentials.gateway?.virtual_key);
170
+ return fromFile ? { value: fromFile, source: 'file' } : null;
171
+ }
158
172
  /**
159
173
  * Xoá dấu vết bot token khỏi một đường dẫn.
160
174
  *
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/approval/secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/approval/secrets.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,11 @@ export declare function deployHooks(packDir: string, projectPath: string): strin
17
17
  /**
18
18
  * Fold a pack's event declarations into a repo's `.claude/settings.json`.
19
19
  *
20
- * The block has to live in the committed settings file: Claude Code replaces the
21
- * whole `hooks` block from `settings.local.json` rather than merging it, so a
22
- * local override would silently switch every hook off.
20
+ * The block lives in the committed settings file so every teammate who pulls the
21
+ * repo gets the pack's hooks without running anything. Claude Code adds up the
22
+ * hooks of `settings.json` and `settings.local.json` (checked on a real session,
23
+ * PLF-959), so a hook in the local file runs alongside these, not instead of them —
24
+ * which is also why the same hook must not be written to both files.
23
25
  *
24
26
  * Returns the settings path, or null when the pack declares no events.
25
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/install/hooks.ts"],"names":[],"mappings":"AA+DA;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EAGrB,OAAO,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAC9C,MAAM,GAAG,IAAI,CAwCf;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAwC1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B3F"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/commands/install/hooks.ts"],"names":[],"mappings":"AA+DA;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EAGrB,OAAO,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAC9C,MAAM,GAAG,IAAI,CAwCf;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAwC1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BlF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA2B3F"}
@@ -142,9 +142,11 @@ function deployHooks(packDir, projectPath) {
142
142
  /**
143
143
  * Fold a pack's event declarations into a repo's `.claude/settings.json`.
144
144
  *
145
- * The block has to live in the committed settings file: Claude Code replaces the
146
- * whole `hooks` block from `settings.local.json` rather than merging it, so a
147
- * local override would silently switch every hook off.
145
+ * The block lives in the committed settings file so every teammate who pulls the
146
+ * repo gets the pack's hooks without running anything. Claude Code adds up the
147
+ * hooks of `settings.json` and `settings.local.json` (checked on a real session,
148
+ * PLF-959), so a hook in the local file runs alongside these, not instead of them —
149
+ * which is also why the same hook must not be written to both files.
148
150
  *
149
151
  * Returns the settings path, or null when the pack declares no events.
150
152
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/commands/install/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/commands/install/hooks.ts"],"names":[],"mappings":"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"}
@@ -99,7 +99,7 @@ export interface InstallResult {
99
99
  * không ai đặt chúng nữa — đường duy nhất còn lại là file kế hoạch mà `apply-pack` đọc,
100
100
  * và hiện chưa có bên nào ghi file đó.
101
101
  *
102
- * Giữ lại chứ không xoá vì chúng là đầu vào của phần nối dây đa repo, và Sáng chốt là
102
+ * Giữ lại chứ không xoá vì chúng là đầu vào của phần nối dây đa repo, và chủ dự án chốt là
103
103
  * phần đó **chuyển sang `install.sh` của flow, sửa sau** — chứ không phải bỏ. Xoá bây
104
104
  * giờ là ném đi thứ sắp được gọi lại từ chỗ khác. Ai đọc tới đây mà `install.sh` đã có
105
105
  * cách tự khai: nối nó vào đây, đừng dựng lại cờ ở engine.
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ const delegate_js_1 = require("./install/delegate.js");
39
39
  const precommit_js_1 = require("./install/precommit.js");
40
40
  const init_js_1 = require("./init.js");
41
41
  const ds_registry_js_1 = require("./install/ds-registry.js");
42
+ const co_moi_truong_js_1 = require("./install/co-moi-truong.js");
42
43
  const bootstrap_repo_js_1 = require("./install/bootstrap-repo.js");
43
44
  const spec_scaffold_js_1 = require("./install/spec-scaffold.js");
44
45
  /**
@@ -468,11 +469,14 @@ function pullSkillsFromHub(source, wanted) {
468
469
  + `/${encodeURIComponent(s.slug)}/download`,
469
470
  zipPath: (0, path_1.join)(dir, `${s.slug}.zip`),
470
471
  }));
472
+ const versions = {};
471
473
  for (const done of downloadAll(jobs, resolveToken(registry), dir)) {
472
474
  if (done.error) {
473
475
  missing.push({ name: done.name, reason: done.error });
474
476
  continue;
475
477
  }
478
+ if (done.version)
479
+ versions[done.name] = done.version;
476
480
  try {
477
481
  unzipInto((0, fs_1.readFileSync)(jobs.find(j => j.name === done.name).zipPath), (0, path_1.join)(dir, done.name));
478
482
  pulled.push(done.name);
@@ -487,7 +491,7 @@ function pullSkillsFromHub(source, wanted) {
487
491
  throw new HubUnavailableError(`Không tải được skill nào từ Skill Hub (${registry}).\n`
488
492
  + ` Lý do đầu tiên gặp phải: ${missing[0]?.reason ?? 'không rõ'}`);
489
493
  }
490
- return { dir, pulled, missing };
494
+ return { dir, pulled, missing, versions };
491
495
  }
492
496
  /**
493
497
  * Tải cả loạt trong MỘT tiến trình Node con.
@@ -517,21 +521,60 @@ function downloadAll(jobs, token, dir) {
517
521
  }
518
522
  return JSON.parse((0, fs_1.readFileSync)(outFile, 'utf-8'));
519
523
  }
524
+ /**
525
+ * Ai phụ trách bộ skill này, để thông báo lỗi chỉ được đích danh người liên hệ.
526
+ *
527
+ * Lấy từ lần cập nhật gần nhất trên bản sao repo mà engine vừa tải. Pack tạm do file cài
528
+ * của bộ tự dựng ra thì không phải bản sao git — khi đó lùi về `VSAF_FLOW_DIR`, là thư
529
+ * mục repo thật mà engine đã truyền cho file cài đó.
530
+ */
531
+ function lienHeBoSkill(packDir) {
532
+ const doc = (noi, args) => {
533
+ try {
534
+ const ra = (0, child_process_1.execFileSync)('git', ['-C', noi, ...args], { stdio: 'pipe', encoding: 'utf-8' });
535
+ return ra.trim() || undefined;
536
+ }
537
+ catch {
538
+ return undefined;
539
+ }
540
+ };
541
+ for (const noi of [packDir, process.env.VSAF_FLOW_DIR].filter(Boolean)) {
542
+ const nguoi = doc(noi, ['log', '-1', '--format=%an <%ae>']);
543
+ if (!nguoi)
544
+ continue;
545
+ const url = doc(noi, ['remote', 'get-url', 'origin']);
546
+ return { repo: url?.replace(/\.git$/, '').split('/').filter(Boolean).pop(), nguoi };
547
+ }
548
+ return {};
549
+ }
520
550
  /** Chạy trong tiến trình con: tải từng gói, lỗi của một skill không làm hỏng cả loạt. */
521
551
  const DOWNLOAD_SCRIPT = `
522
552
  import { readFileSync, writeFileSync } from 'fs';
523
553
  const [, , jobsFile, outFile] = process.argv;
524
554
  const token = process.env.VSAF_HUB_TOKEN;
555
+ const dau = token ? { Authorization: 'Bearer ' + token } : {};
525
556
  const done = [];
557
+
558
+ // Phiên bản nằm sẵn trong tên tệp mà Hub đặt cho gói tải về, dạng <slug>-<ban>.zip.
559
+ // Đọc ở đây là MIỄN PHÍ và đúng hơn hỏi riêng: nó là phiên bản của chính gói vừa tải,
560
+ // không phải của một lượt hỏi khác có thể đã lệch.
561
+ function banTuTenTep(res, slug) {
562
+ const cd = res.headers.get('content-disposition') || '';
563
+ const m = cd.match(/filename\\*?=(?:UTF-8''|")?([^";]+)/i);
564
+ if (!m) return undefined;
565
+ let ten;
566
+ try { ten = decodeURIComponent(m[1]); } catch { ten = m[1]; }
567
+ const g = ten.replace(/\\.zip$/i, '').match(new RegExp('^' + slug + '-(.+)$'));
568
+ return g ? g[1] : undefined;
569
+ }
570
+
526
571
  for (const job of JSON.parse(readFileSync(jobsFile, 'utf-8'))) {
527
572
  try {
528
- const res = await fetch(job.url, {
529
- headers: token ? { Authorization: 'Bearer ' + token } : {},
530
- redirect: 'follow',
531
- });
573
+ const res = await fetch(job.url, { headers: dau, redirect: 'follow' });
532
574
  if (!res.ok) { done.push({ name: job.name, error: job.slug + ' → HTTP ' + res.status }); continue; }
575
+ const version = banTuTenTep(res, job.slug);
533
576
  writeFileSync(job.zipPath, Buffer.from(await res.arrayBuffer()));
534
- done.push({ name: job.name });
577
+ done.push({ name: job.name, version });
535
578
  } catch (error) {
536
579
  done.push({ name: job.name, error: String((error && error.message) || error) });
537
580
  }
@@ -611,25 +654,149 @@ function resolveSkillDir(packDir, pack, packInfo) {
611
654
  ].filter(s => !SKIP_SKILLS.includes(s.name));
612
655
  if (wanted.length === 0)
613
656
  return packDir;
657
+ const { repo, nguoi } = lienHeBoSkill(packDir);
658
+ const tenRepo = repo ? `repository ${repo} trên Bitbucket` : 'repository trên Bitbucket';
614
659
  try {
615
- const { dir, pulled, missing } = pullSkillsFromHub(source, wanted);
616
- console.log(`[vsaf] Lấy skill từ Skill Hub (${source.namespace}): ${pulled.length}/${wanted.length} skill`);
660
+ const { dir, pulled, missing, versions } = pullSkillsFromHub(source, wanted);
661
+ // Nói LẤY NHỮNG GÌ và BẢN NÀO, không chỉ lấy mấy cái. Con số trần không giúp đối
662
+ // chiếu được giữa hai máy, mà đó đúng là lúc người ta cần log này nhất.
663
+ console.log(`[vsaf] Lấy skill từ Skill Hub (${source.namespace}) — bản mới nhất: ${pulled.length}/${wanted.length} skill`);
664
+ const rong = Math.max(...pulled.map(n => n.length), 0);
665
+ for (const name of pulled) {
666
+ console.log(`[vsaf] ${name.padEnd(rong)} ${versions[name] ?? '(không rõ phiên bản)'}`);
667
+ }
617
668
  for (const { name, reason } of missing) {
618
- console.log(`[vsaf] ${name}: không lấy được từ Hub (${reason}) — dùng bản trong kho mã`);
669
+ console.log(`[vsaf] ${name}: không lấy được từ Hub (${reason})`);
619
670
  if ((0, fs_1.existsSync)((0, path_1.join)(packDir, name, 'SKILL.md'))) {
620
671
  (0, fs_1.cpSync)((0, path_1.join)(packDir, name), (0, path_1.join)(dir, name), { recursive: true });
621
672
  }
622
673
  }
674
+ if (missing.length > 0) {
675
+ // Người cài không tự sửa được mấy lỗi này — skill chưa đẩy lên Hub, hay khai sai
676
+ // namespace, đều nằm ở phía đội làm bộ skill. Nói thẳng ra, kèm người để hỏi.
677
+ console.log('[vsaf] Đây là lỗi cấu hình của bộ skill, không phải của máy bạn.');
678
+ if (nguoi)
679
+ console.log(`[vsaf] Liên hệ: ${nguoi} (người cập nhật gần nhất trên ${tenRepo})`);
680
+ else
681
+ console.log(`[vsaf] Liên hệ đội phát triển bộ skill qua ${tenRepo}.`);
682
+ console.log(`[vsaf] Tạm thời dùng bản trong ${tenRepo}.`);
683
+ }
623
684
  return dir;
624
685
  }
625
686
  catch (error) {
626
687
  if (!(error instanceof HubUnavailableError))
627
688
  throw error;
628
689
  console.log(`[vsaf] ${error.message}`);
629
- console.log('[vsaf] Dùng skill trong kho mã cho lượt cài này.');
690
+ console.log(`[vsaf] Dùng skill trong ${tenRepo} cho lượt cài này.`);
630
691
  return packDir;
631
692
  }
632
693
  }
694
+ /**
695
+ * Hỏi một câu có/không ngay tại terminal, đồng bộ.
696
+ *
697
+ * Đọc `/dev/tty` trước rồi mới tới fd 0, cùng lý do như `waitForEnter`: một prompt trước
698
+ * đó trong cùng lượt chạy có thể đã đóng stdin, và khi ấy đọc fd 0 trả về rỗng ngay thay
699
+ * vì chờ — tức là hỏi xong tự trả lời hộ người dùng.
700
+ */
701
+ function hoiCoKhong(cauHoi) {
702
+ process.stdout.write(cauHoi);
703
+ for (const nguon of ['/dev/tty', 0]) {
704
+ let fd;
705
+ try {
706
+ fd = typeof nguon === 'string' ? (0, fs_1.openSync)(nguon, 'r') : nguon;
707
+ const byte = Buffer.alloc(1);
708
+ let dong = '';
709
+ for (;;) {
710
+ if ((0, fs_1.readSync)(fd, byte, 0, 1, null) === 0)
711
+ break;
712
+ if (byte[0] === 0x0a) {
713
+ console.log('');
714
+ return /^y(es)?$/i.test(dong.trim());
715
+ }
716
+ dong += String.fromCharCode(byte[0]);
717
+ }
718
+ }
719
+ catch {
720
+ // Không có /dev/tty (Windows) hoặc không mở được: thử nguồn kế tiếp.
721
+ }
722
+ finally {
723
+ if (typeof nguon === 'string' && fd !== undefined)
724
+ (0, fs_1.closeSync)(fd);
725
+ }
726
+ }
727
+ console.log('');
728
+ return false;
729
+ }
730
+ /** Tên các skill bộ này sẽ đặt vào dự án, đúng tên sau khi cài. */
731
+ function tenSauKhiCai(pack, packInfo) {
732
+ return [
733
+ ...packInfo.skillNames.filter(n => !SKIP_SKILLS.includes(n)).map(n => `${pack}-${n}`),
734
+ ...packInfo.bundledNames.filter(n => !SKIP_SKILLS.includes(n)),
735
+ ];
736
+ }
737
+ /** Gói danh sách tên thành từng dòng vừa bề ngang terminal. */
738
+ function chiaDong(ten, rong = 72) {
739
+ const dong = [];
740
+ let hien = '';
741
+ for (const t of ten) {
742
+ if (hien && hien.length + t.length + 2 > rong) {
743
+ dong.push(hien);
744
+ hien = '';
745
+ }
746
+ hien += (hien ? ', ' : '') + t;
747
+ }
748
+ if (hien)
749
+ dong.push(hien);
750
+ return dong;
751
+ }
752
+ /**
753
+ * Nói trước sẽ cài những gì, rồi mới xin phép.
754
+ *
755
+ * Chỉ gọi cho bộ khai `skillSource` — bộ chưa khai giữ nguyên hành vi cũ, không hỏi.
756
+ * Trả `false` thì KHÔNG cài skill nào cả: người dùng đã nói không, nên cài một phần là
757
+ * làm thứ họ không đồng ý.
758
+ *
759
+ * Workflow không nằm trong phạm vi câu hỏi này và không bị đụng tới — bản người dùng
760
+ * sửa tay vẫn được giữ như từ trước tới nay.
761
+ */
762
+ function xinPhepCaiSkill(pack, packInfo, skillsDir, options) {
763
+ const ten = tenSauKhiCai(pack, packInfo);
764
+ if (ten.length === 0)
765
+ return true;
766
+ const daCo = ten.filter(n => (0, fs_1.existsSync)((0, path_1.join)(skillsDir, n, 'SKILL.md')));
767
+ console.log(`[vsaf] Lượt cài này sẽ đặt ${ten.length} skill vào ${skillsDir}:`);
768
+ for (const d of chiaDong(ten))
769
+ console.log(`[vsaf] ${d}`);
770
+ if (daCo.length === ten.length) {
771
+ // Lần cài lại: cả danh sách vừa in đều đã có sẵn. In lại y hệt lần nữa chỉ làm
772
+ // người đọc phải dò xem hai danh sách có khác nhau chỗ nào — mà không.
773
+ console.log('[vsaf] CẢ 20 skill trên đang có sẵn và sẽ bị GHI ĐÈ bằng bản trên Skill Hub.'
774
+ .replace('20', String(ten.length)));
775
+ console.log('[vsaf] Phần bạn tự sửa trong chúng sẽ mất.');
776
+ }
777
+ else if (daCo.length > 0) {
778
+ console.log(`[vsaf] ${daCo.length} skill trùng tên đang có sẽ bị GHI ĐÈ bằng bản trên Skill Hub:`);
779
+ for (const d of chiaDong(daCo))
780
+ console.log(`[vsaf] ${d}`);
781
+ console.log('[vsaf] Phần bạn tự sửa trong chúng sẽ mất.');
782
+ }
783
+ console.log('[vsaf] Workflow không bị đụng tới — bản đã sửa tay vẫn giữ nguyên.');
784
+ // Một đường đồng ý duy nhất. Từng có thêm `VSAF_FORCE_SKILLS` để diễn đạt "thay skill
785
+ // nhưng đừng đụng workflow", nhưng chính cơ chế hỏi đã làm đúng việc đó rồi: đồng ý là
786
+ // ghi đè skill, workflow nằm ngoài phạm vi câu hỏi. Hai biến cho cùng một kết quả chỉ
787
+ // làm người đọc phải đoán xem chúng khác nhau chỗ nào.
788
+ //
789
+ // Engine 1.4 cố ý không sở hữu cờ nào: file cài của bộ đọc cờ người dùng gõ rồi đặt
790
+ // biến môi trường. Đọc thẳng ở đây là đúng đường engine đã chọn.
791
+ if (options.force || (0, co_moi_truong_js_1.co)('VSAF_YES'))
792
+ return true;
793
+ if (!process.stdin.isTTY) {
794
+ console.log('[vsaf] Không có ai ở bàn phím để trả lời — KHÔNG cài skill lần này.');
795
+ console.log('[vsaf] Đặt VSAF_YES=1, hoặc gõ --yes, khi chạy tự động.');
796
+ return false;
797
+ }
798
+ return hoiCoKhong('[vsaf] Cài những skill trên? [y/N] ');
799
+ }
633
800
  function deploySkills(packDir, packName, skills, targetDir, options) {
634
801
  (0, fs_1.mkdirSync)(targetDir, { recursive: true });
635
802
  const result = { deployed: [], skipped: [] };
@@ -1065,14 +1232,6 @@ function runInstall(input, projectPath, options = {}) {
1065
1232
  packDir = flowSource.dir;
1066
1233
  }
1067
1234
  const packInfo = (0, skill_js_1.readPackInfoFrom)(packDir);
1068
- // Chỗ lấy THƯ MỤC SKILL. Mặc định là kho mã vừa tải, y như trước. Bộ nào khai
1069
- // `skillSource` thì kéo skill từ Skill Hub về một thư mục tạm rồi trỏ vào đó.
1070
- //
1071
- // Chỉ đổi mỗi biến này: `packDir` vẫn là kho mã và vẫn được dùng cho `_shared/`,
1072
- // workflow, hook, rule — Hub chỉ chứa được skill, mấy thứ kia không có ở đó. Bước
1073
- // chép (`deploySkills`) không biết gì về Hub, nên mọi luật phía sau — bỏ qua skill
1074
- // đã có, sao lưu bản sửa tay, ghim băm, nhân bản sang IDE — giữ nguyên.
1075
- const skillDir = resolveSkillDir(packDir, pack, packInfo);
1076
1235
  // Trước khi ghi bất cứ thứ gì: flow đòi engine mới hơn thì dừng tại đây, để project
1077
1236
  // không ở lại trạng thái cài dở mà không ai biết.
1078
1237
  (0, engine_range_js_1.assertEngineSatisfies)(pack, packInfo.requiresEngine, (0, engine_version_js_1.resolveEngineVersion)());
@@ -1170,6 +1329,17 @@ function runInstall(input, projectPath, options = {}) {
1170
1329
  // `sdlc` installs exactly as it did before the canonical/mirror split existed.
1171
1330
  const canonical = (0, ide_mirror_js_1.resolveSkillTarget)(projectPath, packInfo.canonicalSkillsDir);
1172
1331
  const skillsDir = options._skillsDir ?? canonical.target;
1332
+ // Xin phép TRƯỚC khi tải: nói rõ sắp đặt những skill nào và cái nào bị ghi đè. Hỏi
1333
+ // sau khi tải thì đã tốn mạng cho một câu trả lời có thể là "không".
1334
+ const dongYCaiSkill = packInfo.skillSource
1335
+ ? xinPhepCaiSkill(pack, packInfo, skillsDir, options)
1336
+ : true;
1337
+ // Chỗ lấy THƯ MỤC SKILL. Mặc định là repo vừa tải, y như trước. Bộ nào khai
1338
+ // `skillSource` thì kéo skill từ Skill Hub về một thư mục tạm rồi trỏ vào đó.
1339
+ //
1340
+ // Chỉ đổi mỗi biến này: `packDir` vẫn là repo và vẫn được dùng cho `_shared/`,
1341
+ // workflow, hook, rule — Hub chỉ chứa được skill, mấy thứ kia không có ở đó.
1342
+ const skillDir = dongYCaiSkill ? resolveSkillDir(packDir, pack, packInfo) : packDir;
1173
1343
  /**
1174
1344
  * What this run has written so far.
1175
1345
  *
@@ -1219,13 +1389,22 @@ function runInstall(input, projectPath, options = {}) {
1219
1389
  let sharedDeployed = null;
1220
1390
  let step = 0;
1221
1391
  try {
1222
- // Step 1: Deploy skills (prefixed with pack name)
1223
- deploy = deploySkills(skillDir, pack, packInfo.skillNames, skillsDir, { force: options.force });
1224
- // Step 1b: Deploy bundled skills (no prefix — external dependencies)
1225
- if (packInfo.bundledNames.length > 0) {
1226
- const bundled = deploySkills(skillDir, pack, packInfo.bundledNames, skillsDir, { force: options.force, noPrefix: true });
1227
- deploy.deployed.push(...bundled.deployed);
1228
- deploy.skipped.push(...bundled.skipped);
1392
+ // Đã xin phép ở trên. Đồng ý thì ghi đè đúng các skill của bộ — đó là điều vừa
1393
+ // nói ra; từ chối thì không chép cái nào, vì cài một phần là làm thứ người dùng
1394
+ // không đồng ý. Bộ chưa khai `skillSource` đi nguyên đường cũ.
1395
+ if (dongYCaiSkill) {
1396
+ const ghiDe = packInfo.skillSource ? true : Boolean(options.force);
1397
+ // Step 1: Deploy skills (prefixed with pack name)
1398
+ deploy = deploySkills(skillDir, pack, packInfo.skillNames, skillsDir, { force: ghiDe });
1399
+ // Step 1b: Deploy bundled skills (no prefix — external dependencies)
1400
+ if (packInfo.bundledNames.length > 0) {
1401
+ const bundled = deploySkills(skillDir, pack, packInfo.bundledNames, skillsDir, { force: ghiDe, noPrefix: true });
1402
+ deploy.deployed.push(...bundled.deployed);
1403
+ deploy.skipped.push(...bundled.skipped);
1404
+ }
1405
+ }
1406
+ else {
1407
+ console.log(`[vsaf] Bỏ qua bước cài skill — ${skillsDir} giữ nguyên.`);
1229
1408
  }
1230
1409
  // Step 1c: Deploy _shared/ helper assets the pack's skills read at runtime
1231
1410
  sharedDeployed = deploySharedAssets(packDir, pack, skillsDir);