termdock 1.4.317 → 1.4.318
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.
|
@@ -200,6 +200,9 @@ export class CollaborationStore {
|
|
|
200
200
|
const current = this.getGroup(previous.group.id);
|
|
201
201
|
if (!current || current.deleted || current.federated)
|
|
202
202
|
throw new CollaborationError('GROUP_CREATE_TARGET_UNAVAILABLE', 'Original local group was deleted or changed; this key cannot create a replacement', 409);
|
|
203
|
+
// A previous directory-fsync failure may have committed the key without
|
|
204
|
+
// confirming durability. Reconfirm the current group+key before ACK.
|
|
205
|
+
this.persist(true);
|
|
203
206
|
return structuredClone(previous.group);
|
|
204
207
|
}
|
|
205
208
|
if (Object.keys(this.document.localGroupRequests ?? {}).length >= 2000)
|
|
@@ -10,7 +10,7 @@ export const INTEGRATION_HELP = `td integration — local scoped integration adm
|
|
|
10
10
|
groups | list
|
|
11
11
|
group create --name <name> --idempotency-key <key>
|
|
12
12
|
Administrator only; create an empty local group without a terminal source.
|
|
13
|
-
Minimum CLI/running service 1.4.
|
|
13
|
+
Minimum CLI/running service 1.4.318; admin_local_group_create=true.
|
|
14
14
|
Returns {group: original creation snapshot}; same key/parameters reuse it.
|
|
15
15
|
Groups may later gain members; the snapshot is not their current membership.
|
|
16
16
|
No IDs, members, federation, launch profiles or principal credentials accepted.
|
|
@@ -115,7 +115,7 @@ export async function runIntegrationAdmin(argv, port, adminToken, write) {
|
|
|
115
115
|
throw new CollaborationError('INVALID_GROUP_CREATE_REQUEST', usage, 400);
|
|
116
116
|
const capabilities = parsed(await request(socketPath, 'GET', '/admin/capabilities', undefined, headers(undefined, adminToken)));
|
|
117
117
|
if (capabilities.admin_local_group_create !== true)
|
|
118
|
-
throw new CollaborationError('ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED', 'CLI and running service must support empty local group creation (minimum 1.4.
|
|
118
|
+
throw new CollaborationError('ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED', 'CLI and running service must support empty local group creation (minimum 1.4.318)', 409);
|
|
119
119
|
write(JSON.stringify(parsed(await request(socketPath, 'POST', '/admin/groups', { name: args['--name'], idempotency_key: args['--idempotency-key'] }, headers(undefined, adminToken)))));
|
|
120
120
|
return 0;
|
|
121
121
|
}
|
|
@@ -241,7 +241,7 @@ export class IntegrationRuntime {
|
|
|
241
241
|
session_cold_retry: true, session_cold_retry_min_version: '1.4.314',
|
|
242
242
|
session_rename: true, session_rename_min_version: '1.4.315',
|
|
243
243
|
session_close: true, session_close_min_version: '1.4.315',
|
|
244
|
-
admin_local_group_create: true, admin_local_group_create_min_version: '1.4.
|
|
244
|
+
admin_local_group_create: true, admin_local_group_create_min_version: '1.4.318',
|
|
245
245
|
integration_policy_update: true,
|
|
246
246
|
session_restore_diagnostics: true,
|
|
247
247
|
native_identity_linux_flock_owner: process.platform === 'linux',
|
package/docs/integrations.md
CHANGED
|
@@ -1027,10 +1027,10 @@ TD 生命周期锁不排他控制外部 tmux 命令/手工进程替换,最终
|
|
|
1027
1027
|
共享升级/业务适配由接入方后续验收;维护侧验证仅覆盖隔离测试的真实 tmux/Linux
|
|
1028
1028
|
进程退出与源码回归。macOS 真实 close 路径尚未实机验收。
|
|
1029
1029
|
|
|
1030
|
-
## 1.4.317:管理员幂等创建空本机组
|
|
1030
|
+
## 1.4.317 / 1.4.318:管理员幂等创建空本机组
|
|
1031
1031
|
|
|
1032
|
-
最低 **CLI / 实际服务均为 1.4.
|
|
1033
|
-
`admin_local_group_create=true`、`admin_local_group_create_min_version=1.4.
|
|
1032
|
+
最低 **CLI / 实际服务均为 1.4.318**,协议仍为 1。管理员回读
|
|
1033
|
+
`admin_local_group_create=true`、`admin_local_group_create_min_version=1.4.318`;
|
|
1034
1034
|
旧服务缺少能力时 CLI 返回 `ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED`,不回退到终端
|
|
1035
1035
|
成员来源、网页裸 HTTP 或私有文件写入。
|
|
1036
1036
|
|
|
@@ -1060,13 +1060,15 @@ API 名称非法返回 `INVALID_GROUP`,key 非法返回 `INVALID_IDEMPOTENCY_K
|
|
|
1060
1060
|
授权、业务调度或三模型创建。**组创建与后续 principal 授权是两步操作,不是一个事务**。
|
|
1061
1061
|
后者继续遵循已有凭据落盘、唯一 principal ID、固定授权组和拒绝静默替换规则。
|
|
1062
1062
|
|
|
1063
|
+
key在同一服务的管理员入口范围内共享,宿主应使用稳定的业务前缀避免互相碰撞。
|
|
1063
1064
|
同服务存储中,同 key 同参数(名称规范化后)返回原创建快照,包括原 ID、空成员和
|
|
1064
1065
|
原时间;同 key 异参返回 `IDEMPOTENCY_CONFLICT`。之后给原组加入成员或改名,不会改变
|
|
1065
1066
|
创建快照,不能把重试响应的空 `sessionIds` 当作当前成员清单;当前名称可用 groups
|
|
1066
1067
|
回读,成员清单沿现有组管理读接口。HTTP 回执丢失或持久写入结果不明时,保留原 key
|
|
1067
1068
|
和名称重试对账,不要换新 key “再建一个”。
|
|
1068
1069
|
|
|
1069
|
-
|
|
1070
|
+
1.4.318 补齐异常重试:同键回读前再次 durable 提交当前组和原创建记录;目录
|
|
1071
|
+
fsync 持续失败仍返回失败,不以缓存记录冒充成功。文件替换前失败不会提交半个组;替换后 fsync/回执异常可能已经创建,应同键对账。
|
|
1070
1072
|
服务重启保留 key→原快照映射。原组被明确删除、变成跨服务目标或原 ID 已不存在时,
|
|
1071
1073
|
同键返回 `GROUP_CREATE_TARGET_UNAVAILABLE`,不新建替代组;全局清理也保留该 key 的
|
|
1072
1074
|
保留记录。创建 journal 损坏、无法可靠读取或其完整性未确认返回
|
package/package.json
CHANGED
package/runtime-manifest.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"packageName": "termdock",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.318",
|
|
5
5
|
"runtimeProtocolVersion": 1,
|
|
6
6
|
"minimumDesktopVersion": "1.4.46",
|
|
7
7
|
"nodeMajor": 22,
|
|
8
8
|
"dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
|
|
9
|
-
"serverBundleHash": "sha256-
|
|
9
|
+
"serverBundleHash": "sha256-VznpfJGhg8kZE56U0vZ/UHTcclRkZSaSmlA9EkgtaEg=",
|
|
10
10
|
"clientBundleHash": "sha256-iwZyAmz8pDZptAaDUwHHnAqZlIvu6R9xpWhvQhPz3xY=",
|
|
11
11
|
"entrypoint": "dist/server/cli.js",
|
|
12
12
|
"clientEntrypoint": "dist/client/index.html"
|