dsh-archify-projects 0.0.0-stage → 0.1.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 (148) hide show
  1. package/README.md +204 -2
  2. package/cordis.patch.yml +99 -0
  3. package/dist/client.js +2261 -0
  4. package/dist/client.js.map +1 -0
  5. package/docs/CONTAINER.md +197 -0
  6. package/docs/DESIGN.md +905 -0
  7. package/docs/HANDOVER.md +391 -0
  8. package/docs/PUBLISH.md +107 -0
  9. package/icon.svg +12 -0
  10. package/lib/host/archify-skill.js +116 -0
  11. package/lib/host/archify-skill.js.map +1 -0
  12. package/lib/host/config.js +95 -0
  13. package/lib/host/config.js.map +1 -0
  14. package/lib/host/context.js +28 -0
  15. package/lib/host/context.js.map +1 -0
  16. package/lib/host/git.js +185 -0
  17. package/lib/host/git.js.map +1 -0
  18. package/lib/host/http.js +184 -0
  19. package/lib/host/http.js.map +1 -0
  20. package/lib/host/index.js +90 -0
  21. package/lib/host/index.js.map +1 -0
  22. package/lib/host/policy.js +124 -0
  23. package/lib/host/policy.js.map +1 -0
  24. package/lib/host/routes.js +667 -0
  25. package/lib/host/routes.js.map +1 -0
  26. package/lib/host/runner.js +913 -0
  27. package/lib/host/runner.js.map +1 -0
  28. package/lib/host/store.js +370 -0
  29. package/lib/host/store.js.map +1 -0
  30. package/lib/host/workspace.js +65 -0
  31. package/lib/host/workspace.js.map +1 -0
  32. package/lib/shared/format.js +138 -0
  33. package/lib/shared/format.js.map +1 -0
  34. package/lib/shared/prompt.js +257 -0
  35. package/lib/shared/prompt.js.map +1 -0
  36. package/lib/shared/protocol.js +31 -0
  37. package/lib/shared/protocol.js.map +1 -0
  38. package/lib/shared/types.js +173 -0
  39. package/lib/shared/types.js.map +1 -0
  40. package/locale/en.json +6 -0
  41. package/locale/zh.json +6 -0
  42. package/package.json +98 -4
  43. package/skills/archify/LICENSE +22 -0
  44. package/skills/archify/SKILL.md +109 -0
  45. package/skills/archify/THIRD_PARTY_NOTICES.md +69 -0
  46. package/skills/archify/assets/JetBrainsMono-OFL.txt +93 -0
  47. package/skills/archify/assets/template.html +13709 -0
  48. package/skills/archify/bin/archify.mjs +6936 -0
  49. package/skills/archify/bin/delivery-update.mjs +91 -0
  50. package/skills/archify/bin/finalize.mjs +895 -0
  51. package/skills/archify/bin/open-artifact.mjs +146 -0
  52. package/skills/archify/bin/preview.mjs +969 -0
  53. package/skills/archify/bin/recover-output.mjs +41 -0
  54. package/skills/archify/bin/visual-check.mjs +2667 -0
  55. package/skills/archify/brand-marks/README.md +31 -0
  56. package/skills/archify/brand-marks/catalog.json +131 -0
  57. package/skills/archify/delta/architecture-delta.mjs +1313 -0
  58. package/skills/archify/examples/agent-run.lifecycle.json +55 -0
  59. package/skills/archify/examples/agent-tool-call.workflow.json +74 -0
  60. package/skills/archify/examples/async-job-roundtrip.sequence.json +56 -0
  61. package/skills/archify/examples/brand-aware-delivery.architecture.json +34 -0
  62. package/skills/archify/examples/cache-miss-request.sequence.json +77 -0
  63. package/skills/archify/examples/checkout-platform.base.architecture.json +32 -0
  64. package/skills/archify/examples/checkout-platform.head.architecture.json +32 -0
  65. package/skills/archify/examples/dataflow-product-analytics.html +13820 -0
  66. package/skills/archify/examples/deployment-release.lifecycle.json +48 -0
  67. package/skills/archify/examples/event-stream.dataflow.json +52 -0
  68. package/skills/archify/examples/holiday-planning.workflow.json +143 -0
  69. package/skills/archify/examples/incident-response.workflow.json +59 -0
  70. package/skills/archify/examples/lifecycle-agent-run.html +13765 -0
  71. package/skills/archify/examples/locales/de.json +425 -0
  72. package/skills/archify/examples/locales/es.json +440 -0
  73. package/skills/archify/examples/locales/fr.json +425 -0
  74. package/skills/archify/examples/locales/fr.partial.json +22 -0
  75. package/skills/archify/examples/locales/it.json +425 -0
  76. package/skills/archify/examples/locales/ja.json +425 -0
  77. package/skills/archify/examples/locales/ko.json +440 -0
  78. package/skills/archify/examples/locales/pt.json +425 -0
  79. package/skills/archify/examples/locales/ru.json +425 -0
  80. package/skills/archify/examples/product-analytics.dataflow.json +71 -0
  81. package/skills/archify/examples/production-deployment.architecture.json +51 -0
  82. package/skills/archify/examples/release-delivery.workflow.json +57 -0
  83. package/skills/archify/examples/sequence-cache-miss-request.html +13835 -0
  84. package/skills/archify/examples/web-app-rendered.html +13808 -0
  85. package/skills/archify/examples/web-app.architecture.json +41 -0
  86. package/skills/archify/examples/workflow-agent-tool-call-rendered.html +13826 -0
  87. package/skills/archify/migrations/workflow-v2.mjs +280 -0
  88. package/skills/archify/package.json +17 -0
  89. package/skills/archify/recipes/scenarios.mjs +430 -0
  90. package/skills/archify/references/architecture-layout-repair.md +18 -0
  91. package/skills/archify/references/authoring-contract.md +419 -0
  92. package/skills/archify/references/authoring-defaults.md +41 -0
  93. package/skills/archify/references/brand-marks.md +82 -0
  94. package/skills/archify/references/delivery-contract.md +588 -0
  95. package/skills/archify/references/repository-authoring.md +105 -0
  96. package/skills/archify/references/update-awareness.md +12 -0
  97. package/skills/archify/references/viewer-runtime.md +35 -0
  98. package/skills/archify/renderers/architecture/grid.mjs +62 -0
  99. package/skills/archify/renderers/architecture/labels.mjs +215 -0
  100. package/skills/archify/renderers/architecture/render-architecture.mjs +1001 -0
  101. package/skills/archify/renderers/architecture/routing.mjs +1157 -0
  102. package/skills/archify/renderers/dataflow/README.md +105 -0
  103. package/skills/archify/renderers/dataflow/render-dataflow.mjs +544 -0
  104. package/skills/archify/renderers/lifecycle/README.md +171 -0
  105. package/skills/archify/renderers/lifecycle/grid-routing.mjs +429 -0
  106. package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +938 -0
  107. package/skills/archify/renderers/sequence/README.md +129 -0
  108. package/skills/archify/renderers/sequence/render-sequence.mjs +526 -0
  109. package/skills/archify/renderers/shared/atomic-output.mjs +1982 -0
  110. package/skills/archify/renderers/shared/brand-marks.mjs +670 -0
  111. package/skills/archify/renderers/shared/cli.mjs +451 -0
  112. package/skills/archify/renderers/shared/desktop-readability.mjs +132 -0
  113. package/skills/archify/renderers/shared/diagnostics.mjs +173 -0
  114. package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
  115. package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
  116. package/skills/archify/renderers/shared/generated-validators.mjs +134 -0
  117. package/skills/archify/renderers/shared/geometry.mjs +1941 -0
  118. package/skills/archify/renderers/shared/i18n.mjs +603 -0
  119. package/skills/archify/renderers/shared/layout-report.mjs +42 -0
  120. package/skills/archify/renderers/shared/legend.mjs +217 -0
  121. package/skills/archify/renderers/shared/output-path.mjs +440 -0
  122. package/skills/archify/renderers/shared/path-semantics.mjs +1017 -0
  123. package/skills/archify/renderers/shared/portable-path.mjs +408 -0
  124. package/skills/archify/renderers/shared/repository-evidence.mjs +352 -0
  125. package/skills/archify/renderers/shared/repository-location.mjs +59 -0
  126. package/skills/archify/renderers/shared/route-quality.mjs +614 -0
  127. package/skills/archify/renderers/shared/sidecar-path.mjs +38 -0
  128. package/skills/archify/renderers/shared/spatial-grid.mjs +66 -0
  129. package/skills/archify/renderers/shared/text-fit.mjs +105 -0
  130. package/skills/archify/renderers/shared/utils.mjs +254 -0
  131. package/skills/archify/renderers/shared/validator.mjs +86 -0
  132. package/skills/archify/renderers/workflow/README.md +301 -0
  133. package/skills/archify/renderers/workflow/render-workflow.mjs +37 -0
  134. package/skills/archify/renderers/workflow/workflow-compiler.mjs +4913 -0
  135. package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
  136. package/skills/archify/schemas/README.md +256 -0
  137. package/skills/archify/schemas/architecture.schema.json +152 -0
  138. package/skills/archify/schemas/common.schema.json +181 -0
  139. package/skills/archify/schemas/dataflow.schema.json +254 -0
  140. package/skills/archify/schemas/lifecycle.schema.json +280 -0
  141. package/skills/archify/schemas/sequence.schema.json +234 -0
  142. package/skills/archify/schemas/workflow.schema.json +439 -0
  143. package/skills/archify/scripts/check-render-output.mjs +1388 -0
  144. package/skills/archify/scripts/check-update.mjs +1710 -0
  145. package/skills/archify/scripts/delivery-update-child.mjs +23 -0
  146. package/skills/archify/scripts/render-examples.mjs +26 -0
  147. package/skills/archify/scripts/update-contract.mjs +182 -0
  148. package/skills/archify/skill-release.json +10 -0
