@mebular/fleet 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 (178) hide show
  1. package/dist/agentdir.d.ts +43 -0
  2. package/dist/agentdir.d.ts.map +1 -0
  3. package/dist/agentdir.js +107 -0
  4. package/dist/agentdir.js.map +1 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +1135 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/collab/chatter.d.ts +54 -0
  10. package/dist/collab/chatter.d.ts.map +1 -0
  11. package/dist/collab/chatter.js +94 -0
  12. package/dist/collab/chatter.js.map +1 -0
  13. package/dist/collab/dag.d.ts +27 -0
  14. package/dist/collab/dag.d.ts.map +1 -0
  15. package/dist/collab/dag.js +107 -0
  16. package/dist/collab/dag.js.map +1 -0
  17. package/dist/collab/negotiation.d.ts +60 -0
  18. package/dist/collab/negotiation.d.ts.map +1 -0
  19. package/dist/collab/negotiation.js +90 -0
  20. package/dist/collab/negotiation.js.map +1 -0
  21. package/dist/collab/tree.d.ts +39 -0
  22. package/dist/collab/tree.d.ts.map +1 -0
  23. package/dist/collab/tree.js +177 -0
  24. package/dist/collab/tree.js.map +1 -0
  25. package/dist/config.d.ts +123 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +206 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/index.d.ts +33 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +40 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/join.d.ts +50 -0
  34. package/dist/join.d.ts.map +1 -0
  35. package/dist/join.js +167 -0
  36. package/dist/join.js.map +1 -0
  37. package/dist/jointoken.d.ts +144 -0
  38. package/dist/jointoken.d.ts.map +1 -0
  39. package/dist/jointoken.js +472 -0
  40. package/dist/jointoken.js.map +1 -0
  41. package/dist/model.d.ts +64 -0
  42. package/dist/model.d.ts.map +1 -0
  43. package/dist/model.js +158 -0
  44. package/dist/model.js.map +1 -0
  45. package/dist/onboard.d.ts +90 -0
  46. package/dist/onboard.d.ts.map +1 -0
  47. package/dist/onboard.js +510 -0
  48. package/dist/onboard.js.map +1 -0
  49. package/dist/protocol/envelope.d.ts +94 -0
  50. package/dist/protocol/envelope.d.ts.map +1 -0
  51. package/dist/protocol/envelope.js +169 -0
  52. package/dist/protocol/envelope.js.map +1 -0
  53. package/dist/protocol/events.d.ts +51 -0
  54. package/dist/protocol/events.d.ts.map +1 -0
  55. package/dist/protocol/events.js +87 -0
  56. package/dist/protocol/events.js.map +1 -0
  57. package/dist/qr.d.ts +15 -0
  58. package/dist/qr.d.ts.map +1 -0
  59. package/dist/qr.js +52 -0
  60. package/dist/qr.js.map +1 -0
  61. package/dist/quickstart.d.ts +167 -0
  62. package/dist/quickstart.d.ts.map +1 -0
  63. package/dist/quickstart.js +482 -0
  64. package/dist/quickstart.js.map +1 -0
  65. package/dist/quota.d.ts +41 -0
  66. package/dist/quota.d.ts.map +1 -0
  67. package/dist/quota.js +84 -0
  68. package/dist/quota.js.map +1 -0
  69. package/dist/runtime/agent.d.ts +100 -0
  70. package/dist/runtime/agent.d.ts.map +1 -0
  71. package/dist/runtime/agent.js +260 -0
  72. package/dist/runtime/agent.js.map +1 -0
  73. package/dist/runtime/executor.d.ts +42 -0
  74. package/dist/runtime/executor.d.ts.map +1 -0
  75. package/dist/runtime/executor.js +87 -0
  76. package/dist/runtime/executor.js.map +1 -0
  77. package/dist/runtime/fairness.d.ts +25 -0
  78. package/dist/runtime/fairness.d.ts.map +1 -0
  79. package/dist/runtime/fairness.js +79 -0
  80. package/dist/runtime/fairness.js.map +1 -0
  81. package/dist/runtime/node.d.ts +91 -0
  82. package/dist/runtime/node.d.ts.map +1 -0
  83. package/dist/runtime/node.js +203 -0
  84. package/dist/runtime/node.js.map +1 -0
  85. package/dist/runtime/openchamber-http.d.ts +27 -0
  86. package/dist/runtime/openchamber-http.d.ts.map +1 -0
  87. package/dist/runtime/openchamber-http.js +118 -0
  88. package/dist/runtime/openchamber-http.js.map +1 -0
  89. package/dist/runtime/openchamber.d.ts +38 -0
  90. package/dist/runtime/openchamber.d.ts.map +1 -0
  91. package/dist/runtime/openchamber.js +43 -0
  92. package/dist/runtime/openchamber.js.map +1 -0
  93. package/dist/runtime/planner.d.ts +23 -0
  94. package/dist/runtime/planner.d.ts.map +1 -0
  95. package/dist/runtime/planner.js +17 -0
  96. package/dist/runtime/planner.js.map +1 -0
  97. package/dist/runtime/worker.d.ts +96 -0
  98. package/dist/runtime/worker.d.ts.map +1 -0
  99. package/dist/runtime/worker.js +296 -0
  100. package/dist/runtime/worker.js.map +1 -0
  101. package/dist/security.d.ts +462 -0
  102. package/dist/security.d.ts.map +1 -0
  103. package/dist/security.js +1197 -0
  104. package/dist/security.js.map +1 -0
  105. package/dist/store/daemon-store.d.ts +33 -0
  106. package/dist/store/daemon-store.d.ts.map +1 -0
  107. package/dist/store/daemon-store.js +115 -0
  108. package/dist/store/daemon-store.js.map +1 -0
  109. package/dist/store/file-store.d.ts +22 -0
  110. package/dist/store/file-store.d.ts.map +1 -0
  111. package/dist/store/file-store.js +63 -0
  112. package/dist/store/file-store.js.map +1 -0
  113. package/dist/store/mebular-store.d.ts +22 -0
  114. package/dist/store/mebular-store.d.ts.map +1 -0
  115. package/dist/store/mebular-store.js +53 -0
  116. package/dist/store/mebular-store.js.map +1 -0
  117. package/dist/store/message-store.d.ts +26 -0
  118. package/dist/store/message-store.d.ts.map +1 -0
  119. package/dist/store/message-store.js +51 -0
  120. package/dist/store/message-store.js.map +1 -0
  121. package/dist/surface.d.ts +43 -0
  122. package/dist/surface.d.ts.map +1 -0
  123. package/dist/surface.js +515 -0
  124. package/dist/surface.js.map +1 -0
  125. package/dist/transport/null.d.ts +7 -0
  126. package/dist/transport/null.d.ts.map +1 -0
  127. package/dist/transport/null.js +16 -0
  128. package/dist/transport/null.js.map +1 -0
  129. package/dist/transport/spool.d.ts +12 -0
  130. package/dist/transport/spool.d.ts.map +1 -0
  131. package/dist/transport/spool.js +54 -0
  132. package/dist/transport/spool.js.map +1 -0
  133. package/dist/transport/types.d.ts +21 -0
  134. package/dist/transport/types.d.ts.map +1 -0
  135. package/dist/transport/types.js +6 -0
  136. package/dist/transport/types.js.map +1 -0
  137. package/dist/version.json +6 -0
  138. package/package.json +37 -4
  139. package/protocol/collab.example.json +23 -0
  140. package/protocol/daemon-home.example.json +66 -0
  141. package/protocol/envelope.example.json +12 -0
  142. package/protocol/state-machine.json +14 -0
  143. package/protocol/task-tree.example.json +72 -0
  144. package/src/agentdir.ts +138 -0
  145. package/src/cli.ts +1192 -0
  146. package/src/collab/chatter.ts +116 -0
  147. package/src/collab/dag.ts +124 -0
  148. package/src/collab/negotiation.ts +130 -0
  149. package/src/collab/tree.ts +184 -0
  150. package/src/config.ts +286 -0
  151. package/src/index.ts +39 -0
  152. package/src/join.ts +227 -0
  153. package/src/jointoken.ts +609 -0
  154. package/src/model.ts +203 -0
  155. package/src/onboard.ts +601 -0
  156. package/src/protocol/envelope.ts +228 -0
  157. package/src/protocol/events.ts +135 -0
  158. package/src/qr.ts +68 -0
  159. package/src/quickstart.ts +632 -0
  160. package/src/quota.ts +112 -0
  161. package/src/runtime/agent.ts +313 -0
  162. package/src/runtime/executor.ts +114 -0
  163. package/src/runtime/fairness.ts +90 -0
  164. package/src/runtime/node.ts +250 -0
  165. package/src/runtime/openchamber-http.ts +137 -0
  166. package/src/runtime/openchamber.ts +66 -0
  167. package/src/runtime/planner.ts +36 -0
  168. package/src/runtime/worker.ts +354 -0
  169. package/src/security.ts +1660 -0
  170. package/src/store/daemon-store.ts +144 -0
  171. package/src/store/file-store.ts +75 -0
  172. package/src/store/mebular-store.ts +66 -0
  173. package/src/store/message-store.ts +62 -0
  174. package/src/surface.ts +535 -0
  175. package/src/transport/null.ts +20 -0
  176. package/src/transport/spool.ts +62 -0
  177. package/src/transport/types.ts +27 -0
  178. package/README.md +0 -3
