grokbot-control 0.0.0-stage → 0.1.3

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 (122) hide show
  1. package/README.md +160 -2
  2. package/dist/auth/lock.d.ts +14 -0
  3. package/dist/auth/lock.js +71 -0
  4. package/dist/auth/provider.d.ts +89 -0
  5. package/dist/auth/provider.js +884 -0
  6. package/dist/auth/store.d.ts +25 -0
  7. package/dist/auth/store.js +106 -0
  8. package/dist/auth/types.d.ts +138 -0
  9. package/dist/auth/types.js +1 -0
  10. package/dist/cli/config.d.ts +26 -0
  11. package/dist/cli/config.js +98 -0
  12. package/dist/cli/help.d.ts +1 -0
  13. package/dist/cli/help.js +83 -0
  14. package/dist/cli/io.d.ts +6 -0
  15. package/dist/cli/io.js +61 -0
  16. package/dist/cli/main.d.ts +2 -0
  17. package/dist/cli/main.js +275 -0
  18. package/dist/cli/sync.d.ts +4 -0
  19. package/dist/cli/sync.js +105 -0
  20. package/dist/connect/client.d.ts +32 -0
  21. package/dist/connect/client.js +257 -0
  22. package/dist/dto/result.d.ts +33 -0
  23. package/dist/dto/result.js +29 -0
  24. package/dist/dto/types.d.ts +63 -0
  25. package/dist/dto/types.js +2 -0
  26. package/dist/errors.d.ts +31 -0
  27. package/dist/errors.js +64 -0
  28. package/dist/index.d.ts +13 -0
  29. package/dist/index.js +11 -0
  30. package/dist/mcp/main.d.ts +2 -0
  31. package/dist/mcp/main.js +82 -0
  32. package/dist/mcp/tools.d.ts +24 -0
  33. package/dist/mcp/tools.js +408 -0
  34. package/dist/mcp/zod-json.d.ts +2 -0
  35. package/dist/mcp/zod-json.js +4 -0
  36. package/dist/ops/auth.d.ts +48 -0
  37. package/dist/ops/auth.js +89 -0
  38. package/dist/ops/bot.d.ts +52 -0
  39. package/dist/ops/bot.js +211 -0
  40. package/dist/ops/limits.d.ts +10 -0
  41. package/dist/ops/limits.js +31 -0
  42. package/dist/ops/map.d.ts +7 -0
  43. package/dist/ops/map.js +57 -0
  44. package/dist/ops/message.d.ts +33 -0
  45. package/dist/ops/message.js +118 -0
  46. package/dist/ops/plane.d.ts +26 -0
  47. package/dist/ops/plane.js +33 -0
  48. package/dist/ops/progress.d.ts +34 -0
  49. package/dist/ops/progress.js +92 -0
  50. package/dist/ops/session.d.ts +13 -0
  51. package/dist/ops/session.js +34 -0
  52. package/dist/ops/sidebar.d.ts +70 -0
  53. package/dist/ops/sidebar.js +205 -0
  54. package/dist/sync/attachments.d.ts +76 -0
  55. package/dist/sync/attachments.js +274 -0
  56. package/dist/sync/core.d.ts +92 -0
  57. package/dist/sync/core.js +1027 -0
  58. package/dist/sync/decode.d.ts +83 -0
  59. package/dist/sync/decode.js +229 -0
  60. package/dist/sync/download-policy.d.ts +3 -0
  61. package/dist/sync/download-policy.js +103 -0
  62. package/dist/sync/fs.d.ts +24 -0
  63. package/dist/sync/fs.js +252 -0
  64. package/dist/sync/hydrate.d.ts +43 -0
  65. package/dist/sync/hydrate.js +472 -0
  66. package/dist/sync/render.d.ts +5 -0
  67. package/dist/sync/render.js +100 -0
  68. package/dist/testing/mock-persist.d.ts +3 -0
  69. package/dist/testing/mock-persist.js +45 -0
  70. package/dist/testing/mock-transport.d.ts +18 -0
  71. package/dist/testing/mock-transport.js +202 -0
  72. package/docs/acceptance.md +19 -0
  73. package/docs/architecture.md +128 -0
  74. package/docs/auth-lock.md +87 -0
  75. package/docs/implementation-plan.md +14 -0
  76. package/docs/implementation-status.md +92 -0
  77. package/docs/proto-drift.md +9 -0
  78. package/docs/protocol/README.md +34 -0
  79. package/docs/protocol/attachment-pagination-0.79.3.md +32 -0
  80. package/docs/protocol/auth-flow.md +51 -0
  81. package/docs/protocol/baseline-manifest.md +72 -0
  82. package/docs/protocol/baselines/full-schema-diff-0.78.4-to-0.79.2.txt +239 -0
  83. package/docs/protocol/baselines/full-schema-diff-0.78.4-to-0.79.3.txt +240 -0
  84. package/docs/protocol/baselines/full-schema-diff-0.79.2-to-0.79.3.txt +23 -0
  85. package/docs/protocol/baselines/schema-0.79.3/README.md +7 -0
  86. package/docs/protocol/baselines/schema-0.79.3/agent.v1.proto +5184 -0
  87. package/docs/protocol/baselines/schema-0.79.3/aiserver.v1.proto +18182 -0
  88. package/docs/protocol/baselines/schema-0.79.3/aiserver.v1_2.proto +54 -0
  89. package/docs/protocol/baselines/schema-0.79.3/anyrun.v1.proto +37 -0
  90. package/docs/protocol/baselines/schema-0.79.3/internapi.v1.proto +35 -0
  91. package/docs/protocol/baselines/schema-0.79.3/snapshot.json.gz +0 -0
  92. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AgentStoreService.proto +34 -0
  93. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AiService.proto +17 -0
  94. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.AnalyticsService.proto +17 -0
  95. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.BackgroundComposerService.proto +19 -0
  96. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.DashboardService.proto +101 -0
  97. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.GrokBotService.proto +473 -0
  98. package/docs/protocol/baselines/schema-0.79.3/svc_aiserver.v1.SandBoxService.proto +64 -0
  99. package/docs/protocol/baselines/used-surface-0.78.4.json +3694 -0
  100. package/docs/protocol/baselines/used-surface-0.79.2.json +3835 -0
  101. package/docs/protocol/baselines/used-surface-0.79.3.json +3835 -0
  102. package/docs/protocol/baselines/used-surface-diff-0.78.4-to-0.79.2.md +34 -0
  103. package/docs/protocol/baselines/used-surface-diff-0.78.4-to-0.79.3.md +33 -0
  104. package/docs/protocol/compat-matrix.md +20 -0
  105. package/docs/protocol/static-restore.md +64 -0
  106. package/docs/protocol/surface-map.md +39 -0
  107. package/docs/protocol/transcript-body-0.79.3.md +98 -0
  108. package/docs/protocol/update-runbook.md +30 -0
  109. package/docs/protocol-map.md +106 -0
  110. package/docs/references.md +55 -0
  111. package/docs/requirements.md +26 -0
  112. package/docs/review.md +36 -0
  113. package/docs/sync-format.md +98 -0
  114. package/package.json +60 -4
  115. package/vendor/proto-gen/NOTICE.md +23 -0
  116. package/vendor/proto-gen/agent.v1_pb.js +9503 -0
  117. package/vendor/proto-gen/aiserver.v1_2_pb.js +105 -0
  118. package/vendor/proto-gen/aiserver.v1_pb.js +33163 -0
  119. package/vendor/proto-gen/anyrun.v1_pb.js +64 -0
  120. package/vendor/proto-gen/internapi.v1_pb.js +60 -0
  121. package/vendor/proto-gen/package.json +10 -0
  122. package/vendor/proto-gen/svc_aiserver.v1.GrokBotService_connect.js +4193 -0