@@ -0,0 +1,124 @@
1
+ /**
2
+ * 会话策略:这个 agent 能碰什么。
3
+ *
4
+ * 三件事集中在这里,因为它们必须一致:
5
+ * 1. **工具白名单**(`tools.restrict` 的 allow,模型看得见什么);
6
+ * 2. **执行层守卫**(`tools.guard`,拦不在名单里的工具、拦非 archify 的 skill);
7
+ * 3. **skill 收口口径**(唯一允许的名字)。
8
+ *
9
+ * 为什么必须在 `agent.ctx` 上装:`tools.restrict` 的实现第一行是
10
+ * `scopeOf(this.ctx)` —— 根 ctx 直接抛「requires a scoped context (agent.ctx)」。
11
+ * 在 runner 里、会话刚建好、第一条 prompt 之前装,顺带拿到「只影响本插件起的会话」
12
+ * 这个性质:别的 preset 起的 agent 一个都不动。
13
+ */
14
+ /** 唯一的 skill 名。 */
15
+ export const ARCHIFY_SKILL_NAME = 'archify';
16
+ /**
17
+ * 基础工具白名单(不含 shell,shell 按平台补)。
18
+ *
19
+ * `todo_write` 必须在内:restrict 是按名字收口的,漏掉它模型就「看不到」这个工具
20
+ * (实测 agent 会在回复里写「I don't have a todo_write tool」),页面也就没有进度。
21
+ * 它只写自己的计划,不扩大任何能力面。
22
+ */
23
+ const BASE_ALLOW = ['read', 'write', 'edit', 'glob', 'grep', 'skill', 'todo_write'];
24
+ /**
25
+ * 问答会话的白名单:只读代码 + 加载 archify(不需要出图,但保留 skill 方便看口径)。
26
+ * 没有 shell、没有写工具 —— 用户要求「会话只剩 archify 和读代码的能力」。
27
+ */
28
+ const READONLY_ALLOW = ['read', 'glob', 'grep', 'skill', 'todo_write'];
29
+ /**
30
+ * 这个受限 agent 允许使用的工具全集。
31
+ *
32
+ * shell 按平台二选一:宿主在 Windows 上只注册 `pwsh`,写 `bash` 会让
33
+ * `restrict` 因为「未知工具名」直接抛。
34
+ */
35
+ export function allowedToolNames(platform = process.platform) {
36
+ return [...BASE_ALLOW, platform === 'win32' ? 'pwsh' : 'bash'];
37
+ }
38
+ /** 只读会话(提问)允许的工具:读文件、找文件、加载 archify,别的都没有。 */
39
+ export function readonlyToolNames() {
40
+ return [...READONLY_ALLOW];
41
+ }
42
+ /**
43
+ * 执行层守卫:单调、同步、返回字符串即拒绝。
44
+ *
45
+ * 两道检查合在一个函数里,因为 guard 只能注册一次,且必须同步给结论:
46
+ * - `skill` 只认 archify;
47
+ * - 其余工具必须在白名单里。
48
+ *
49
+ * 白名单已经收过一遍了,这里仍再查一次 —— restrict 可能因为「未知工具名」降级,
50
+ * 而 guard 不看注册表,是最后一道能真正拦住执行的闸。
51
+ */
52
+ export function makeGuard(allow) {
53
+ const allowed = new Set(allow);
54
+ return (exec) => {
55
+ if (exec.name === 'skill') {
56
+ const requested = readSkillName(exec.arguments);
57
+ if (requested !== ARCHIFY_SKILL_NAME) {
58
+ return `这个会话只允许加载 archify skill(请求的是 ${requested ?? '(未指定)'})`;
59
+ }
60
+ return undefined;
61
+ }
62
+ if (!allowed.has(exec.name)) {
63
+ return `工具 "${exec.name}" 在这个会话里被禁用:本会话只允许 ${allow.join(' / ')}`;
64
+ }
65
+ return undefined;
66
+ };
67
+ }
68
+ function readSkillName(args) {
69
+ if (typeof args !== 'object' || args === null)
70
+ return null;
71
+ const name = args.name;
72
+ return typeof name === 'string' ? name : null;
73
+ }
74
+ /**
75
+ * 装白名单 + 守卫。
76
+ *
77
+ * 两步各自容错:`restrict` 对未注册的名字会抛,抛了也继续装 guard ——
78
+ * 少了哪一层都要在日志里说清楚,不静默降级。
79
+ */
80
+ export function tightenAgent(scope, allow, warn) {
81
+ if (scope === undefined || scope.tools === undefined) {
82
+ const message = 'agent 作用域没有 tools 服务:白名单未生效';
83
+ warn(message);
84
+ return { restricted: false, guarded: false, message };
85
+ }
86
+ const tools = scope.tools;
87
+ let restricted = false;
88
+ let guarded = false;
89
+ let message = null;
90
+ try {
91
+ run(scope, () => tools.restrict?.({ allow }) ?? undefined, 'dsh-archify-projects: tool allowlist');
92
+ restricted = true;
93
+ }
94
+ catch (err) {
95
+ message = `工具白名单未生效:${describe(err)}`;
96
+ warn(message);
97
+ }
98
+ try {
99
+ run(scope, () => tools.guard?.(makeGuard(allow)) ?? undefined, 'dsh-archify-projects: tool guard');
100
+ guarded = true;
101
+ }
102
+ catch (err) {
103
+ const text = `工具守卫未生效:${describe(err)}`;
104
+ warn(text);
105
+ message = message === null ? text : `${message};${text}`;
106
+ }
107
+ return { restricted, guarded, message };
108
+ }
109
+ /** 装只读白名单 + 守卫(问答会话用)。 */
110
+ export function tightenReadOnlyAgent(scope, warn) {
111
+ return tightenAgent(scope, READONLY_ALLOW, warn);
112
+ }
113
+ /** 有 `effect` 就交给它管生命周期,没有就直接装。 */
114
+ function run(scope, install, label) {
115
+ if (typeof scope.effect === 'function') {
116
+ scope.effect(() => install() ?? undefined, label);
117
+ return;
118
+ }
119
+ install();
120
+ }
121
+ function describe(err) {
122
+ return err instanceof Error ? err.message : String(err);
123
+ }
124
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/host/policy.ts"],"names":[],"mappings":"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"}