work-ally 0.2.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 (172) hide show
  1. package/AGENTS.md +110 -0
  2. package/DASHBOARD.md +160 -0
  3. package/PRODUCT.md +113 -0
  4. package/README.md +403 -0
  5. package/ally.sh +171 -0
  6. package/bridge/src/approval-rules.ts +360 -0
  7. package/bridge/src/channel-delivery.ts +207 -0
  8. package/bridge/src/channel-types.ts +22 -0
  9. package/bridge/src/channels/fake/adapter.ts +31 -0
  10. package/bridge/src/channels/feishu/adapter.ts +411 -0
  11. package/bridge/src/channels/feishu/approvals.ts +6 -0
  12. package/bridge/src/channels/feishu/formatter.ts +276 -0
  13. package/bridge/src/channels/feishu/normalize.ts +368 -0
  14. package/bridge/src/codex-config.ts +52 -0
  15. package/bridge/src/config.ts +240 -0
  16. package/bridge/src/fake-runtime-client.ts +505 -0
  17. package/bridge/src/handoff-service.ts +494 -0
  18. package/bridge/src/logger.ts +194 -0
  19. package/bridge/src/memory-digest.ts +186 -0
  20. package/bridge/src/receiver-approval-autonomy.ts +158 -0
  21. package/bridge/src/receiver-control-core.ts +140 -0
  22. package/bridge/src/receiver-control-work-session.ts +218 -0
  23. package/bridge/src/receiver-control.ts +83 -0
  24. package/bridge/src/receiver-delivery.ts +136 -0
  25. package/bridge/src/receiver-helpers.ts +96 -0
  26. package/bridge/src/receiver-human-gate.ts +333 -0
  27. package/bridge/src/receiver-inbound-preflight.ts +162 -0
  28. package/bridge/src/receiver-recovery.ts +236 -0
  29. package/bridge/src/receiver-runtime-callbacks.ts +367 -0
  30. package/bridge/src/receiver-runtime-policy.ts +132 -0
  31. package/bridge/src/receiver-runtime-state.ts +124 -0
  32. package/bridge/src/receiver-support-actions.ts +189 -0
  33. package/bridge/src/receiver-thread-start.ts +57 -0
  34. package/bridge/src/receiver-turn-coordination.ts +94 -0
  35. package/bridge/src/receiver-turn-execution.ts +257 -0
  36. package/bridge/src/receiver-turn-failure.ts +143 -0
  37. package/bridge/src/receiver-turn-result.ts +185 -0
  38. package/bridge/src/receiver-turn-steer.ts +70 -0
  39. package/bridge/src/receiver-work-session.ts +76 -0
  40. package/bridge/src/receiver.ts +329 -0
  41. package/bridge/src/router.ts +62 -0
  42. package/bridge/src/runtime-client-agent-messages.ts +150 -0
  43. package/bridge/src/runtime-client-message-dispatch.ts +176 -0
  44. package/bridge/src/runtime-client-protocol.ts +411 -0
  45. package/bridge/src/runtime-client-request-ops.ts +56 -0
  46. package/bridge/src/runtime-client-run-turn.ts +158 -0
  47. package/bridge/src/runtime-client-thread-ops.ts +270 -0
  48. package/bridge/src/runtime-client-transport.ts +309 -0
  49. package/bridge/src/runtime-client-turn-poll.ts +224 -0
  50. package/bridge/src/runtime-client-turn-read.ts +185 -0
  51. package/bridge/src/runtime-client-turn-state.ts +105 -0
  52. package/bridge/src/runtime-client.ts +344 -0
  53. package/bridge/src/runtime-user-input.ts +403 -0
  54. package/bridge/src/scheduler.ts +239 -0
  55. package/bridge/src/server-handoff-command.ts +364 -0
  56. package/bridge/src/server-main.ts +80 -0
  57. package/bridge/src/server-routine-command.ts +60 -0
  58. package/bridge/src/server-routine-execution.ts +222 -0
  59. package/bridge/src/server-runtime-app-support.ts +107 -0
  60. package/bridge/src/server-runtime-app.ts +238 -0
  61. package/bridge/src/server-thread-sync-command.ts +63 -0
  62. package/bridge/src/server.ts +17 -0
  63. package/bridge/src/session-store-delivery.ts +220 -0
  64. package/bridge/src/session-store-human-gate.ts +380 -0
  65. package/bridge/src/session-store-inbound-acceptance.ts +66 -0
  66. package/bridge/src/session-store-meta.ts +134 -0
  67. package/bridge/src/session-store-turn-ledger.ts +272 -0
  68. package/bridge/src/session-store.ts +380 -0
  69. package/bridge/src/system-notify.ts +220 -0
  70. package/bridge/src/thread-sync.ts +200 -0
  71. package/bridge/src/translator.ts +494 -0
  72. package/bridge/src/types.ts +289 -0
  73. package/bridge/src/utils.ts +104 -0
  74. package/bridge/src/work-session-store.ts +471 -0
  75. package/docs/.gitkeep +0 -0
  76. package/docs/architecture/codex-feishu-bridge-proposal.md +2742 -0
  77. package/docs/completed/FEATURE-feishu-markdown-and-reply-support.md +327 -0
  78. package/docs/completed/README.md +21 -0
  79. package/docs/completed/SPEC-approval-autonomy-and-safe-defaults.md +205 -0
  80. package/docs/completed/SPEC-approval-batch-and-strict-reply-shortcuts.md +153 -0
  81. package/docs/completed/SPEC-conversation-noise-reduction-and-busy-input-gate.md +538 -0
  82. package/docs/completed/SPEC-engineering-sop-skillization.md +190 -0
  83. package/docs/completed/SPEC-faithful-bridge-core-thinning-v2.md +376 -0
  84. package/docs/completed/SPEC-faithful-bridge-core-thinning.md +1071 -0
  85. package/docs/completed/SPEC-group-chat-sender-identity.md +301 -0
  86. package/docs/completed/SPEC-middleware-exception-visibility.md +227 -0
  87. package/docs/completed/SPEC-nightly-memory-digest-visibility.md +121 -0
  88. package/docs/completed/SPEC-project-group-chat-human-centered-conversation-mapping.md +326 -0
  89. package/docs/completed/SPEC-remove-cli-persona-bootstrap.md +201 -0
  90. package/docs/developer-workflow.md +49 -0
  91. package/docs/implementation/SPEC-codex-same-machine-session-handoff-implementation.md +239 -0
  92. package/docs/implementation/test-coverage-map.md +363 -0
  93. package/docs/implementation/work-ally-implementation-guide.md +790 -0
  94. package/docs/issues/README.md +10 -0
  95. package/docs/issues/pending/ANALYSIS-ally-premature-recovery-notice-and-task-state-semantics-2026-03-18.md +295 -0
  96. package/docs/issues/resolved/ANALYSIS-approval-waiting-visible-but-approval-artifact-missing-2026-03-16.md +466 -0
  97. package/docs/issues/resolved/ANALYSIS-blocking-state-visible-without-user-actionable-artifact-2026-03-16.md +261 -0
  98. package/docs/issues/resolved/ANALYSIS-codex-app-server-transport-disconnect-semantics-2026-03-14.md +606 -0
  99. package/docs/issues/resolved/ANALYSIS-premature-terminalization-on-fresh-thread-poll-and-object-error-leak-2026-03-16.md +348 -0
  100. package/docs/issues/resolved/ANALYSIS-runtime-turn-delivery-and-recovery-2026-03-14.md +603 -0
  101. package/docs/issues/resolved/ANALYSIS-self-test-gap-approval-waiting-visible-but-approval-artifact-missing-2026-03-16.md +166 -0
  102. package/docs/issues/resolved/ANALYSIS-self-test-gap-blocking-state-visible-without-user-actionable-artifact-2026-03-16.md +186 -0
  103. package/docs/issues/resolved/ANALYSIS-self-test-gap-premature-terminalization-on-fresh-thread-poll-and-object-error-leak-2026-03-16.md +166 -0
  104. package/docs/issues/resolved/REPORT-ally-runtime-turn-delivery-3b42fb8-2026-03-15.md +373 -0
  105. package/docs/manual-acceptance.md +127 -0
  106. package/docs/ops-runbook.md +44 -0
  107. package/docs/planning/FEATURE-memory-system.md +748 -0
  108. package/docs/planning/SPEC-active-turn-steer-and-context-compaction-visibility.md +269 -0
  109. package/docs/planning/SPEC-approval-rules-inheritance-and-local-validation-lane.md +450 -0
  110. package/docs/planning/SPEC-assistant-persona-bootstrap.md +199 -0
  111. package/docs/planning/SPEC-assistant-rename.md +610 -0
  112. package/docs/planning/SPEC-bridge-app-server-protocol-alignment.md +667 -0
  113. package/docs/planning/SPEC-claude-runtime-host-for-work-ally.md +434 -0
  114. package/docs/planning/SPEC-cli-feishu-codex-session-unification.md +236 -0
  115. package/docs/planning/SPEC-codex-same-machine-session-handoff.md +873 -0
  116. package/docs/planning/SPEC-feishu-reaction-shortcuts.md +282 -0
  117. package/docs/planning/SPEC-local-stable-release-boundary.md +166 -0
  118. package/docs/planning/SPEC-managed-thread-entry-and-surface-mobility.md +862 -0
  119. package/docs/planning/SPEC-minimal-bridge-semantics-and-user-visible-surface.md +362 -0
  120. package/docs/planning/SPEC-npm-alpha-distribution-and-install-first-release.md +222 -0
  121. package/docs/planning/SPEC-remove-websocket-runtime-transport.md +364 -0
  122. package/docs/planning/SPEC-runtime-abstraction-phase-1.md +424 -0
  123. package/docs/planning/SPEC-runtime-connection-and-turn-recovery-semantics.md +274 -0
  124. package/docs/planning/SPEC-session-presence-and-state-visibility.md +397 -0
  125. package/docs/planning/SPEC-skill-first-capability-packaging.md +338 -0
  126. package/docs/planning/SPEC-stable-archive-contract.md +456 -0
  127. package/docs/planning/SPEC-supervised-start-boundary.md +127 -0
  128. package/docs/planning/SPEC-user-barrier-reduction-and-activation.md +832 -0
  129. package/docs/planning/ally-next.md +1278 -0
  130. package/docs/planning/assistant-workbench-spec.md +725 -0
  131. package/docs/planning/product-workbench.md +283 -0
  132. package/docs/product-onboarding.md +227 -0
  133. package/docs/product-spec-standard.md +528 -0
  134. package/docs/troubleshooting.md +45 -0
  135. package/docs/user-quickstart.md +46 -0
  136. package/internal/dispatch.sh +95 -0
  137. package/internal/lib/common.sh +1450 -0
  138. package/internal/modules/assistant/manage.sh +1312 -0
  139. package/internal/modules/bootstrap/setup.sh +144 -0
  140. package/internal/modules/config/init-env.sh +10 -0
  141. package/internal/modules/global/manage.sh +154 -0
  142. package/internal/modules/handoff/manage.sh +54 -0
  143. package/internal/modules/mcp/manage.sh +83 -0
  144. package/internal/modules/ops/logs.sh +76 -0
  145. package/internal/modules/routines/manage.sh +55 -0
  146. package/internal/modules/runtime/assistant-autosave.sh +26 -0
  147. package/internal/modules/runtime/restart.sh +6 -0
  148. package/internal/modules/runtime/start.sh +283 -0
  149. package/internal/modules/runtime/status.sh +194 -0
  150. package/internal/modules/runtime/stop.sh +55 -0
  151. package/internal/modules/runtime/supervisor.sh +216 -0
  152. package/internal/modules/runtime/update.sh +26 -0
  153. package/package.json +41 -0
  154. package/runtime/config/.gitkeep +0 -0
  155. package/runtime/host/.gitkeep +0 -0
  156. package/runtime/host/healthcheck-codex-app-server.ts +22 -0
  157. package/runtime/host/ping-pong-codex-app-server.ts +66 -0
  158. package/runtime/host/probe-codex-app-server.ts +115 -0
  159. package/skills/archive-reader/SKILL.md +9 -0
  160. package/skills/feishu-production-debug/SKILL.md +37 -0
  161. package/skills/feishu-production-debug/references/feishu-debug-order.md +49 -0
  162. package/skills/feishu-production-debug/references/platform-permission-baseline.md +23 -0
  163. package/skills/issue-to-spec-triage/SKILL.md +44 -0
  164. package/skills/issue-to-spec-triage/references/triage-rules.md +66 -0
  165. package/skills/memory-digest/SKILL.md +9 -0
  166. package/skills/post-implementation-closure/SKILL.md +39 -0
  167. package/skills/post-implementation-closure/references/closure-checklist.md +45 -0
  168. package/skills/post-implementation-closure/references/doc-drift-map.md +49 -0
  169. package/skills/product-spec/SKILL.md +244 -0
  170. package/templates/env.example +5 -0
  171. package/templates/routines/nightly-memory-digest.yaml +10 -0
  172. package/templates/workspace/AGENTS.md +26 -0