@@ -0,0 +1,98 @@
1
+ # 文件优先观察归档(无 SQLite)
2
+
3
+ 基线 App 0.79.3。身份仍为 operator_asserted_unverified,不是 server_verified。
4
+ 本地目录0700,文件0600,凭据独立保存;不得把真实归档提交仓库。
5
+
6
+ ## CLI
7
+ ```sh
8
+ gbc sync pull --agent-id BOT --dir /absolute/archive --account-id STABLE_ID --team-id none --ack-unverified-scope --page-size 100 --max-pages 100
9
+ # Optional body recovery; defaults off for backwards-compatible network cost
10
+ # Add --hydrate missing --max-hydrate-requests 32 --hydrate-max-bytes 8388608 --hydrate-max-body-bytes 4194304 to pull
11
+ gbc sync status --dir /absolute/archive
12
+ gbc sync render --dir /absolute/archive
13
+ gbc sync attachments --agent-id BOT --dir /absolute/archive --account-id STABLE_ID --team-id none --ack-unverified-scope
14
+ # --session-id SESSION 限命名会话,省略为agent下已归档会话;--path 为远端canonical alias过滤
15
+ ```
16
+ `message send/status` 省略 --session-id 使用默认会话,MCP/SDK一致。附件不在pull中默认下载。
17
+ --dry-run不读写归档、不登录或RPC。未知/重复flag拒绝。CLI显式命令即本地写授权,不需远端allow-writes。
18
+ MCP root/身份启动固定:GBT_SYNC_ROOT、GBT_SYNC_ACCOUNT_ID、GBT_SYNC_TEAM_ID、GBT_SYNC_ACK_UNVERIFIED_SCOPE=1;
19
+ 另需GBT_SYNC_ALLOW_LOCAL_WRITES=1暴露pull/render/attachments;GBT_MCP_READONLY=1排除所有本地写工具。
20
+ GBT_ALLOW_WRITES不打开本地同步写开关。scope在任何下载RPC前核对backend/account/team/assurance。
21
+ 此绑定不能发现操作者在相同声明ID下实际换凭据。换账户必须重新确认,使用独立archive。
22
+
23
+ ## 布局
24
+ ```
25
+ manifest.json # 账户声明、session索引、下轮session轮转位置
26
+ bots/id-<agent>/bot.json
27
+ bots/id-<agent>/sessions/default/ # 默认会话:wire session_id=""
28
+ bots/id-<agent>/sessions/id-<session>/
29
+ session.json # current_generation指针;代际变化则null
30
+ generations/<generation>/
31
+ entries.jsonl # retained observations,不是当前有效镜像
32
+ state.json # checksum、head刷新时间、backfill游标/阶段/覆盖观察
33
+ bots/id-<agent>/attachments/
34
+ objects/sha256-<content-hash> # 完整内容,不存signed URL
35
+ refs-v2/<sha256(session)>/<sha256(canonical-path)>.json
36
+ bodies/objects/sha256-<content-hash> # transcript body, NOT a user attachment
37
+ .sync/lock
38
+ .sync/staging/<uuid>.tmp
39
+ derived/<agent>/<session>/transcript.md
40
+ ```
41
+ ID组件base64url,默认session用default。远端路径不作为本地写路径。
42
+ 旧format_version=1归档继续可读;旧无scope/session的refs不迁移为可信当前ref,必须重新Resolve下载;旧对象可保留历史。
43
+ 旧state缺backfill字段从head重建。数据/state checksum不符重拉,从head恢复,不信旧游标。
44
+ status一致仅证明本地checksum,不代表服务端完整或最新。Markdown可重建,pull/attachments后需render。
45
+
46
+ ## 分页、backfill与真实性
47
+ List以before_seq排他回翻,首次省略before_seq;generation=0省略与App对齐。seq/updated_seq以uint64字符串和BigInt排序。
48
+ page-size默认100,1..500;max-pages默认100硬顶1000;max-bytes默认32MiB硬顶256MiB;timeout默认30s硬顶300s。
49
+ 一个命令共享预算,session稳定排序+跨命令轮转,预算耗尽不推进未处理session。每session单独记录本次页数/字节。
50
+ 第一次从head取页,接已有最早backfill游标继续;预算仅1页时下轮backfill,再下轮head,防止重复头页饿死深历史。
51
+ head刷新与backfill进度分开;head不会把更老游标倒退。空页只是结束观察,不编造complete。
52
+ 不前进/重叠边界停止并记录;generation变化不跨代合并,current_generation=null要求重拉。
53
+ JSONL先落盘fsync/rename,再写state校验和,最后manifest;异常可重放,绝不宣称跨文件事务。
54
+ 所有单session entries/state及render输出各限64MiB。历史不因未返回就删除;旧generation保留但不在current指针中。
55
+
56
+ **completeness始终unknown**。未实现Watch/deletes/cursorTooOld、明确删除同步;
57
+ 无法证明跨页事务一致性,也不保证旧行变更均被刷新。backfill到空页不等于全文正文/附件全量完整。
58
+ 保留的历史行可能已被远端删除,视图明确标注retained observations,不能当当前镜像。
59
+
60
+ ## 按需附件
61
+ 来源仅已确认UI entry:user-attachment.file_path、send-message(message.type=attachment).message.url。
62
+ 只支持App已证实store alias:/home/box/{agent-data|sand-data}/agents/<safe-agent-dir>/{attachments|assets}/<64hex>.<ext>,
63
+ 规范为agent-data;严格file://可转换。中文/长显示文件名保留为数据,绝不作为本地写路径。任意本机绝对路径、../、非规范file URL拒绝。
64
+ 外部链接、workspace任意路径、cloud-composer artifact、未知卡片明确unsupported,不任意抓URL。
65
+ 每agent/session/canonical-path独立ResolveGrokBotAttachmentReads。仅STORE+合法size/expiry/nonempty-etag+HTTPS才GET;
66
+ NOT_IN_STORE/NO_STORAGE不盲fallback。重复/冲突Resolve行拒绝。ReadGrokBotAgentAttachmentChunk后续再做。
67
+ 每次都Resolve;已下载对象先校验本地hash,再条件GET If-None-Match。304且etag/size匹配才复用;新内容新hash,旧对象留历史。
68
+ 旧ref不被当作服务端最新证明。403最多再Resolve一次,总预算/截止时间共用。
69
+ 流式写private staging,边读hash/计量,超过单文件/总预算立即取消并丢弃staging;失败耗用仍计网络预算。
70
+ 默认单文件32MiB(硬128)、命令总64MiB(硬256)、命令30s(硬300)。安全schema与元数据枚举本地扫描仍是有限CPU工作;本地fsync不可强杀。
71
+ 全GET只接受200;304仅条件请求;不接受未请求的206。完整size/hash成功后fsync/rename才发布ref/entry/state。
72
+ 每次归档改写同样64MiB检查。all failed -> attachments_failed,部分失败 -> partial,详情结构化给出;没有附件是0结果,不能冒充下载验收通过。
73
+ signed URL/Bearer从不落盘或回显;下载GET不附带Connect鉴权。只允许公开HTTPS、标准443、无userinfo/hash,DNS解析拒绝私有/loopback/reserved结果且钉住解析地址,TLS校验正常,拒绝重定向。
74
+ 这信任已登录backend提供的数据、OS DNS/TLS与注入SDK代码;不是同UID恶意进程沙箱。custom fetch仅SDK测试/可信集成,CLI/MCP不暴露绕过policy开关。
75
+ 0700/0600不是磁盘加密,原始记录及base64都可能有明文,整个archive按敏感信息保护。
76
+
77
+ ## 证据与验收
78
+ 详见 protocol/attachment-pagination-0.79.3.md。静态代码证据不能替代live验证;每次真实验收单独记录范围与结果。
79
+
80
+ ## 正文补读(CLI/MCP 共用 SyncOps)
81
+ `pull --hydrate missing` / MCP `sync_pull({hydrate:"missing"})` 才补读,默认 `off`。
82
+ 不扩大 Watch/Room/附件来源,不调用 App、不读取其数据库/凭据。
83
+ - inline bytes 始终优先,包括空 bytes;body_omitted 标志仍作为原始观察保存。没有 inline 时优先已有 blob ref,再考虑 omitted 精确重读。
84
+ - omitted 请求严格绑定原 agent/session/generation,`before_seq=N+1,limit=1`。App `ge` 精确重读**始终传 generation(含 0)**。返回必须唯一且 seq/kind 相符;entry_id 若本地已有则必须一致。若同 seq/identity 但 `updated_seq` 更大:先把新观测 merge 进归档再对该版本补读,不丢弃。精确同版本才取 body/blob。UINT64_MAX 无合法 successor,显式失败。响应无 session 回显,只能验证请求 scope。
85
+ - generation 变更不发布本轮混代条目,已有历史不删;session 指针置 null,要求重拉。条目版本变更只标补读失败,不把新版本 body 配给旧条目。
86
+ - blob 仅取已观察 entry/reread 的 opaque ref,验证为安全单段后请求 `PresignSandBoxStoreReads({rel_paths:["blobs/<ref>"]})`。该 RPC 无 agent/session 参数,是已鉴权 account/team store scope,不添加猜测字段。响应一条请求必须恰好一条完全匹配路径,无缺失/多条/冲突/额外路径;顺序不作为映射依据。
87
+ - 不假设远端 ref 是 SHA256 或不可变;下载后的 **本地内容** 才计算 SHA256。命令内同 agent/session/generation 的一次恢复批次共享同 ref 的网络观察,记录不声称内容跨时刻不可变。无跨命令按 opaque ref 缓存。已经保存的 body 只在同一原始 entry 版本绑定(manifest backend/account/team/assurance 摘要 + agent/session/generation/seq/updated_seq/entry_id/kind/原 blob/omitted/inline)和本地 hash 全部相符时使用,manifest scope由读取者重算,不信JSONL自报的scope摘要;含义是保留的同版本观察,不是服务端现在的最新证明。
88
+ - signed URL 只来自该 store RPC,不接受 CLI 任意 URL。有效 expiry(至少余 1s)+公开 HTTPS/443,无 userinfo/fragment,DNS pinning/私网拒绝/无重定向,无 Bearer/Connect headers;URL 不落盘。过期/缺失 expiry 直接 partial;HTTP403 最多新 presign 一次,404/206/非200失败。这个403有限刷新是本工具的保守扩展,不声称 App blob reader 自带此重试。
89
+ - 流式写 .sync/staging,下载按已读 bytes(含失败)计量、超限取消、fsync/rename;无需猜测 presign 未提供的 size/etag。Content-Length 若提供需为安全整数、不超过预算且最终stream长度匹配,最终 JSON decoder 仍限4MiB,不实现任何解密或自选压缩协议。
90
+
91
+ 预算:`--max-hydrate-requests` 默认32/硬256(omitted重读、presign及403刷新均计入;这是 transcript pages 之外明确独立的额外 API 预算);`--hydrate-max-bytes` 默认8MiB/硬64MiB;`--hydrate-max-body-bytes` 默认/硬4MiB。
92
+ 同时受 pull 剩余 max-bytes 和统一 deadline 约束,网络响应 protobuf JSON 估算字节与 blob bytes 都计量;超限响应/stream 的已发生耗用可能超过额度,之后不再启动新补读。普通 pull 页数仍由 max-pages 控制;最多2次发现RPC + max-pages + max-hydrate-requests。
93
+ 传输层读响应 cap 沿既有16MiB;没有未公开的“inline limit”参数。失败不会清空归档,下一次开启补读会重新尝试历史 pending 条目;仅当**本轮**补读 RPC/传输失败(`hydration.failed>0`)或 generation_changed 时 `ok:false,code:partial,outcome:known_failure`(exit9)。解码器 unsupported / opaque 单独计入 `decode_failed`/`unavailable_or_unsupported`,**不影响退出码**。确定性失败(body_unavailable/exact_row_missing/body_version_changed 等)对同一 binding 记 `retry:"never"`,后续轮次跳过以免饿死新条目;本轮新观测优先,其余按 seq 从新到旧。off 不发补读。
94
+
95
+ 格式兼容:manifest format_version=1 不变;entry 的 `hydration.format_version=1` 和 state 的 `body_hydration_format=1` 为可选增量字段。没有它们的旧归档按原始 body 解码;未知格式/坏 binding/hash/base64 拒绝使用缓存正文,离线输出 opaque,不猜读路径;未知未来 hydration 格式原样保留、补读报 partial,不破坏未来证据。原 `raw/wire_base64/body_base64/body_omitted/blob_hash` 保留;补读记录含 archive_scope_sha256/context/source/observed_at/attempts/retry、`object_rel`+`content_sha256`(正文以内容寻址对象为准,不在 hydration 再内联 body_base64)。reread 只保留 wire/meta,raw JSON **剥离 body**,避免三份正文撑爆 64MiB。
96
+ JSONL 也保留经确认 schema 解码的明文 decoded.text,便于 rg 中文;status/render 从原始 inline 或验证后的 hydration bytes 重建,不信 cached decoded。额外正文证据若挤出64MiB session预算,保留原行并降级archive_body_budget/partial(已完成对象可能成为孤儿),不删除原始条目来腾空间。对象先写,entries 后写、state 最后写;崩溃可留下孤儿对象但不能发布半截 body,校验不符重拉;无自动 GC/deletes。
97
+ state/status 的 `body_coverage` 分开给 retained_rows、observed_inline/omitted/blob_ref、hydrated_version_bound、decoded、unavailable_or_unsupported。omitted 与 blob 观察可重叠,这些不是互斥全集;hydrated 成功取得 bytes 也不代表 JSON/schema 解码成功。历史行覆盖、正文覆盖、当前有效成员/最新状态是三回事,completeness/current membership 仍 unknown。
98
+ 每session JSONL(包括原始与补读证据的重复存储)、state、Markdown 均仍限64MiB,超限拒绝发布,不默默截正文;较小的新下载预算不删除过去已保存的合法观察。文件0700/0600不等于加密。
package/package.json CHANGED
@@ -1,6 +1,62 @@
1
1
  {
2
2
  "name": "grokbot-control",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.3",
4
+ "description": "Programmable control plane for Grok Bot (shared SDK + CLI gbc + MCP). Not an official product.",
5
+ "type": "module",
6
+ "bin": {
7
+ "gbc": "./dist/cli/main.js",
8
+ "gbc-mcp": "./dist/mcp/main.js"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "types": "./dist/index.d.ts",
18
+ "files": [
19
+ "dist",
20
+ "vendor/proto-gen",
21
+ "docs",
22
+ "README.md"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "prepack": "npm run build",
27
+ "typecheck": "tsc -p tsconfig.json --noEmit",
28
+ "test": "node --import tsx --test test/*.test.ts",
29
+ "gbc": "node dist/cli/main.js",
30
+ "mcp": "node dist/mcp/main.js",
31
+ "test:protocol-tools": "python3 -m unittest discover -s tools/protocol"
32
+ },
33
+ "engines": {
34
+ "node": ">=20"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/younglark/grokbot-control.git"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/younglark/grokbot-control/issues"
42
+ },
43
+ "homepage": "https://github.com/younglark/grokbot-control#readme",
44
+ "dependencies": {
45
+ "@bufbuild/protobuf": "1.10.1",
46
+ "@connectrpc/connect": "1.6.1",
47
+ "@connectrpc/connect-node": "1.6.1",
48
+ "@modelcontextprotocol/sdk": "^1.12.1",
49
+ "fs-native-extensions": "1.5.3",
50
+ "zod": "^3.24.2"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.13.10",
54
+ "tsx": "^4.19.3",
55
+ "typescript": "^5.8.2"
56
+ },
57
+ "imports": {
58
+ "#proto-gen/GrokBotService": "./vendor/proto-gen/svc_aiserver.v1.GrokBotService_connect.js",
59
+ "#proto-gen/aiserver": "./vendor/proto-gen/aiserver.v1_pb.js",
60
+ "#proto-gen/agent": "./vendor/proto-gen/agent.v1_pb.js"
61
+ }
62
+ }
@@ -0,0 +1,23 @@
1
+ # Vendored generated protocol clients
2
+
3
+ **本仓库从App恢复生成** — these files were regenerated *by this repository's maintainers* from a static
4
+ extraction of the official Grok Bot desktop App. They are **not** an official xAI/Cursor SDK and are
5
+ **not** a byte copy of any upstream repository.
6
+
7
+ | Item | Value |
8
+ |---|---|
9
+ | Source App | Grok Bot **0.79.3** Linux amd64 (`grok-bot_0.79.3_amd64.deb`), release commitSha `473941287261c3efa92c6b2a0bf7e1caad1a2ef2` |
10
+ | Formal `.proto` source | [`proto/`](../../proto/) (same bytes as `docs/protocol/baselines/schema-0.79.3/*.proto`) |
11
+ | Schema input | `dist/electron-main/proto.cjs` from that build's `app.asar`, sha256 `929f17d21f4646c745a9fc4c4a43b55ff686288b5637dc310587471a20f12f8a` (read as text, never executed) |
12
+ | Restore method | `extract_proto.py` from https://github.com/younglark/grokbot-proto @ `49fd8ce` (script sha256 `ab3ec201…2301`) → `.proto` |
13
+ | protoc | `grpcio-tools` 1.85.1 (libprotoc 35.1) |
14
+ | Generators | `@bufbuild/protoc-gen-es` **1.10.1** (`target=js`), `@connectrpc/protoc-gen-connect-es` **1.6.1** (`target=js`) |
15
+ | Runtime deps | `@bufbuild/protobuf@1.10.1`, `@connectrpc/connect@1.6.1` (same as the App's `package.json`) |
16
+ | Licence of generators/runtime | Apache-2.0 (Buf / Connect) |
17
+ | Schema licence | No licence declared; `.proto` restored from compact descriptors — facts from a reverse-engineered schema. Comments/options are not recoverable. |
18
+
19
+ Pipeline check: the same toolchain applied to upstream's 0.78.4 `.proto` reproduces the previous vendor files
20
+ byte-for-byte (and upstream `descriptor/desc.pb`), so differences in these files reflect schema changes only.
21
+
22
+ Do **not** import from `../grokbot-proto` or absolute `/workspace` paths at runtime.
23
+ Hashes and verification: `docs/protocol/baseline-manifest.md`. Regenerate: `docs/protocol/update-runbook.md`.