@@ -0,0 +1,39 @@
1
+ import type { TaskState } from '../model.js';
2
+ import type { TaskEvent } from '../protocol/events.js';
3
+ import { type TaskBudget, type TaskDispatch } from '../protocol/envelope.js';
4
+ export type TreeViolationReason = 'BUDGET_EXCEEDED' | 'CHAIN_TOO_DEEP' | 'TOO_MANY_CHILDREN' | 'TOO_MANY_TASKS' | 'ROOT_ONLY';
5
+ export interface TreeViolation {
6
+ taskId: string;
7
+ reason: TreeViolationReason;
8
+ detail?: string;
9
+ }
10
+ /** 父任务的“剩余预算”:每下一层 `maxDepth`/`maxTasks` 各减一(越深越小)。 */
11
+ export declare function remainingBudget(parent: TaskBudget): TaskBudget;
12
+ /** 子任务**实际生效**预算:声明值优先;未声明则按父剩余推导;root 无声明用默认。 */
13
+ export declare function effectiveBudget(state: TaskState, byId: ReadonlyMap<string, TaskState>, seen?: Set<string>): TaskBudget;
14
+ /** 深度(祖先数):root=0;按 `causedBy` 递归(带环保护)。 */
15
+ export declare function depthOf(state: TaskState, byId: ReadonlyMap<string, TaskState>, seen?: Set<string>): number;
16
+ /** root 派发策略:沿 `causedBy` 找到 root 的 `dispatch`(缺省 `children-ok`)。 */
17
+ export declare function rootDispatch(state: TaskState, byId: ReadonlyMap<string, TaskState>): TaskDispatch;
18
+ /** 全树不变式:返回违规列表(按 taskId 确定序;空 = 全部合法)。 */
19
+ export declare function treeViolations(states: readonly TaskState[]): TreeViolation[];
20
+ /**
21
+ * 权威视图的**可采纳任务集**:剔除违反树不变式的任务(越预算/越链长/root-only…)。
22
+ * node/worker 的 `states()` 用它过滤,使经**记忆同步**到达的无效 `created` 也不进入权威视图
23
+ * (与传输入口拒收共用同一纯函数,全端一致)。
24
+ */
25
+ export declare function admissibleTaskIds(states: readonly TaskState[]): Set<string>;
26
+ /**
27
+ * 入口准入:把一个候选事件并入后,树不变式是否仍成立(仅 `created` 需判定)。
28
+ * 返回 `{ok:false, reason}` 时,调用方**不得入库**(无效事件)。
29
+ */
30
+ export declare function admitCreated(event: TaskEvent, states: readonly TaskState[], reduceOne: (events: TaskEvent[]) => TaskState | null): {
31
+ ok: true;
32
+ } | {
33
+ ok: false;
34
+ reason: TreeViolationReason;
35
+ detail?: string;
36
+ };
37
+ /** 确定性摊派:等价目标间按 `hash(taskId) mod N`(稳定字典序)。 */
38
+ export declare function deterministicTarget(taskId: string, targets: readonly string[]): string | null;
39
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/collab/tree.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAuB,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAElG,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAM9D;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,cAAoB,GAAG,UAAU,CAQ5H;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,cAAoB,GAAG,MAAM,CAQhH;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CASjG;AAgBD,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,aAAa,EAAE,CAoD5E;AAaD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAG3E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,SAAS,GAAG,IAAI,GACnD;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAQ5E;AAED,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAS7F"}
@@ -0,0 +1,177 @@
1
+ // W1 任务树:**预算随树单调递减** + 链长/派发策略不变式 + 确定性摊派。
2
+ //
3
+ // 纯函数、无墙钟:同一批 `TaskState` 在任何端得到同一判定(全端一致)。
4
+ // 入口(node/worker 接收 `created`)与 reducer 不变式共用 `admitCreated` / `treeViolations`。
5
+ import { DEFAULT_ROOT_BUDGET } from '../protocol/envelope.js';
6
+ /** 父任务的“剩余预算”:每下一层 `maxDepth`/`maxTasks` 各减一(越深越小)。 */
7
+ export function remainingBudget(parent) {
8
+ return {
9
+ maxDepth: Math.max(0, parent.maxDepth - 1),
10
+ maxChildren: parent.maxChildren,
11
+ maxTasks: Math.max(0, parent.maxTasks - 1),
12
+ };
13
+ }
14
+ /** 子任务**实际生效**预算:声明值优先;未声明则按父剩余推导;root 无声明用默认。 */
15
+ export function effectiveBudget(state, byId, seen = new Set()) {
16
+ if (state.budget !== undefined)
17
+ return state.budget;
18
+ const parentId = state.trace.causedBy;
19
+ if (parentId === undefined)
20
+ return DEFAULT_ROOT_BUDGET;
21
+ const parent = byId.get(parentId);
22
+ if (parent === undefined || seen.has(parentId))
23
+ return DEFAULT_ROOT_BUDGET;
24
+ seen.add(state.taskId);
25
+ return remainingBudget(effectiveBudget(parent, byId, seen));
26
+ }
27
+ /** 深度(祖先数):root=0;按 `causedBy` 递归(带环保护)。 */
28
+ export function depthOf(state, byId, seen = new Set()) {
29
+ const parentId = state.trace.causedBy;
30
+ if (parentId === undefined)
31
+ return 0;
32
+ if (seen.has(state.taskId))
33
+ return 0;
34
+ const parent = byId.get(parentId);
35
+ if (parent === undefined)
36
+ return 1; // 父不在集合(尚未到达):按一层看待
37
+ seen.add(state.taskId);
38
+ return 1 + depthOf(parent, byId, seen);
39
+ }
40
+ /** root 派发策略:沿 `causedBy` 找到 root 的 `dispatch`(缺省 `children-ok`)。 */
41
+ export function rootDispatch(state, byId) {
42
+ let current = state;
43
+ const seen = new Set();
44
+ while (current !== undefined && !seen.has(current.taskId)) {
45
+ seen.add(current.taskId);
46
+ if (current.trace.causedBy === undefined)
47
+ return current.dispatch ?? 'children-ok';
48
+ current = byId.get(current.trace.causedBy);
49
+ }
50
+ return 'children-ok';
51
+ }
52
+ function subtreeSize(rootId, childrenOf) {
53
+ let n = 0;
54
+ const stack = [rootId];
55
+ const seen = new Set();
56
+ while (stack.length > 0) {
57
+ const id = stack.pop();
58
+ if (seen.has(id))
59
+ continue;
60
+ seen.add(id);
61
+ n += 1;
62
+ for (const child of childrenOf.get(id) ?? [])
63
+ stack.push(child);
64
+ }
65
+ return n;
66
+ }
67
+ /** 全树不变式:返回违规列表(按 taskId 确定序;空 = 全部合法)。 */
68
+ export function treeViolations(states) {
69
+ const byId = new Map(states.map((s) => [s.taskId, s]));
70
+ const childrenOf = new Map();
71
+ for (const s of states) {
72
+ const parent = s.trace.causedBy;
73
+ if (parent === undefined)
74
+ continue;
75
+ const list = childrenOf.get(parent);
76
+ if (list)
77
+ list.push(s.taskId);
78
+ else
79
+ childrenOf.set(parent, [s.taskId]);
80
+ }
81
+ for (const list of childrenOf.values())
82
+ list.sort();
83
+ const violations = [];
84
+ for (const state of [...states].sort((a, b) => (a.taskId < b.taskId ? -1 : 1))) {
85
+ const parentId = state.trace.causedBy;
86
+ if (parentId === undefined)
87
+ continue; // root:默认预算已上界,无需逐条判定
88
+ const parent = byId.get(parentId);
89
+ if (parent === undefined)
90
+ continue; // 父未知:无法判定(到达后重估)
91
+ const parentEff = effectiveBudget(parent, byId);
92
+ const remain = remainingBudget(parentEff);
93
+ const childEff = effectiveBudget(state, byId);
94
+ if (childEff.maxDepth > remain.maxDepth || childEff.maxTasks > remain.maxTasks || childEff.maxChildren > remain.maxChildren) {
95
+ violations.push({ taskId: state.taskId, reason: 'BUDGET_EXCEEDED', detail: `${JSON.stringify(childEff)} > ${JSON.stringify(remain)}` });
96
+ }
97
+ const rootState = rootOf(state, byId);
98
+ const rootEff = rootState !== undefined ? effectiveBudget(rootState, byId) : DEFAULT_ROOT_BUDGET;
99
+ if (depthOf(state, byId) > rootEff.maxDepth) {
100
+ violations.push({ taskId: state.taskId, reason: 'CHAIN_TOO_DEEP', detail: `depth=${depthOf(state, byId)} > ${rootEff.maxDepth}` });
101
+ }
102
+ if (rootDispatch(state, byId) === 'root-only') {
103
+ violations.push({ taskId: state.taskId, reason: 'ROOT_ONLY', detail: 'dispatch=root-only' });
104
+ }
105
+ const direct = childrenOf.get(parentId)?.length ?? 0;
106
+ if (direct > parentEff.maxChildren) {
107
+ violations.push({ taskId: parentId, reason: 'TOO_MANY_CHILDREN', detail: `${direct} > ${parentEff.maxChildren}` });
108
+ }
109
+ }
110
+ // 子树总量:对每个 root 检查
111
+ for (const s of states) {
112
+ if (s.trace.causedBy !== undefined)
113
+ continue;
114
+ const eff = effectiveBudget(s, byId);
115
+ const size = subtreeSize(s.taskId, childrenOf);
116
+ if (size > eff.maxTasks)
117
+ violations.push({ taskId: s.taskId, reason: 'TOO_MANY_TASKS', detail: `${size} > ${eff.maxTasks}` });
118
+ }
119
+ // 去重(同一 taskId+reason)
120
+ const seen = new Set();
121
+ return violations.filter((v) => {
122
+ const key = `${v.taskId}|${v.reason}`;
123
+ if (seen.has(key))
124
+ return false;
125
+ seen.add(key);
126
+ return true;
127
+ });
128
+ }
129
+ function rootOf(state, byId) {
130
+ let current = state;
131
+ const seen = new Set();
132
+ while (current !== undefined && !seen.has(current.taskId)) {
133
+ seen.add(current.taskId);
134
+ if (current.trace.causedBy === undefined)
135
+ return current;
136
+ current = byId.get(current.trace.causedBy);
137
+ }
138
+ return undefined;
139
+ }
140
+ /**
141
+ * 权威视图的**可采纳任务集**:剔除违反树不变式的任务(越预算/越链长/root-only…)。
142
+ * node/worker 的 `states()` 用它过滤,使经**记忆同步**到达的无效 `created` 也不进入权威视图
143
+ * (与传输入口拒收共用同一纯函数,全端一致)。
144
+ */
145
+ export function admissibleTaskIds(states) {
146
+ const bad = new Set(treeViolations(states).map((v) => v.taskId));
147
+ return new Set(states.map((s) => s.taskId).filter((id) => !bad.has(id)));
148
+ }
149
+ /**
150
+ * 入口准入:把一个候选事件并入后,树不变式是否仍成立(仅 `created` 需判定)。
151
+ * 返回 `{ok:false, reason}` 时,调用方**不得入库**(无效事件)。
152
+ */
153
+ export function admitCreated(event, states, reduceOne) {
154
+ if (event.type !== 'created')
155
+ return { ok: true };
156
+ const state = reduceOne([event]);
157
+ if (state === null)
158
+ return { ok: false, reason: 'CHAIN_TOO_DEEP', detail: 'created 事件无法归约' };
159
+ const violations = treeViolations([...states, state]).filter((v) => v.taskId === event.taskId);
160
+ if (violations.length === 0)
161
+ return { ok: true };
162
+ const first = violations[0];
163
+ return { ok: false, reason: first.reason, ...(first.detail !== undefined ? { detail: first.detail } : {}) };
164
+ }
165
+ /** 确定性摊派:等价目标间按 `hash(taskId) mod N`(稳定字典序)。 */
166
+ export function deterministicTarget(taskId, targets) {
167
+ if (targets.length === 0)
168
+ return null;
169
+ const sorted = [...targets].sort();
170
+ let h = 2166136261;
171
+ for (let i = 0; i < taskId.length; i++) {
172
+ h ^= taskId.charCodeAt(i);
173
+ h = Math.imul(h, 16777619);
174
+ }
175
+ return sorted[Math.abs(h) % sorted.length];
176
+ }
177
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/collab/tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 平台策略:POSIX mode 位是否构成有效保护。
3
+ *
4
+ * **Windows 上不成立**(`chmod`/`mode` 只有只读位语义,`stat().mode` 恒为 0666/0444),
5
+ * 因此 doctor 在 win32 上对权限项**显式 SKIP**(写入 `skipped`),而不是对 0666 判 FAIL。
6
+ * 威胁模型差异见 `ONBOARDING.md` 的 Windows 章节:Windows 依赖用户配置目录的 ACL
7
+ * (`%USERPROFILE%` 默认仅本人可读)与 OS 会话边界,等价性由平台保证而非 fleet 断言。
8
+ *
9
+ * 参数可注入(默认 `process.platform`),便于在任意平台确定性地测试两种分支。
10
+ */
11
+ export declare function permissionsApplicable(platform?: string): boolean;
12
+ /** core `Mebular` 需要的加密材料(用户主密钥)。令牌加入的设备**只有主公钥**(无主私钥)。 */
13
+ export interface FleetEncryption {
14
+ userMasterKey: Uint8Array;
15
+ userMasterPrivateKey?: CryptoKey;
16
+ }
17
+ /** 生成 Ed25519 用户主密钥。 */
18
+ export declare function generateMasterKey(): Promise<FleetEncryption>;
19
+ /** 写入主密钥文件(0600)。无主私钥(令牌加入设备)时只写主公钥。 */
20
+ export declare function writeMasterKeyFile(path: string, encryption: FleetEncryption): Promise<void>;
21
+ /** 读取主密钥文件(不校验权限;权限由 doctor 断言)。 */
22
+ export declare function readMasterKeyFile(path: string): Promise<FleetEncryption>;
23
+ /** 文件权限(低 9 位八进制)。 */
24
+ export declare function fileMode(path: string): Promise<number>;
25
+ export type FleetAgentKind = 'echo' | 'command' | 'hermes' | 'openchamber';
26
+ export interface FleetAgentConfig {
27
+ name: string;
28
+ kind: FleetAgentKind;
29
+ /** kind=command 时的可执行文件 */
30
+ command?: string;
31
+ baseArgs?: string[];
32
+ timeoutMs?: number;
33
+ concurrency?: number;
34
+ }
35
+ export interface FleetPeerConfig {
36
+ device: string;
37
+ /** 可选 multiaddr(用于拨号;缺省则等待对端拨入) */
38
+ addr?: string;
39
+ }
40
+ export interface FleetConfig {
41
+ v: 1;
42
+ device: string;
43
+ dir: string;
44
+ storagePath: string;
45
+ masterKeyFile: string;
46
+ namespace: string;
47
+ /** 本机监听 multiaddr(libp2p) */
48
+ listen: string;
49
+ /** 已登记对端(地址簿;连接准入由 peerWhitelist/信任链决定) */
50
+ peers: FleetPeerConfig[];
51
+ /** 本机 agent 注册表(按 to.agent 名路由) */
52
+ agents: FleetAgentConfig[];
53
+ quotaLimitPerDevice?: number;
54
+ /**
55
+ * join 服务(T2):`fleet node` 启动最小 HTTP 端点 `POST /mebular/join` 以签发委派证书。
56
+ * 令牌是 bearer 凭据(短 TTL + 一次性 nonce);建议仅在 LAN 绑定。
57
+ */
58
+ joinService?: {
59
+ enabled: boolean;
60
+ bind?: string;
61
+ port?: number;
62
+ };
63
+ /**
64
+ * W2 存储模式:`daemon`(默认于统一上车;走守护 app 接口,fleet 客户端化)/ `embedded`(**仅测试/CI**)。
65
+ * 缺省(未设)= `embedded`,以保持既有测试/验收不变;`quickstart` 会写 `daemon`。
66
+ */
67
+ store?: 'daemon' | 'embedded';
68
+ /** W2 守护 app 端点与令牌(daemon 模式必需) */
69
+ daemon?: {
70
+ endpoint: string;
71
+ token?: string;
72
+ tokenFile?: string;
73
+ };
74
+ }
75
+ export declare const fleetConfigPath: (dir: string) => string;
76
+ export declare const fleetMasterKeyPath: (dir: string) => string;
77
+ export declare const fleetStoragePath: (dir: string) => string;
78
+ /** 校验配置;返回错误列表(空 = 合法)。 */
79
+ export declare function validateFleetConfig(input: unknown): string[];
80
+ /**
81
+ * 解析 `--agent name:kind[,name:kind…]`(+ `--agent-command` / `--agent-base-args`)。
82
+ * `command` agent 一律经调用方给定的 `command`(推荐 `process.execPath`)+ `baseArgs`
83
+ * (如 fixture 路径)调用——**不依赖 shebang/可执行位**,Windows 亦然。
84
+ */
85
+ export declare function parseAgentSpecs(value: string, options?: {
86
+ command?: string;
87
+ baseArgs?: readonly string[];
88
+ }): FleetAgentConfig[];
89
+ /** 保存配置(0600)。 */
90
+ export declare function saveFleetConfig(path: string, config: FleetConfig): Promise<void>;
91
+ /** 加载配置(形状非法即抛错)。 */
92
+ export declare function loadFleetConfig(path: string): Promise<FleetConfig>;
93
+ /**
94
+ * F-UNI:任务工具的 home 适配——两种布局都支持:
95
+ * 1) fleet home:`<dir>/fleet.config.json`(本机 fleet 设备)
96
+ * 2) **守护 home**:`<dir>/config.json`(`mebular serve`,含 root/delegated 两种身份)
97
+ * 由守护发起 `mebular mcp` 时 home 是守护 home,故这里把守护配置映射为等价 FleetConfig;
98
+ * 业务逻辑(session/工具 handler)保持**唯一**在 fleet 侧。
99
+ */
100
+ export declare function daemonConfigToFleet(dir: string, cfg: Record<string, unknown>): FleetConfig;
101
+ /** 读任务工具上下文配置:优先 fleet.config.json,否则按守护 config.json 适配。 */
102
+ export declare function loadToolConfig(dir: string): Promise<FleetConfig>;
103
+ export interface OnboardInput {
104
+ dir: string;
105
+ device: string;
106
+ /** 已存在的用户主密钥文件(导入);不给则生成 */
107
+ masterKeyFile?: string;
108
+ peerDevice?: string;
109
+ peerAddr?: string;
110
+ namespace?: string;
111
+ listen?: string;
112
+ agents?: FleetAgentConfig[];
113
+ quotaLimitPerDevice?: number;
114
+ }
115
+ export interface OnboardResult {
116
+ config: FleetConfig;
117
+ alreadyOnboarded: boolean;
118
+ masterKeyCreated: boolean;
119
+ masterKeyFingerprint: string;
120
+ }
121
+ /** 主密钥指纹(sha256 前 12 hex;**非密钥材料**,可安全展示/用于匹配)。 */
122
+ export declare function masterKeyFingerprint(publicKey: Uint8Array): string;
123
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,MAAyB,GAAG,OAAO,CAElF;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,UAAU,CAAC;IAC1B,oBAAoB,CAAC,EAAE,SAAS,CAAC;CAClC;AAED,wBAAwB;AACxB,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,CAAC,CAIlE;AAED,wCAAwC;AACxC,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAajG;AAED,oCAAoC;AACpC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuB9E;AAED,sBAAsB;AACtB,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,mCAAmC;IACnC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,mCAAmC;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAwC,CAAC;AACvF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,MAAsC,CAAC;AACxF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,MAAkC,CAAC;AAElF,2BAA2B;AAC3B,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAiC5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GAC/D,gBAAgB,EAAE,CAcpB;AAED,kBAAkB;AAClB,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF;AAED,qBAAqB;AACrB,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CA8B1F;AAED,4DAA4D;AAC5D,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAStE;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAElE"}
package/dist/config.js ADDED
@@ -0,0 +1,206 @@
1
+ // Fleet 设备配置与用户主密钥 IO(Step 1b):全部 **0600**、默认脱敏、绝不回显密钥材料。
2
+ //
3
+ // 目录(device home)权限 0700;配置文件 `fleet.config.json`;主密钥 `master-key.json`;
4
+ // 事件存储 `store.jsonl`(设备身份 `store.jsonl.identity.json` 由 core 落盘)。
5
+ import { existsSync } from 'node:fs';
6
+ import { chmod, mkdir, readFile, stat, writeFile } from 'node:fs/promises';
7
+ import { createHash } from 'node:crypto';
8
+ import { basename, dirname, join } from 'node:path';
9
+ const SUBTLE = globalThis.crypto.subtle;
10
+ /**
11
+ * 平台策略:POSIX mode 位是否构成有效保护。
12
+ *
13
+ * **Windows 上不成立**(`chmod`/`mode` 只有只读位语义,`stat().mode` 恒为 0666/0444),
14
+ * 因此 doctor 在 win32 上对权限项**显式 SKIP**(写入 `skipped`),而不是对 0666 判 FAIL。
15
+ * 威胁模型差异见 `ONBOARDING.md` 的 Windows 章节:Windows 依赖用户配置目录的 ACL
16
+ * (`%USERPROFILE%` 默认仅本人可读)与 OS 会话边界,等价性由平台保证而非 fleet 断言。
17
+ *
18
+ * 参数可注入(默认 `process.platform`),便于在任意平台确定性地测试两种分支。
19
+ */
20
+ export function permissionsApplicable(platform = process.platform) {
21
+ return platform !== 'win32';
22
+ }
23
+ /** 生成 Ed25519 用户主密钥。 */
24
+ export async function generateMasterKey() {
25
+ const keyPair = (await SUBTLE.generateKey({ name: 'Ed25519' }, true, ['sign', 'verify']));
26
+ const userMasterKey = new Uint8Array(await SUBTLE.exportKey('raw', keyPair.publicKey));
27
+ return { userMasterKey, userMasterPrivateKey: keyPair.privateKey };
28
+ }
29
+ /** 写入主密钥文件(0600)。无主私钥(令牌加入设备)时只写主公钥。 */
30
+ export async function writeMasterKeyFile(path, encryption) {
31
+ const record = {
32
+ v: 1,
33
+ alg: 'Ed25519',
34
+ publicKey: Buffer.from(encryption.userMasterKey).toString('base64'),
35
+ };
36
+ if (encryption.userMasterPrivateKey !== undefined) {
37
+ const pkcs8 = new Uint8Array(await SUBTLE.exportKey('pkcs8', encryption.userMasterPrivateKey));
38
+ record.privateKeyPkcs8 = Buffer.from(pkcs8).toString('base64');
39
+ }
40
+ await mkdir(dirname(path), { recursive: true });
41
+ await writeFile(path, JSON.stringify(record), { mode: 0o600 });
42
+ if (permissionsApplicable())
43
+ await chmod(path, 0o600);
44
+ }
45
+ /** 读取主密钥文件(不校验权限;权限由 doctor 断言)。 */
46
+ export async function readMasterKeyFile(path) {
47
+ const parsed = JSON.parse(await readFile(path, 'utf-8'));
48
+ // 容忍缺省 `v`:`mebular` 侧生成的主密钥文件(<home>/user-master-key.json)不带版本字段。
49
+ if ((parsed.v !== undefined && parsed.v !== 1) || typeof parsed.publicKey !== 'string') {
50
+ throw new Error('master key file: 形状非法');
51
+ }
52
+ if (parsed.privateKeyPkcs8 === undefined) {
53
+ // 令牌加入设备:只有主公钥(无主私钥),用于验证对端/设备证书链。
54
+ return { userMasterKey: new Uint8Array(Buffer.from(parsed.publicKey, 'base64')) };
55
+ }
56
+ const userMasterKey = new Uint8Array(Buffer.from(parsed.publicKey, 'base64'));
57
+ const userMasterPrivateKey = await SUBTLE.importKey('pkcs8', Buffer.from(parsed.privateKeyPkcs8, 'base64'), { name: 'Ed25519' }, true, ['sign']);
58
+ return { userMasterKey, userMasterPrivateKey };
59
+ }
60
+ /** 文件权限(低 9 位八进制)。 */
61
+ export async function fileMode(path) {
62
+ return (await stat(path)).mode & 0o777;
63
+ }
64
+ export const fleetConfigPath = (dir) => join(dir, 'fleet.config.json');
65
+ export const fleetMasterKeyPath = (dir) => join(dir, 'master-key.json');
66
+ export const fleetStoragePath = (dir) => join(dir, 'store.jsonl');
67
+ /** 校验配置;返回错误列表(空 = 合法)。 */
68
+ export function validateFleetConfig(input) {
69
+ const errors = [];
70
+ if (typeof input !== 'object' || input === null || Array.isArray(input))
71
+ return ['config 必须是对象'];
72
+ const c = input;
73
+ if (c.v !== 1)
74
+ errors.push('v 必须为 1');
75
+ for (const key of ['device', 'dir', 'storagePath', 'masterKeyFile', 'namespace', 'listen']) {
76
+ if (typeof c[key] !== 'string' || c[key].length === 0)
77
+ errors.push(`${key} 必须为非空字符串`);
78
+ }
79
+ if (!Array.isArray(c.peers))
80
+ errors.push('peers 必须为数组');
81
+ if (c.store !== undefined && c.store !== 'daemon' && c.store !== 'embedded')
82
+ errors.push('store 必须为 daemon|embedded');
83
+ if (c.daemon !== undefined) {
84
+ const d = c.daemon;
85
+ if (typeof d !== 'object' || d === null || typeof d.endpoint !== 'string' || d.endpoint.length === 0)
86
+ errors.push('daemon.endpoint 必填');
87
+ else if (d.token !== undefined && typeof d.token !== 'string')
88
+ errors.push('daemon.token 非法');
89
+ else if (d.tokenFile !== undefined && typeof d.tokenFile !== 'string')
90
+ errors.push('daemon.tokenFile 非法');
91
+ }
92
+ if (c.joinService !== undefined) {
93
+ const js = c.joinService;
94
+ if (typeof js !== 'object' || js === null || typeof js.enabled !== 'boolean')
95
+ errors.push('joinService 形状非法');
96
+ else if (js.port !== undefined && (typeof js.port !== 'number' || js.port < 0 || js.port > 65535))
97
+ errors.push('joinService.port 非法');
98
+ else if (js.bind !== undefined && typeof js.bind !== 'string')
99
+ errors.push('joinService.bind 非法');
100
+ }
101
+ if (!Array.isArray(c.agents) || c.agents.length === 0)
102
+ errors.push('agents 必须为非空数组');
103
+ for (const agent of (Array.isArray(c.agents) ? c.agents : [])) {
104
+ if (typeof agent?.name !== 'string' || agent.name.length === 0)
105
+ errors.push('agent.name 非法');
106
+ if (!['echo', 'command', 'hermes', 'openchamber'].includes(String(agent?.kind))) {
107
+ errors.push(`agent.kind 非法:${String(agent?.kind)}`);
108
+ }
109
+ if (agent?.kind === 'command' && (typeof agent.command !== 'string' || agent.command.length === 0)) {
110
+ errors.push('command agent 需要 command');
111
+ }
112
+ }
113
+ return errors;
114
+ }
115
+ /**
116
+ * 解析 `--agent name:kind[,name:kind…]`(+ `--agent-command` / `--agent-base-args`)。
117
+ * `command` agent 一律经调用方给定的 `command`(推荐 `process.execPath`)+ `baseArgs`
118
+ * (如 fixture 路径)调用——**不依赖 shebang/可执行位**,Windows 亦然。
119
+ */
120
+ export function parseAgentSpecs(value, options = {}) {
121
+ return value
122
+ .split(',')
123
+ .map((entry) => entry.trim())
124
+ .filter((entry) => entry.length > 0)
125
+ .map((entry) => {
126
+ const [name, kind] = entry.split(':');
127
+ const agent = { name: name || 'echo', kind: kind || 'echo' };
128
+ if (agent.kind === 'command') {
129
+ if (options.command !== undefined)
130
+ agent.command = options.command;
131
+ if (options.baseArgs !== undefined && options.baseArgs.length > 0)
132
+ agent.baseArgs = [...options.baseArgs];
133
+ }
134
+ return agent;
135
+ });
136
+ }
137
+ /** 保存配置(0600)。 */
138
+ export async function saveFleetConfig(path, config) {
139
+ await mkdir(dirname(path), { recursive: true });
140
+ await writeFile(path, JSON.stringify(config, null, 2), { mode: 0o600 });
141
+ if (permissionsApplicable())
142
+ await chmod(path, 0o600);
143
+ }
144
+ /** 加载配置(形状非法即抛错)。 */
145
+ export async function loadFleetConfig(path) {
146
+ const parsed = JSON.parse(await readFile(path, 'utf-8'));
147
+ const errors = validateFleetConfig(parsed);
148
+ if (errors.length > 0)
149
+ throw new Error(`config 非法:${errors.join('; ')}`);
150
+ return parsed;
151
+ }
152
+ /**
153
+ * F-UNI:任务工具的 home 适配——两种布局都支持:
154
+ * 1) fleet home:`<dir>/fleet.config.json`(本机 fleet 设备)
155
+ * 2) **守护 home**:`<dir>/config.json`(`mebular serve`,含 root/delegated 两种身份)
156
+ * 由守护发起 `mebular mcp` 时 home 是守护 home,故这里把守护配置映射为等价 FleetConfig;
157
+ * 业务逻辑(session/工具 handler)保持**唯一**在 fleet 侧。
158
+ */
159
+ export function daemonConfigToFleet(dir, cfg) {
160
+ const encryption = (cfg.encryption ?? {});
161
+ const sync = (cfg.sync ?? {});
162
+ const network = (cfg.network ?? {});
163
+ const libp2p = (network.libp2p ?? {});
164
+ const namespaces = Array.isArray(sync.namespaces) ? sync.namespaces.filter((s) => typeof s === 'string' && s.length > 0) : [];
165
+ const listen = Array.isArray(libp2p.listen) && typeof libp2p.listen[0] === 'string' ? libp2p.listen[0] : '/ip4/0.0.0.0/tcp/4001';
166
+ const peers = (Array.isArray(network.peers) ? network.peers : [])
167
+ .filter((p) => typeof p === 'object' && p !== null && typeof p.device === 'string')
168
+ .map((p) => ({ device: String(p.device), ...(typeof p.addr === 'string' && p.addr.length > 0 ? { addr: p.addr } : {}) }));
169
+ const storagePath = typeof cfg.storagePath === 'string' && cfg.storagePath.length > 0 ? cfg.storagePath : join(dir, 'store.jsonl');
170
+ const masterKeyFile = typeof encryption.userMasterPublicKeyFile === 'string' && encryption.userMasterPublicKeyFile.length > 0
171
+ ? encryption.userMasterPublicKeyFile
172
+ : typeof encryption.keyFile === 'string' && encryption.keyFile.length > 0
173
+ ? encryption.keyFile
174
+ : join(dir, 'user-master-key.json');
175
+ const device = typeof cfg.deviceId === 'string' && cfg.deviceId.length > 0 ? cfg.deviceId : `device-${basename(dir) || 'local'}`;
176
+ return {
177
+ v: 1,
178
+ device,
179
+ dir,
180
+ storagePath,
181
+ masterKeyFile,
182
+ namespace: namespaces[0] ?? 'tasks',
183
+ listen,
184
+ peers,
185
+ // 守护侧只作任务板(board),不注册执行型 agent;占位满足校验(kind 属合法枚举)
186
+ agents: [{ name: 'board', kind: 'echo' }],
187
+ ...(typeof cfg.quotaLimitPerDevice === 'number' ? { quotaLimitPerDevice: cfg.quotaLimitPerDevice } : {}),
188
+ };
189
+ }
190
+ /** 读任务工具上下文配置:优先 fleet.config.json,否则按守护 config.json 适配。 */
191
+ export async function loadToolConfig(dir) {
192
+ const fleetPath = fleetConfigPath(dir);
193
+ if (existsSync(fleetPath))
194
+ return loadFleetConfig(fleetPath);
195
+ const daemonPath = join(dir, 'config.json');
196
+ if (!existsSync(daemonPath)) {
197
+ throw new Error(`缺少配置:${fleetPath} 与 ${daemonPath} 均不存在(需要 fleet.config.json 或守护 config.json)`);
198
+ }
199
+ const raw = JSON.parse(await readFile(daemonPath, 'utf-8'));
200
+ return daemonConfigToFleet(dir, raw);
201
+ }
202
+ /** 主密钥指纹(sha256 前 12 hex;**非密钥材料**,可安全展示/用于匹配)。 */
203
+ export function masterKeyFingerprint(publicKey) {
204
+ return `sha256:${createHash('sha256').update(publicKey).digest('hex').slice(0, 12)}`;
205
+ }
206
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export * from './protocol/envelope.js';
2
+ export * from './protocol/events.js';
3
+ export * from './model.js';
4
+ export * from './quota.js';
5
+ export * from './agentdir.js';
6
+ export * from './surface.js';
7
+ export * from './config.js';
8
+ export * from './onboard.js';
9
+ export * from './security.js';
10
+ export * from './quickstart.js';
11
+ export * from './jointoken.js';
12
+ export * from './qr.js';
13
+ export * from './join.js';
14
+ export * from './collab/dag.js';
15
+ export * from './collab/tree.js';
16
+ export * from './collab/negotiation.js';
17
+ export * from './collab/chatter.js';
18
+ export * from './transport/types.js';
19
+ export * from './transport/spool.js';
20
+ export * from './transport/null.js';
21
+ export * from './store/file-store.js';
22
+ export * from './store/mebular-store.js';
23
+ export * from './store/message-store.js';
24
+ export * from './store/daemon-store.js';
25
+ export * from './runtime/planner.js';
26
+ export * from './runtime/fairness.js';
27
+ export * from './runtime/executor.js';
28
+ export * from './runtime/agent.js';
29
+ export * from './runtime/openchamber.js';
30
+ export * from './runtime/openchamber-http.js';
31
+ export * from './runtime/node.js';
32
+ export * from './runtime/worker.js';
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}