@@ -0,0 +1,832 @@
1
+ # User Barrier Reduction And Activation
2
+
3
+ 更新时间:2026-03-14
4
+ 状态:Draft / Ready for discussion
5
+
6
+ ## 1. 这份 spec 在解决什么
7
+
8
+ 这份 spec 解决的不是某一个按钮、某一份文档、某一个接入点。
9
+
10
+ 它要解决的是一个更上位的问题:
11
+
12
+ > `work-ally` 如何从“工程上已经能用”进化到“普通内部同事也能低成本理解、低成本启动、低成本获得第一次真实价值”的产品。
13
+
14
+ 换句话说,这份 spec 要把三件事一次性捋清楚:
15
+
16
+ 1. **是什么**:我们要优化的不是单点功能,而是整条用户体验链路
17
+ 2. **为什么**:当前真正阻塞内部推广的,不是能力不足,而是门槛过高
18
+ 3. **如何做**:围绕主路径,把入口承接、首次激活、状态理解、失败恢复收成一个统一方案
19
+
20
+ 这份文档是这条专项的**唯一主 spec**。
21
+
22
+ 桌面控制、飞书接入闭环、配套文档合同,都应被视为这份主 spec 的章节,不再拆成平级主线文档。
23
+
24
+ ## 2. 金字塔式结论
25
+
26
+ 先给结论。
27
+
28
+ ### 2.1 总判断
29
+
30
+ `work-ally` 当前已经完成了大部分**能力层**,但还没有完成足够强的**激活层**、**理解层**与**信任层**。
31
+
32
+ 因此,当前降低使用门槛的真正重点不是继续堆新能力,而是:
33
+
34
+ 1. 让用户更快进入正确上下文
35
+ 2. 让用户更快走到第一次真实价值
36
+ 3. 让用户在失败时知道卡在哪里、下一步做什么
37
+ 4. 让日常使用不再要求用户记住内部概念和命令语义
38
+
39
+ ### 2.2 对优先级的影响
40
+
41
+ 如果站在“降低用户使用门槛”的目标上看,当前最重要的不是功能面再扩,而是三条主线:
42
+
43
+ 1. **桌面控制壳**:吃掉命令行、cwd、项目作用域这些理解成本
44
+ 2. **用户准入闭环**:吃掉从零到首次可用之间的外部准备与回填成本
45
+ 3. **状态与异常透明化**:吃掉“我不知道现在发生了什么”的不确定成本
46
+
47
+ ### 2.3 Feishu 只是其中一个重要子问题
48
+
49
+ 飞书应用申请、机器人开通、权限配置、发布与凭据回填,确实是一个重要门槛。
50
+
51
+ 但它只是“用户准入闭环”里的一个子问题,不等于整个专项。
52
+
53
+ 更准确的定义是:
54
+
55
+ > 我们要系统性降低用户从“知道这个产品”到“稳定用起来”之间的学习成本、切换成本和诊断成本。
56
+
57
+ ## 3. 第一性原理
58
+
59
+ ### 3.1 用户真正想买的不是命令,也不是架构
60
+
61
+ 用户并不是为了学习这些东西而来:
62
+
63
+ - `ally setup`
64
+ - `ally start`
65
+ - current working directory
66
+ - assistant desk
67
+ - runtime host
68
+ - 飞书开放平台
69
+ - allowlist
70
+ - supervisor
71
+
72
+ 用户真正想完成的任务只有一句话:
73
+
74
+ > 让一个可信的 assistant 在我的项目语境里稳定开始干活,并且我能随时看懂它的当前状态。
75
+
76
+ ### 3.2 所有不直接服务这句话的理解成本,默认都应由产品吸收
77
+
78
+ 如果用户为了达成上面那句话,不得不先学习一堆中间概念,那说明产品还没有把复杂性吃干净。
79
+
80
+ 这并不意味着内部不允许复杂。
81
+
82
+ 它意味着:
83
+
84
+ - 内部可以有 desk、registry、runtime、bridge、channel lock
85
+ - 但外部默认不应要求用户先理解这些概念,才能开始获得价值
86
+
87
+ ### 3.3 低门槛产品的本质不是“功能少”,而是“价值近”
88
+
89
+ 一个产品是否低门槛,不取决于它有多少功能,而取决于:
90
+
91
+ - 用户离第一次价值有多远
92
+ - 每一步是否都可理解
93
+ - 用户是否知道下一步
94
+ - 出错时是否知道回哪一层修
95
+
96
+ ## 4. 我们用什么方法看这个问题
97
+
98
+ 这条 spec 默认结合四套方法一起判断。
99
+
100
+ ### 4.1 第一性原理
101
+
102
+ 先问:
103
+
104
+ - 用户真正想完成什么任务
105
+ - 哪些步骤只是系统偶然性,而不是用户目标的一部分
106
+ - 哪些复杂性必须存在,哪些复杂性只是没有被产品吸收
107
+
108
+ ### 4.2 系统思维
109
+
110
+ 把用户使用门槛拆成一个完整系统,而不是只看某个表层抱怨。
111
+
112
+ 门槛往往来自四类环节叠加:
113
+
114
+ 1. 准入
115
+ 2. 激活
116
+ 3. 日常使用
117
+ 4. 失败恢复
118
+
119
+ 只优化其中一层,不足以真正降低门槛。
120
+
121
+ ### 4.3 JTBD
122
+
123
+ 我们不按功能看,而按任务看。
124
+
125
+ 用户不是“想配置一个 assistant”;用户是:
126
+
127
+ - 想把项目接上一个可工作的助手
128
+ - 想让这个助手在飞书里能被自己随时叫到
129
+ - 想在状态不正常时知道问题出在哪里
130
+ - 想在日常使用时不要被内部概念打断
131
+
132
+ ### 4.4 金字塔原理
133
+
134
+ 先收最高层结论,再回到支撑结构。
135
+
136
+ 所以这份 spec 先回答三件事:
137
+
138
+ 1. **我们已经做了什么**
139
+ 2. **还需要做什么**
140
+ 3. **我们应当做什么**
141
+
142
+ 然后再把每个结论展开成:
143
+
144
+ - 用户问题
145
+ - 产品动作
146
+ - 结果判断
147
+ - 验收口径
148
+
149
+ ## 5. 业界方法给我们的启发
150
+
151
+ ### 5.1 onboarding 不应优化为“完成教程”,而应优化为“到达价值”
152
+
153
+ 如果 onboarding 完成了,但用户还没获得真实价值,那只是流程做完了,不代表产品真的被激活。
154
+
155
+ 套到 `work-ally` 上,意味着:
156
+
157
+ - “用户填完配置”不等于成功
158
+ - “桌面端向导走完”不等于成功
159
+ - 真正成功是:用户已经在自己的项目语境里,和 assistant 完成第一轮真实可用对话
160
+
161
+ ### 5.2 time-to-value 要尽可能短
162
+
163
+ 对 `work-ally` 来说,应该追求的不是“教程讲得很全”,而是:
164
+
165
+ - 用户最快多久能发出第一条有效消息
166
+ - 用户最快多久能拿到第一条真正有帮助的回复
167
+
168
+ ### 5.3 checklist 必须围绕结果,而不是围绕功能罗列
169
+
170
+ 一个好的 checklist 应该帮助用户回答:
171
+
172
+ - 我现在做到哪一步了
173
+ - 下一步最重要的是什么
174
+ - 完成后我会得到什么结果
175
+
176
+ ### 5.4 progressive disclosure 是必要原则
177
+
178
+ 用户第一屏只应该看到完成当前任务所必需的信息。
179
+
180
+ 更深的解释、日志、内部状态、可选配置应在需要时再展开。
181
+
182
+ ## 6. 用户与使用场景
183
+
184
+ ### 6.1 第一优先级用户
185
+
186
+ - 内部同事
187
+ - 不熟命令行
188
+ - 不理解 `work-ally` 内部架构
189
+ - 希望快速体验一个“可工作的项目助手”
190
+
191
+ ### 6.2 第二优先级用户
192
+
193
+ - 产品同事 / 管理者
194
+ - 需要演示、验收、判断当前项目能否正常使用
195
+ - 希望快速看懂“现在是什么状态,下一步是什么”
196
+
197
+ ### 6.3 第三优先级用户
198
+
199
+ - 工程同事
200
+ - 需要联调、排障、理解更深一层状态
201
+ - 仍会保留 CLI 与日志等能力
202
+
203
+ ### 6.4 关键使用场景
204
+
205
+ 1. **首次体验**
206
+ - 用户第一次把某个项目接入 `work-ally`
207
+ 2. **日常进入**
208
+ - 用户再次打开某个项目,想快速知道是否可用
209
+ 3. **基础管理**
210
+ - 用户想换 assistant、改 persona、看绑定关系
211
+ 4. **异常恢复**
212
+ - 用户发现“它没反应”或“启动失败”,需要知道回哪一层修
213
+
214
+ ## 7. 当前用户门槛到底高在哪
215
+
216
+ 从用户视角看,今天的主要门槛不是单一问题,而是五类成本叠加。
217
+
218
+ ### 7.1 理解成本
219
+
220
+ 用户要先理解:
221
+
222
+ - 为什么要先选项目
223
+ - 为什么项目和 assistant 是绑定关系
224
+ - 为什么必须在某个目录里执行命令
225
+ - 为什么需要飞书应用与机器人
226
+ - 为什么 `ally start` 失败不一定是本地代码问题
227
+
228
+ ### 7.2 操作成本
229
+
230
+ 用户当前仍要承担一些偏工程化动作:
231
+
232
+ - 进入正确目录
233
+ - 记住 setup/start/status/logs 的语义
234
+ - 手工打开配置文件回填凭据
235
+ - 自己判断某一步是不是已经完成
236
+
237
+ ### 7.3 上下文切换成本
238
+
239
+ 用户会在多个系统之间来回切换:
240
+
241
+ - 项目目录
242
+ - 命令行
243
+ - 飞书开放平台
244
+ - 飞书聊天窗口
245
+ - 文档/排障说明
246
+
247
+ 产品还没有把这些切换收成一条顺滑路径。
248
+
249
+ ### 7.4 诊断成本
250
+
251
+ 失败时用户仍然容易问:
252
+
253
+ - 是我没配对吗
254
+ - 是飞书没准备好吗
255
+ - 是权限不够吗
256
+ - 是应用没发布吗
257
+ - 是 runtime 没起来吗
258
+ - 是群聊本来就没开通吗
259
+
260
+ ### 7.5 信任成本
261
+
262
+ 如果用户不知道当前到底:
263
+
264
+ - 正在运行
265
+ - 正在等待他
266
+ - 已经失败
267
+ - 已经恢复
268
+ - 其实已经结束
269
+
270
+ 那他就很难真正信任这个产品。
271
+
272
+ ## 8. 我们已经做了什么
273
+
274
+ ### 8.1 能力层已经很强
275
+
276
+ 我们已经有:
277
+
278
+ - assistant desk 模型
279
+ - 项目绑定 assistant
280
+ - `ally setup / start / stop / status / logs`
281
+ - Feishu 私聊主闭环
282
+ - 最小群聊显式触发
283
+ - runtime 托管与恢复
284
+ - nightly memory digest
285
+ - 基础排障、状态、日志能力
286
+
287
+ 这意味着问题已经不是“产品还不能用”。
288
+
289
+ ### 8.2 一部分信任层已经开始建立
290
+
291
+ 我们已经做了几件很关键的事:
292
+
293
+ - `ally start` 会对飞书发消息能力做探测
294
+ - 当入口不可用时,不再假装启动成功
295
+ - 处理中、等待审批、等待补充、任务结束等语义开始可见
296
+ - 排障文档已经能区分部分失败类型
297
+
298
+ ### 8.3 一部分复杂性已经被中间层吃掉
299
+
300
+ 例如:
301
+
302
+ - runtime 端口自动管理
303
+ - trusted scope 自动收敛
304
+ - assistant desk 自动初始化
305
+ - 一部分审批噪音已经开始收敛
306
+
307
+ ### 8.4 已经做出的正确产品判断
308
+
309
+ 1. `ally start` 要诚实失败,不能假装启动成功
310
+ 2. 命令行不能继续被视为普通同事的默认主入口
311
+ 3. 用户不应被迫学习 `work-ally` 的内部实现概念
312
+ 4. 中间层必须继续吃掉复杂性,而不是把复杂性直接抛给用户
313
+
314
+ ## 9. 还需要做什么
315
+
316
+ ### 9.1 缺激活层
317
+
318
+ 我们还没有一条足够完整的“从零到首次可用”路径。
319
+
320
+ 用户需要的其实是一条 activation chain:
321
+
322
+ 1. 选项目
323
+ 2. 准备外部入口
324
+ 3. 回填必要信息
325
+ 4. 验证能否启动
326
+ 5. 完成第一次真实对话
327
+
328
+ ### 9.2 缺理解层
329
+
330
+ 用户仍需要自己建立很多内部心智模型。
331
+
332
+ 比如:
333
+
334
+ - “项目作用域”该怎么理解
335
+ - “绑定 assistant”对自己意味着什么
336
+ - “persona 管理”该去哪里做
337
+ - “当前不可用”属于系统状态还是配置没完成
338
+
339
+ ### 9.3 缺恢复层
340
+
341
+ 用户失败后还不够容易回到正确步骤。
342
+
343
+ ### 9.4 缺统一的主路径设计
344
+
345
+ 现在很多材料都是分散正确,但没有组成统一主路径。
346
+
347
+ 表现为:
348
+
349
+ - 文档各自正确,但入口顺序不清晰
350
+ - 状态有了,但没有统一承接面
351
+ - 快速开始、排障、飞书外部步骤之间缺少合同
352
+
353
+ ## 10. 我们应当做什么
354
+
355
+ 这里不是松散 backlog,而是明确的产品行动主线。
356
+
357
+ ### 10.1 第一主线:把桌面控制壳做成“主承接面”
358
+
359
+ 桌面控制壳的价值,不是“把命令换成按钮”。
360
+
361
+ 它真正的职责是:
362
+
363
+ - 让用户先选项目,再进入正确上下文
364
+ - 让用户看见当前绑定关系与当前状态
365
+ - 让 setup、回填、启动、状态、基础管理形成连续面
366
+ - 让用户不需要先理解 cwd、命令和内部目录
367
+
368
+ ### 10.2 第二主线:把准入闭环正式产品化
369
+
370
+ 我们需要把:
371
+
372
+ - 外部平台准备
373
+ - 配套文档
374
+ - 凭据回填
375
+ - 本地验证
376
+ - 失败归因
377
+
378
+ 串成单一路径。
379
+
380
+ ### 10.3 第三主线:把状态和异常语义继续收紧
381
+
382
+ 因此需要继续推进:
383
+
384
+ - session presence / state visibility
385
+ - middleware exception visibility
386
+ - supervised start boundary
387
+ - approval autonomy / safe defaults
388
+
389
+ ### 10.4 第四主线:重新组织产品文档分工
390
+
391
+ 更合理的分工应是:
392
+
393
+ - quickstart:从已具备最小前提开始讲
394
+ - 配套文档:讲外部平台如何准备
395
+ - 排障文档:讲异常分支如何修
396
+ - 桌面端:讲现在卡在哪、下一步做什么
397
+
398
+ ## 11. 用户生命周期视角下的完整闭环
399
+
400
+ 完整生命周期至少应分六段。
401
+
402
+ ### 11.1 Discover
403
+
404
+ 用户知道这个产品能做什么。
405
+
406
+ ### 11.2 Prepare
407
+
408
+ 用户准备外部条件与本地条件。
409
+
410
+ ### 11.3 Connect
411
+
412
+ 用户选项目、绑 assistant、回填凭据。
413
+
414
+ ### 11.4 Validate
415
+
416
+ 系统验证能否真正工作。
417
+
418
+ ### 11.5 Use
419
+
420
+ 用户进入日常使用。
421
+
422
+ ### 11.6 Recover
423
+
424
+ 用户在异常时恢复。
425
+
426
+ ## 12. 产品行动框架
427
+
428
+ ### 12.1 主线一:入口承接
429
+
430
+ 用户问题:
431
+
432
+ - 我应该从哪里开始
433
+ - 我现在操作的是哪个项目
434
+ - 我不想先学命令行
435
+
436
+ 产品动作:
437
+
438
+ - 提供桌面控制壳作为普通用户默认入口
439
+ - 首屏明确以“项目”为主上下文,而不是以命令或目录为主
440
+ - 最近项目、绑定关系、运行状态必须一眼可见
441
+
442
+ 结果判断:
443
+
444
+ - 用户能在 10 秒内知道自己应该进哪个项目
445
+ - 用户不需要先理解 cwd 与 CLI 语义
446
+
447
+ ### 12.2 主线二:首次激活
448
+
449
+ 用户问题:
450
+
451
+ - 我离第一次可用还差什么
452
+ - 我应该先去哪里做外部准备
453
+ - 做完之后回到哪里继续
454
+
455
+ 产品动作:
456
+
457
+ - 提供准入 checklist
458
+ - 明确外部平台文档入口
459
+ - 提供凭据回填入口与验证动作
460
+ - 把失败归因回落到具体步骤
461
+
462
+ 结果判断:
463
+
464
+ - 用户能在首次路径里完成从外部准备到本地启动的闭环
465
+ - 工程同学不需要大量陪跑首次体验
466
+
467
+ ### 12.3 主线三:日常可见
468
+
469
+ 用户问题:
470
+
471
+ - 现在能不能用
472
+ - 正在运行还是已经停了
473
+ - 这个项目现在绑定的是谁
474
+
475
+ 产品动作:
476
+
477
+ - 首页和项目页都必须先给“结论态”
478
+ - 状态要先说是否可用,再允许用户下钻细节
479
+ - persona、绑定、运行控制要形成最小连续面
480
+
481
+ ### 12.4 主线四:失败恢复
482
+
483
+ 用户问题:
484
+
485
+ - 为什么失败
486
+ - 我要回到哪一步修
487
+ - 修完后怎么重新验证
488
+
489
+ 产品动作:
490
+
491
+ - 建立失败类型到下一步动作的映射
492
+ - 在桌面端直接展示阻塞原因与建议动作
493
+ - 排障文档只承接更深层解释,不承担首层归因责任
494
+
495
+ ### 12.5 主线五:信任建立
496
+
497
+ 用户问题:
498
+
499
+ - 它现在是在干活、在等我,还是已经挂了
500
+ - 刚才那条消息到底有没有被处理
501
+
502
+ 产品动作:
503
+
504
+ - 继续收紧 session presence、异常透明化、恢复语义
505
+ - 中间层不允许再出现“内部知道,用户无感”的异常路径
506
+ - 审批和等待都要变成显式状态,而不是靠用户猜
507
+
508
+ ## 13. 主线一:桌面控制壳
509
+
510
+ ### 13.1 是什么
511
+
512
+ 一个围绕“项目选择 -> assistant 绑定 -> 运行状态 -> 最小管理”设计的本地轻量控制壳。
513
+
514
+ ### 13.2 为什么做
515
+
516
+ 因为当前命令行、cwd、项目作用域语义,对普通用户仍然是明显门槛。
517
+
518
+ ### 13.3 如何做
519
+
520
+ 桌面端必须承接:
521
+
522
+ - 选择项目
523
+ - 查看当前绑定 assistant
524
+ - 查看运行状态
525
+ - 提供 setup / start / stop / restart / status / logs 的图形化入口
526
+ - 提供最小 persona 管理入口
527
+
528
+ 同时要坚持边界:
529
+
530
+ - 它是轻量控制壳,不是厚平台
531
+ - 它包住既有 `ally` 能力,不重写产品内核
532
+ - 首屏优先给结论,再允许下钻
533
+
534
+ ## 14. 主线二:用户准入闭环
535
+
536
+ ### 14.1 是什么
537
+
538
+ 一条把“外部平台准备”与“本地 assistant 启动验证”串成单一路径的 activation 闭环。
539
+
540
+ ### 14.2 为什么做
541
+
542
+ 因为真正阻塞首次体验的,不只是本地 setup,还有更早的一段外部准备路径。
543
+
544
+ ### 14.3 如何做
545
+
546
+ 这条闭环应被明确拆成四层:
547
+
548
+ 1. `资格与前提`
549
+ - 这个人能不能开始,是否需要管理员协作
550
+ 2. `外部平台准备`
551
+ - 应用、机器人、权限、事件、发布、可用范围
552
+ 3. `本地回填与启动`
553
+ - 项目选择、assistant 绑定、凭据回填、验证启动
554
+ 4. `验证与恢复`
555
+ - 失败归因到飞书侧还是本地侧,并给出下一步
556
+
557
+ ### 14.4 桌面端需要承接什么
558
+
559
+ 1. 识别一个项目是否已经完成最小准入
560
+ 2. 用清晰状态展示当前卡在哪一层
561
+ 3. 给出外部平台文档入口
562
+ 4. 提供回填位置
563
+ 5. 提供“验证并启动”动作
564
+ 6. 在失败时展示明确归因与下一步
565
+
566
+ ## 15. 主线二的状态模型
567
+
568
+ 如果没有清晰状态模型,桌面端就会只剩一堆按钮和文本。
569
+
570
+ ### 15.1 建议的高层状态
571
+
572
+ 1. `not_started`
573
+ 2. `needs_external_setup`
574
+ 3. `waiting_for_credentials`
575
+ 4. `ready_to_validate`
576
+ 5. `blocked_by_feishu`
577
+ 6. `blocked_locally`
578
+ 7. `activated`
579
+
580
+ ### 15.2 每个状态必须回答的三个问题
581
+
582
+ 1. 现在处于什么阶段
583
+ 2. 下一步该做什么
584
+ 3. 完成后会得到什么结果
585
+
586
+ ### 15.3 不应直接暴露给普通用户的低层状态
587
+
588
+ 这些状态可以存在于实现层,但不应直接变成用户首层文案:
589
+
590
+ - websocket closed
591
+ - sdk reconnecting
592
+ - channel lock pending
593
+ - supervisor pid changed
594
+
595
+ ## 16. 主线二的外部平台闭环
596
+
597
+ 这里先用“外部平台”做总称,当前最关键的实例是飞书。
598
+
599
+ ### 16.1 用户视角的真实任务
600
+
601
+ 1. 我想选一个项目开始试用 `work-ally`
602
+ 2. 我想知道这个项目当前是否已经具备外部入口
603
+ 3. 如果没有,我想知道应该去外部平台做什么
604
+ 4. 我想完成应用、机器人、权限、事件相关配置
605
+ 5. 我想把必要信息带回桌面端工具里
606
+ 6. 我想一键验证当前配置是否足够启动
607
+ 7. 如果失败,我想知道具体卡在哪一步
608
+ 8. 如果成功,我想立刻进入首次对话体验
609
+
610
+ ### 16.2 飞书是当前最关键的实例
611
+
612
+ 飞书侧至少要覆盖:
613
+
614
+ - 创建企业自建应用
615
+ - 开启机器人能力
616
+ - 配置最小必要权限
617
+ - 配置消息接收 / 事件相关能力
618
+ - 完成发布、审核、可用范围设置
619
+ - 取得 `App ID / App Secret`
620
+
621
+ ### 16.3 `ally start` 的边界必须保留
622
+
623
+ 如果飞书就是对外入口,而应用还不能发消息,那么它就不应被宣称为“已启动”。
624
+
625
+ 所以准入闭环不是放松门槛,而是把门槛解释清楚、前置可见、失败可恢复。
626
+
627
+ ## 17. 主线二的配套文档合同
628
+
629
+ 外部平台闭环不能只靠桌面端,必须有一份配套文档承接外部动作。
630
+
631
+ ### 17.1 这份文档的职责
632
+
633
+ 它不是开放平台百科,而是一张操作地图。
634
+
635
+ 它必须回答:
636
+
637
+ 1. 我现在为什么要做这件事
638
+ 2. 我自己能不能做,还是要找管理员
639
+ 3. 如果我自己能做,第一步去哪里
640
+ 4. 如果我不能做,应该把什么发给管理员
641
+ 5. 做完后我需要带回 `work-ally` 的是什么
642
+ 6. 如果桌面端报错,我该回文档的哪一段
643
+
644
+ ### 17.2 文档的建议结构
645
+
646
+ 1. 这份文档帮你完成什么
647
+ 2. 先判断你走哪条路径
648
+ 3. 自助版步骤
649
+ 4. 管理员协作版步骤
650
+ 5. 桌面端回填说明
651
+ 6. 常见阻塞与回跳地图
652
+
653
+ ### 17.3 文档和桌面端的映射合同
654
+
655
+ 如果桌面端要求用户回填:
656
+
657
+ - `App ID`
658
+ - `App Secret`
659
+
660
+ 那么文档必须明确告诉用户:
661
+
662
+ - 到哪里拿
663
+ - 如何辨认
664
+ - 回到桌面端填哪个位置
665
+
666
+ 如果桌面端提示:
667
+
668
+ - 需要完成飞书侧准备
669
+ - 等待回填凭据
670
+ - 飞书应用不可用
671
+ - 本地验证失败
672
+
673
+ 那么文档都必须有明确对应章节。
674
+
675
+ ## 18. 文档分工合同
676
+
677
+ ### 18.1 `docs/user-quickstart.md`
678
+
679
+ 职责:
680
+
681
+ - 面向已经具备最小前提的用户
682
+ - 从项目接入、本地 setup、启动开始讲
683
+
684
+ ### 18.2 配套文档
685
+
686
+ 职责:
687
+
688
+ - 解释外部平台准备
689
+ - 说明谁可以自己操作,谁需要管理员协作
690
+ - 告诉用户做完后回填什么
691
+
692
+ ### 18.3 `docs/troubleshooting.md`
693
+
694
+ 职责:
695
+
696
+ - 承接更深层的异常说明
697
+ - 为已经知道自己卡在哪一层的人提供更深入判断
698
+
699
+ ### 18.4 桌面端
700
+
701
+ 职责:
702
+
703
+ - 作为主承接面,显示当前卡在哪
704
+ - 给出下一步动作
705
+ - 串联文档、回填、验证与运行状态
706
+
707
+ ## 19. 用户视角的理想主路径
708
+
709
+ 1. 打开产品
710
+ 2. 选择或确认目标项目
711
+ 3. 看到当前项目是否已经具备 assistant 与渠道入口
712
+ 4. 若未具备,系统明确告诉我先做什么
713
+ 5. 若需要外部准备,系统给我准确入口和回填目标
714
+ 6. 我完成外部准备后,回来填最少信息
715
+ 7. 我点击验证并启动
716
+ 8. 系统明确告诉我是否已可用
717
+ 9. 可用后我立刻进入首次对话
718
+ 10. 之后我能随时回来看状态、启动停止、处理异常
719
+
720
+ ## 20. 我们真正应该优化的不是“流程完成率”,而是“首次可用率”
721
+
722
+ 对 `work-ally` 而言,当前更合理的核心指标不是:
723
+
724
+ - 有多少人看完 quickstart
725
+ - 有多少人填完 config
726
+ - 有多少人点完 setup wizard
727
+
728
+ 而是:
729
+
730
+ - 有多少人成功完成首次真实对话
731
+ - 从开始到首次真实对话用了多久
732
+ - 卡住的人主要卡在哪一步
733
+ - 卡住后是否知道下一步
734
+
735
+ ## 21. 建议建立的产品衡量口径
736
+
737
+ ### 21.1 北极星口径
738
+
739
+ `Time to First Usable Reply`
740
+
741
+ 定义:
742
+
743
+ - 从用户进入产品主路径开始
744
+ - 到 assistant 在目标项目语境里完成第一条真实有用回复为止
745
+
746
+ ### 21.2 辅助口径
747
+
748
+ 1. `Activation Success Rate`
749
+ 2. `Blocked Step Distribution`
750
+ 3. `Recovery Success Rate`
751
+ 4. `Help Dependence Rate`
752
+
753
+ ## 22. 当前建议的产品排序
754
+
755
+ 如果只从“降低用户使用门槛”这个目标来排序,当前建议是:
756
+
757
+ 1. **桌面控制**
758
+ 2. **用户准入闭环**
759
+ 3. **状态与异常透明化继续收口**
760
+ 4. **内部重构**
761
+ 5. **Claude 支持**
762
+
763
+ ## 23. V1 应该明确交付什么
764
+
765
+ 1. 一份明确的总 spec,用来指导后续所有“降门槛”子专题
766
+ 2. 桌面控制壳承接首次接入、项目选择、状态查看与基础管理
767
+ 3. 准入闭环能够覆盖飞书侧准备、回填、验证与阻塞归因
768
+ 4. 快速开始文档、外部平台文档、排障文档与桌面端之间形成明确分工
769
+ 5. 用户可以在不学习命令行主路径的前提下完成首次可用体验
770
+
771
+ ## 24. 对工程与产品的边界要求
772
+
773
+ ### 24.1 产品必须坚持的边界
774
+
775
+ 1. 不把 CLI 内部模型直接暴露给普通用户
776
+ 2. 不为了“灵活”而把主路径重新做复杂
777
+ 3. 不因为做 GUI 就重写一套产品内核
778
+ 4. 不用抽象报错替代具体下一步
779
+
780
+ ### 24.2 可以留给工程自己决策的部分
781
+
782
+ 1. 桌面端技术栈
783
+ 2. 具体组件组织方式
784
+ 3. 状态刷新机制
785
+ 4. 日志拉取策略
786
+ 5. 视觉风格与交互细节
787
+
788
+ ## 25. 验收问题
789
+
790
+ 如果未来要判断这个专项是否真的成立,至少应该问下面这些问题:
791
+
792
+ 1. 一个第一次接触 `work-ally` 的内部同事,是否能在 10 秒内知道自己下一步该做什么
793
+ 2. 一个不会命令行的人,是否能在桌面端完成首次接入并走到第一次真实对话
794
+ 3. 用户失败时,是否能快速知道问题属于外部平台侧、本地侧,还是运行状态侧
795
+ 4. 用户日常使用时,是否还需要记住 cwd、命令和内部目录结构
796
+ 5. 工程同学是否明显减少了“远程陪跑首次体验”的人工负担
797
+
798
+ ## 26. 已知边界
799
+
800
+ ### 26.1 这不是“零学习成本”
801
+
802
+ 任何产品都不可能绝对零学习。
803
+
804
+ ### 26.2 这也不是“所有复杂性都做成 GUI”
805
+
806
+ 真正要做的是:
807
+
808
+ - 把主路径做简单
809
+ - 把高级能力留给需要的人
810
+ - 用 progressive disclosure 保持克制
811
+
812
+ ### 26.3 这不是否定 CLI
813
+
814
+ CLI 仍然是工程维护者和自动化流程的重要入口。
815
+
816
+ 但它不应继续被当成普通内部同事的默认主入口。
817
+
818
+ ## 27. 待定问题
819
+
820
+ 1. 桌面端第一版是否需要 machine scope 摘要页
821
+ 2. 配套文档是否要拆成“自助版”和“管理员协作版”两块明确入口
822
+ 3. 私聊首次可用与群聊首次可用是否需要明确分成两条 checklist
823
+ 4. 是否需要在桌面端保留一个“复制给管理员”的标准说明模板
824
+ 5. 是否需要为首次体验建立最小埋点或人工记录口径
825
+
826
+ ## 28. 最终结论
827
+
828
+ 如果今天从产品视角回答“我们已经做了什么、还需要做什么、应当做什么”,最准确的总结是:
829
+
830
+ - **我们已经做了什么**:把 `work-ally` 的能力层做得相当扎实,开始建立部分状态语义与信任边界。
831
+ - **我们还需要做什么**:把激活层、理解层、恢复层真正产品化,不再让用户自己拼接主路径。
832
+ - **我们应当做什么**:围绕桌面控制、准入闭环、状态透明化三条主线继续收敛,让产品从“工程上成立”真正走向“普通用户也能低成本用起来”。