@gestaltrun/dsh-workspace-bundle 0.0.0-stage → 0.1.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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +37 -0
  3. package/README.md +92 -2
  4. package/README.zh.md +93 -0
  5. package/lib/index.js +2868 -0
  6. package/lib/types/agent-config-contract/agent-configs.d.ts +621 -0
  7. package/lib/types/agent-config-contract/agent-configs.js +68 -0
  8. package/lib/types/agent-config-contract/cs-hosting.d.ts +1333 -0
  9. package/lib/types/agent-config-contract/cs-hosting.js +163 -0
  10. package/lib/types/agent-config-contract/errors.d.ts +224 -0
  11. package/lib/types/agent-config-contract/errors.js +202 -0
  12. package/lib/types/agent-config-contract/ids.d.ts +65 -0
  13. package/lib/types/agent-config-contract/ids.js +35 -0
  14. package/lib/types/agent-config-contract/route.d.ts +56 -0
  15. package/lib/types/agent-config-contract/route.js +1 -0
  16. package/lib/types/agent-config-contract/test-account-claim.d.ts +24 -0
  17. package/lib/types/agent-config-contract/test-account-claim.js +5 -0
  18. package/lib/types/agent-config-format.d.ts +86 -0
  19. package/lib/types/agent-config-format.js +119 -0
  20. package/lib/types/agent-config-observation.d.ts +64 -0
  21. package/lib/types/agent-config-observation.js +448 -0
  22. package/lib/types/agent-config-source.d.ts +78 -0
  23. package/lib/types/agent-config-source.js +411 -0
  24. package/lib/types/agent-config-types.d.ts +67 -0
  25. package/lib/types/agent-config-types.js +1 -0
  26. package/lib/types/bundled-agent-config.d.ts +29 -0
  27. package/lib/types/bundled-agent-config.js +47 -0
  28. package/lib/types/config.d.ts +34 -0
  29. package/lib/types/config.js +53 -0
  30. package/lib/types/definition.d.ts +82 -0
  31. package/lib/types/definition.js +20 -0
  32. package/lib/types/digest.d.ts +38 -0
  33. package/lib/types/digest.js +243 -0
  34. package/lib/types/errors.d.ts +22 -0
  35. package/lib/types/errors.js +26 -0
  36. package/lib/types/filesystem.d.ts +16 -0
  37. package/lib/types/filesystem.js +64 -0
  38. package/lib/types/index.d.ts +28 -0
  39. package/lib/types/index.js +19 -0
  40. package/lib/types/journal.d.ts +51 -0
  41. package/lib/types/journal.js +109 -0
  42. package/lib/types/local-host-identity.d.ts +65 -0
  43. package/lib/types/local-host-identity.js +87 -0
  44. package/lib/types/local-host-replacement.d.ts +49 -0
  45. package/lib/types/local-host-replacement.js +112 -0
  46. package/lib/types/paths.d.ts +26 -0
  47. package/lib/types/paths.js +48 -0
  48. package/lib/types/provider.d.ts +83 -0
  49. package/lib/types/provider.js +560 -0
  50. package/lib/types/session-events.d.ts +23 -0
  51. package/lib/types/session-events.js +14 -0
  52. package/lib/types/types.d.ts +126 -0
  53. package/lib/types/types.js +1 -0
  54. package/locale/en.json +6 -0
  55. package/locale/zh.json +6 -0
  56. package/package.json +69 -3
@@ -0,0 +1,68 @@
1
+ /** 内置 workspace Agent 配置:查询本人当前店铺租户的分配,兼容性由 Host 检查。 @module */
2
+ import { z } from 'zod';
3
+ import { AgentConfigSemver, AgentConfigErrorCode } from "./cs-hosting.js";
4
+ import { TenantId, UserId } from "./ids.js";
5
+ /** 可扩展的内置 workspace 种类;首个种类为 cs-hosting。 */
6
+ export const WorkspaceKind = z.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/).max(80).meta({ id: 'WorkspaceKind' });
7
+ /** Agent 配置登记的完整元数据;sha256 来自经 PR 审阅的规则文件。 */
8
+ export const AgentConfig = z.object({ workspaceKind: WorkspaceKind, version: z.string().min(1), sha256: z.string().regex(/^[a-f0-9]{64}$/), sizeBytes: z.number().int().positive().max(Number.MAX_SAFE_INTEGER), downloadUrl: z.url({ protocol: /^https$/ }), hostContentApiRange: z.string().min(1), releaseNotes: z.string().min(1).max(20000) }).meta({ id: 'AgentConfig' });
9
+ /** builtin 表示没有分配:已有下载版本时保留当前版本,从未下载时使用安装包内置版本。 */
10
+ export const AgentConfigAssignment = z.discriminatedUnion('source', [
11
+ z.object({ source: z.literal('builtin'), tenantId: TenantId, userId: UserId, workspaceKind: WorkspaceKind }),
12
+ z.object({ source: z.literal('registry'), tenantId: TenantId, userId: UserId, workspaceKind: WorkspaceKind, agentConfig: AgentConfig }),
13
+ ]).meta({ id: 'AgentConfigAssignment' });
14
+ /** 路径中的租户必须是会话当前租户;用户由会话确定,不接受调用方指定。 */
15
+ export const AgentConfigParams = z.object({ tenantId: TenantId, workspaceKind: WorkspaceKind }).meta({ id: 'AgentConfigParams' });
16
+ /** Host 在启动和轮询时查询;不按版本大小排序,回退可返回更低版本;服务不可达时保留当前版本。 */
17
+ export const getAgentConfigAssignment = {
18
+ method: 'get', path: '/v1/tenants/{tenantId}/agent-configs/{workspaceKind}', summary: '查询本人内置 workspace Agent 配置分配', auth: 'tenant',
19
+ request: { params: AgentConfigParams, query: z.strictObject({}) },
20
+ responses: { 200: { description: '分配版本或使用内置版本;Host 检查兼容范围并核对下载字节的 sha256', schema: AgentConfigAssignment, headers: { 'Cache-Control': { description: '每次读取当前分配,及时观察回退', schema: z.literal('no-store') } } } },
21
+ problems: { 401: ['SESSION_REQUIRED', 'SESSION_EXPIRED'], 403: ['NO_CURRENT_TENANT', 'NOT_A_MEMBER', 'AGENT_CONFIGS_UNAVAILABLE'], 409: ['TENANT_NOT_CURRENT'] },
22
+ };
23
+ /** 双模块观测与控制仅支持已实现的模块;不设默认种类。 */
24
+ export const AgentConfigModule = z.enum(['cs-hosting', 'resource-intake']).meta({ id: 'AgentConfigModule' });
25
+ export const AgentConfigDigest = z.string().regex(/^[a-f0-9]{64}$/);
26
+ const sequence = z.number().int().min(1).max(Number.MAX_SAFE_INTEGER);
27
+ const generation = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
28
+ /** 完整身份包括 build metadata;builtin 没有远端归档摘要。 */
29
+ export const AgentConfigCommitted = z.discriminatedUnion('source', [
30
+ z.strictObject({ source: z.literal('builtin'), version: AgentConfigSemver, sha256: z.null() }),
31
+ z.strictObject({ source: z.literal('registry'), version: AgentConfigSemver, sha256: AgentConfigDigest }),
32
+ ]).meta({ id: 'AgentConfigCommitted' });
33
+ export const AgentConfigTarget = z.strictObject({ version: AgentConfigSemver, sha256: AgentConfigDigest }).meta({ id: 'AgentConfigTarget' });
34
+ /** 已提交版本恢复/采用的独立阻断原因;不随候选目标拒绝变化,不含诊断正文。 */
35
+ export const AgentConfigBlockingFailure = z.strictObject({ code: AgentConfigErrorCode, committed: AgentConfigCommitted }).meta({ id: 'AgentConfigBlockingFailure' });
36
+ /** 固定码与精确目标归因;查询失败不能作为采用拒绝。 */
37
+ export const ModuleAgentConfigSnapshot = z.strictObject({
38
+ hostAgentConfigApiVersion: AgentConfigSemver, runtimeApiVersion: AgentConfigSemver.nullable(),
39
+ current: AgentConfigCommitted, pending: AgentConfigTarget.nullable(), blocked: z.boolean(),
40
+ lastRejection: z.strictObject({ code: AgentConfigErrorCode, target: AgentConfigTarget.nullable() }).nullable(),
41
+ blockingFailure: AgentConfigBlockingFailure.nullable().optional(),
42
+ }).meta({ id: 'ModuleAgentConfigSnapshot' });
43
+ /** 服务端从当前有效 sandbox 会话和活动 placement key 解析的绑定;不是调用方可指定的身份。 */
44
+ export const AgentConfigSandboxBinding = z.strictObject({ sandboxId: z.uuid(), instanceId: z.string().min(1).max(200), sandboxGeneration: generation }).meta({ id: 'AgentConfigSandboxBinding' });
45
+ /** 云端读回只要求现有 sandbox/instance 配置;代次由服务端提供。 */
46
+ export const ReadAgentConfigSandboxHostQuery = AgentConfigSandboxBinding.pick({ sandboxId: true, instanceId: true }).meta({ id: 'ReadAgentConfigSandboxHostQuery' });
47
+ /** 外层绑定为本次认证的当前实例;内层为已存注册,可来自旧实例。null 表示尚无注册。 */
48
+ export const AgentConfigSandboxHostReadback = z.strictObject({
49
+ tenantId: TenantId, userId: UserId, workspaceKind: AgentConfigModule, sandboxBinding: AgentConfigSandboxBinding,
50
+ registration: z.strictObject({ hostId: z.uuid(), generation: sequence, bootSequence: sequence, sandboxBinding: AgentConfigSandboxBinding }).nullable(),
51
+ }).meta({ id: 'AgentConfigSandboxHostReadback' });
52
+ /** bootSequence 随 device 持久递增;sandbox 丢失状态时先在本地锁内读回,再携带绑定与明确代次 CAS,不盲目重试。 */
53
+ export const RegisterAgentConfigHostRequest = z.strictObject({ hostId: z.uuid(), bootId: z.uuid(), requestId: z.uuid(), bootSequence: sequence, expectedGeneration: generation, explicitActivation: z.boolean().optional(), sandboxBinding: AgentConfigSandboxBinding.optional() }).meta({ id: 'RegisterAgentConfigHostRequest' });
54
+ export const AgentConfigHostRegistration = z.strictObject({ workspaceKind: AgentConfigModule, hostId: z.uuid(), generation: sequence, holder: z.strictObject({ kind: z.enum(['installation', 'sandbox']), id: z.uuid() }) }).meta({ id: 'AgentConfigHostRegistration' });
55
+ export const ReportAgentConfigHostRequest = ModuleAgentConfigSnapshot.extend({ generation: sequence, sequence }).meta({ id: 'ReportAgentConfigHostRequest' });
56
+ export const AgentConfigHostReceipt = z.strictObject({ generation: sequence, sequence, reportedAt: z.iso.datetime() }).meta({ id: 'AgentConfigHostReceipt' });
57
+ const hostProblems = { 401: ['SESSION_REQUIRED', 'SESSION_EXPIRED'], 403: ['NO_CURRENT_TENANT', 'NOT_A_MEMBER', 'AGENT_CONFIGS_UNAVAILABLE', 'SANDBOX_SESSION_UNBOUND'], 404: ['NOT_FOUND'], 409: ['TENANT_NOT_CURRENT', 'VERSION_CONFLICT', 'OPERATION_CONFLICT', 'LOCAL_HOST_REPLACED'], 503: ['SERVICE_UNAVAILABLE'] };
58
+ const hostHeaders = { 'Cache-Control': { description: '观测与回执不得缓存', schema: z.literal('no-store') } };
59
+ export const getAgentConfigSandboxHost = { method: 'get', path: '/v1/tenants/{tenantId}/agent-configs/{workspaceKind}/hosts/current', summary: '只读本人当前沙箱模块 Host 注册,不允许本机安装调用', auth: 'tenant', request: { params: AgentConfigParams, query: ReadAgentConfigSandboxHostQuery }, responses: { 200: { description: 'sandboxId/instanceId 须匹配当前已认证 sandbox;返回服务端代次及已存注册,读回不授予业务权限,重新注册须携带完整 sandboxBinding 和明确 expectedGeneration', schema: AgentConfigSandboxHostReadback, headers: hostHeaders } }, problems: hostProblems };
60
+ export const registerAgentConfigHost = { method: 'post', path: '/v1/tenants/{tenantId}/agent-configs/{workspaceKind}/hosts/register', summary: '注册本人模块 Host 运行,不取得业务写权限', auth: 'tenant', request: { params: AgentConfigParams, body: RegisterAgentConfigHostRequest }, responses: { 200: { description: '服务端绑定 holder;提供 sandboxBinding 时须在事务内匹配当前 sandbox/instance/代次,installation 不接受该字段;新运行以 bootSequence 和 expectedGeneration 比较更新,旧运行不可复活', schema: AgentConfigHostRegistration, headers: hostHeaders } }, problems: hostProblems };
61
+ export const reportAgentConfigHost = { method: 'put', path: '/v1/tenants/{tenantId}/agent-configs/{workspaceKind}/hosts/{hostId}/observation', summary: '上报本人模块 Host 的完整采用快照', auth: 'tenant', request: { params: AgentConfigParams.extend({ hostId: z.uuid() }), body: ReportAgentConfigHostRequest }, responses: { 200: { description: '同序同内容返回原接收时间,同序异内容或旧代次冲突;时间由服务端确定', schema: AgentConfigHostReceipt, headers: hostHeaders } }, problems: hostProblems };
62
+ /** 仅新模块契约暴露可选runtime要求;旧assignment显式投影原AgentConfig。 */
63
+ export const ModuleAgentConfigMetadata = AgentConfig.extend({ runtimeApiRange: z.string().min(1).optional() }).meta({ id: 'ModuleAgentConfigMetadata' });
64
+ export const ModuleAgentConfigAssignment = z.discriminatedUnion('source', [
65
+ z.object({ source: z.literal('builtin'), tenantId: TenantId, userId: UserId, workspaceKind: AgentConfigModule }),
66
+ z.object({ source: z.literal('registry'), tenantId: TenantId, userId: UserId, workspaceKind: AgentConfigModule, agentConfig: ModuleAgentConfigMetadata }),
67
+ ]).meta({ id: 'ModuleAgentConfigAssignment' });
68
+ export const getModuleAgentConfigAssignment = { ...getAgentConfigAssignment, path: '/v1/tenants/{tenantId}/agent-configs/{workspaceKind}/module', summary: '查询显式模块分配与runtime要求', responses: { 200: { ...getAgentConfigAssignment.responses[200], schema: ModuleAgentConfigAssignment } }, problems: hostProblems };