@playcraft/common 0.0.59 → 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 (93) hide show
  1. package/dist/cloud-workspace/runtime/agent-background-processes.d.ts +68 -0
  2. package/dist/cloud-workspace/runtime/agent-background-processes.d.ts.map +1 -0
  3. package/dist/cloud-workspace/runtime/agent-background-processes.js +60 -0
  4. package/dist/cloud-workspace/runtime/agent-background-processes.js.map +1 -0
  5. package/dist/cloud-workspace/runtime/agent-chat-flush.d.ts +3 -5
  6. package/dist/cloud-workspace/runtime/agent-chat-flush.d.ts.map +1 -1
  7. package/dist/cloud-workspace/runtime/agent-chat-flush.js +2 -6
  8. package/dist/cloud-workspace/runtime/agent-chat-flush.js.map +1 -1
  9. package/dist/cloud-workspace/runtime/agent-command.d.ts +25 -3
  10. package/dist/cloud-workspace/runtime/agent-command.d.ts.map +1 -1
  11. package/dist/cloud-workspace/runtime/agent-command.js +15 -0
  12. package/dist/cloud-workspace/runtime/agent-command.js.map +1 -1
  13. package/dist/cloud-workspace/runtime/agent-competitor-report.d.ts +143 -0
  14. package/dist/cloud-workspace/runtime/agent-competitor-report.d.ts.map +1 -0
  15. package/dist/cloud-workspace/runtime/agent-competitor-report.js +115 -0
  16. package/dist/cloud-workspace/runtime/agent-competitor-report.js.map +1 -0
  17. package/dist/cloud-workspace/runtime/agent-issue-artifacts.d.ts +90 -0
  18. package/dist/cloud-workspace/runtime/agent-issue-artifacts.d.ts.map +1 -0
  19. package/dist/cloud-workspace/runtime/agent-issue-artifacts.js +60 -0
  20. package/dist/cloud-workspace/runtime/agent-issue-artifacts.js.map +1 -0
  21. package/dist/cloud-workspace/runtime/agent-lifecycle.d.ts +5 -3
  22. package/dist/cloud-workspace/runtime/agent-lifecycle.d.ts.map +1 -1
  23. package/dist/cloud-workspace/runtime/agent-lifecycle.js +5 -0
  24. package/dist/cloud-workspace/runtime/agent-lifecycle.js.map +1 -1
  25. package/dist/cloud-workspace/runtime/agent-opencode-gateway.d.ts +56 -2
  26. package/dist/cloud-workspace/runtime/agent-opencode-gateway.d.ts.map +1 -1
  27. package/dist/cloud-workspace/runtime/agent-opencode-gateway.js +40 -1
  28. package/dist/cloud-workspace/runtime/agent-opencode-gateway.js.map +1 -1
  29. package/dist/cloud-workspace/runtime/agent-opencode.d.ts +2 -2
  30. package/dist/cloud-workspace/runtime/agent-promotion.d.ts +1 -0
  31. package/dist/cloud-workspace/runtime/agent-promotion.d.ts.map +1 -1
  32. package/dist/cloud-workspace/runtime/agent-promotion.js +5 -1
  33. package/dist/cloud-workspace/runtime/agent-promotion.js.map +1 -1
  34. package/dist/cloud-workspace/runtime/agent-source-project.d.ts +126 -0
  35. package/dist/cloud-workspace/runtime/agent-source-project.d.ts.map +1 -0
  36. package/dist/cloud-workspace/runtime/agent-source-project.js +95 -0
  37. package/dist/cloud-workspace/runtime/agent-source-project.js.map +1 -0
  38. package/dist/cloud-workspace/runtime/agent-variant-chat.d.ts +9 -0
  39. package/dist/cloud-workspace/runtime/agent-variant-chat.d.ts.map +1 -0
  40. package/dist/cloud-workspace/runtime/agent-variant-chat.js +23 -0
  41. package/dist/cloud-workspace/runtime/agent-variant-chat.js.map +1 -0
  42. package/dist/cloud-workspace/runtime/agent-variant-git.d.ts +75 -0
  43. package/dist/cloud-workspace/runtime/agent-variant-git.d.ts.map +1 -0
  44. package/dist/cloud-workspace/runtime/agent-variant-git.js +62 -0
  45. package/dist/cloud-workspace/runtime/agent-variant-git.js.map +1 -0
  46. package/dist/cloud-workspace/runtime/capabilities.d.ts +1 -1
  47. package/dist/cloud-workspace/runtime/chat-realtime-admission.d.ts +53 -0
  48. package/dist/cloud-workspace/runtime/chat-realtime-admission.d.ts.map +1 -0
  49. package/dist/cloud-workspace/runtime/chat-realtime-admission.js +95 -0
  50. package/dist/cloud-workspace/runtime/chat-realtime-admission.js.map +1 -0
  51. package/dist/cloud-workspace/runtime/chat-realtime.d.ts +197 -0
  52. package/dist/cloud-workspace/runtime/chat-realtime.d.ts.map +1 -0
  53. package/dist/cloud-workspace/runtime/chat-realtime.js +299 -0
  54. package/dist/cloud-workspace/runtime/chat-realtime.js.map +1 -0
  55. package/dist/cloud-workspace/runtime/errors.d.ts +1 -1
  56. package/dist/cloud-workspace/runtime/git-auth-mode.d.ts +35 -0
  57. package/dist/cloud-workspace/runtime/git-auth-mode.d.ts.map +1 -0
  58. package/dist/cloud-workspace/runtime/git-auth-mode.js +73 -0
  59. package/dist/cloud-workspace/runtime/git-auth-mode.js.map +1 -0
  60. package/dist/cloud-workspace/runtime/handshake.d.ts +1 -1
  61. package/dist/cloud-workspace/runtime/index.d.ts +13 -3
  62. package/dist/cloud-workspace/runtime/index.d.ts.map +1 -1
  63. package/dist/cloud-workspace/runtime/index.js +13 -3
  64. package/dist/cloud-workspace/runtime/index.js.map +1 -1
  65. package/dist/cloud-workspace/runtime/native-history.d.ts +66 -0
  66. package/dist/cloud-workspace/runtime/native-history.d.ts.map +1 -0
  67. package/dist/cloud-workspace/runtime/native-history.js +127 -0
  68. package/dist/cloud-workspace/runtime/native-history.js.map +1 -0
  69. package/dist/cloud-workspace/runtime/operations.d.ts +11 -0
  70. package/dist/cloud-workspace/runtime/operations.d.ts.map +1 -1
  71. package/dist/cloud-workspace/runtime/operations.js +15 -1
  72. package/dist/cloud-workspace/runtime/operations.js.map +1 -1
  73. package/dist/cloud-workspace/runtime/terminal-session.d.ts +78 -0
  74. package/dist/cloud-workspace/runtime/terminal-session.d.ts.map +1 -0
  75. package/dist/cloud-workspace/runtime/terminal-session.js +178 -0
  76. package/dist/cloud-workspace/runtime/terminal-session.js.map +1 -0
  77. package/dist/cloud-workspace/runtime/terminals.d.ts +36 -1
  78. package/dist/cloud-workspace/runtime/terminals.d.ts.map +1 -1
  79. package/dist/cloud-workspace/runtime/terminals.js +46 -1
  80. package/dist/cloud-workspace/runtime/terminals.js.map +1 -1
  81. package/dist/cloud-workspace/runtime/workspace-binding.d.ts +32 -3
  82. package/dist/cloud-workspace/runtime/workspace-binding.d.ts.map +1 -1
  83. package/dist/cloud-workspace/runtime/workspace-binding.js +9 -3
  84. package/dist/cloud-workspace/runtime/workspace-binding.js.map +1 -1
  85. package/dist/database/operators.d.ts +2 -0
  86. package/dist/database/operators.d.ts.map +1 -0
  87. package/dist/database/operators.js +2 -0
  88. package/dist/database/operators.js.map +1 -0
  89. package/package.json +5 -1
  90. package/dist/cloud-workspace/runtime/agent-codebuddy.d.ts +0 -266
  91. package/dist/cloud-workspace/runtime/agent-codebuddy.d.ts.map +0 -1
  92. package/dist/cloud-workspace/runtime/agent-codebuddy.js +0 -189
  93. package/dist/cloud-workspace/runtime/agent-codebuddy.js.map +0 -1
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 会话来源工程与竞品分析技能的沙箱准备(R3.16)。
4
+ *
5
+ * 调用方只声明会话、领取和要准备的范围;仓库地址、分支、工作目录都由 Runtime 从
6
+ * `agent_sessions`(绑定项目、playbook 状态)、`projects` 与 `competitor_playbook_configs`
7
+ * 推导,Git 凭证也只在 Runtime 与沙箱之间使用。
8
+ */
9
+ const identity = z.string().min(1).max(128);
10
+ const sessionId = z.string().regex(/^[a-zA-Z0-9_-]{1,128}$/);
11
+ const uuid = z.string().uuid();
12
+ export const agentSourceProjectActions = [
13
+ 'materialize',
14
+ 'install_competitor_skill',
15
+ 'settled',
16
+ ];
17
+ export const agentSourceProjectKinds = ['session', 'manager', 'execution'];
18
+ /**
19
+ * `session`:会话准备的完整顺序(绑定项目 > 来源工程 > 竞品仓库)。
20
+ * `competitor`:会话中途进入竞品模式时只 clone 竞品仓库;已绑定项目的会话不动工作目录。
21
+ */
22
+ export const agentSourceProjectScopes = ['session', 'competitor'];
23
+ export const agentSourceProjectRequestSchema = z
24
+ .object({
25
+ action: z.enum(agentSourceProjectActions),
26
+ sessionId,
27
+ requestId: uuid,
28
+ writerEpoch: z.number().int().positive().max(2_147_483_647),
29
+ workspaceId: identity,
30
+ kind: z.enum(agentSourceProjectKinds),
31
+ runId: uuid.optional(),
32
+ executionId: uuid.optional(),
33
+ issueId: uuid.optional(),
34
+ claimToken: identity.optional(),
35
+ scope: z.enum(agentSourceProjectScopes).optional(),
36
+ settledOnly: z.boolean().default(false),
37
+ })
38
+ .strict()
39
+ .refine((value) => {
40
+ if (value.kind === 'session')
41
+ return !value.runId && !value.executionId && !value.issueId && !value.claimToken;
42
+ if (value.kind === 'manager')
43
+ return Boolean(value.runId && value.claimToken) && !value.executionId && !value.issueId;
44
+ return Boolean(value.runId && value.executionId && value.issueId && value.claimToken);
45
+ })
46
+ .refine((value) => value.action === 'materialize' || value.scope === undefined)
47
+ .refine((value) => new TextEncoder().encode(JSON.stringify(value)).byteLength <= 16_384);
48
+ /** 物化的来源:`none` 表示会话还没有可物化的来源(空工作目录不是错误)。 */
49
+ export const agentSourceProjectSources = ['bound', 'source', 'competitor', 'none'];
50
+ export const agentSourceProjectFailureCodes = [
51
+ 'bound_no_repo',
52
+ 'bound_clone_failed',
53
+ 'source_incomplete',
54
+ 'source_no_repo',
55
+ 'source_clone_failed',
56
+ 'competitor_clone_failed',
57
+ ];
58
+ export const agentSourceProjectResultSchema = z.union([
59
+ z.object({ outcome: z.literal('uncertain'), error: z.string().max(128) }).strict(),
60
+ z
61
+ .object({
62
+ outcome: z.literal('settled'),
63
+ kind: z.literal('materialize'),
64
+ source: z.enum(agentSourceProjectSources),
65
+ /** ready:工作目录已是目标仓库;skipped:没有要物化的来源;failed:确定失败,目录未被替换。 */
66
+ status: z.enum(['ready', 'skipped', 'failed']),
67
+ reused: z.boolean(),
68
+ code: z.enum(agentSourceProjectFailureCodes).optional(),
69
+ /** 失败时给 Manager 看的原因,已脱敏。 */
70
+ message: z.string().max(1_024).optional(),
71
+ })
72
+ .strict(),
73
+ z
74
+ .object({
75
+ outcome: z.literal('settled'),
76
+ kind: z.literal('competitor_skill'),
77
+ /**
78
+ * installed:技能目录可用;unavailable:竞品会话但装不上(没配仓库 / 凭证 / clone
79
+ * 或 manifest 校验失败),提示词走降级分支;not_applicable:不是竞品会话。
80
+ */
81
+ status: z.enum(['installed', 'unavailable', 'not_applicable']),
82
+ skillDir: z.string().min(1).max(512).nullable(),
83
+ })
84
+ .strict(),
85
+ ]);
86
+ export const agentSourceProjectResponseSchema = z
87
+ .object({
88
+ requestId: uuid,
89
+ operationId: uuid,
90
+ action: z.enum(agentSourceProjectActions),
91
+ inputHash: z.string().regex(/^[a-f0-9]{64}$/),
92
+ result: agentSourceProjectResultSchema,
93
+ })
94
+ .strict();
95
+ //# sourceMappingURL=agent-source-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-source-project.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/agent-source-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export declare const agentVariantChatEventsRequestSchema: z.ZodObject<{
3
+ writerEpoch: z.ZodNumber;
4
+ sessionId: z.ZodString;
5
+ batchId: z.ZodString;
6
+ variantIndex: z.ZodNumber;
7
+ }, z.core.$strict>;
8
+ export type AgentVariantChatEventsRequest = z.infer<typeof agentVariantChatEventsRequestSchema>;
9
+ //# sourceMappingURL=agent-variant-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-variant-chat.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/agent-variant-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgBxB,eAAO,MAAM,mCAAmC;;;;;kBAQrC,CAAC;AAEZ,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 变体聊天实时流(R3.14)。
4
+ *
5
+ * 弹窗打开时把某个变体的 OpenCode `/event` 转到门户 SSE。变体进程监听的是进程池分配的动态
6
+ * 端口,不经沙箱入口,只能在沙箱内连 `127.0.0.1`,所以源头是「在沙箱里跑一条 curl 并流式
7
+ * 收集 stdout」,而不是一次 HTTP 请求。
8
+ *
9
+ * 调用方只声明要看哪个变体;沙箱、端口、会话标识与那条 curl 的清理标记都由 Runtime 从
10
+ * `agent_draft_variants` 与 `agent_sessions` 推导并持有。响应体是 `text/event-stream`,
11
+ * 字节原样透传,因此没有回执,也没有结果 schema。
12
+ */
13
+ const uuid = z.string().uuid();
14
+ export const agentVariantChatEventsRequestSchema = z
15
+ .object({
16
+ writerEpoch: z.number().int().positive().max(2_147_483_647),
17
+ sessionId: uuid,
18
+ batchId: uuid,
19
+ /** 批次内序号,从 1 开始。 */
20
+ variantIndex: z.number().int().positive().max(1_000),
21
+ })
22
+ .strict();
23
+ //# sourceMappingURL=agent-variant-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-variant-chat.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/agent-variant-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;GAUG;AAEH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAE/B,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC;KACjD,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3D,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,oBAAoB;IACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;CACrD,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { z } from 'zod';
2
+ export declare const agentVariantGitActions: readonly ["inspect", "push_state", "settled"];
3
+ export declare const agentVariantGitRequestSchema: z.ZodObject<{
4
+ action: z.ZodEnum<{
5
+ settled: "settled";
6
+ inspect: "inspect";
7
+ push_state: "push_state";
8
+ }>;
9
+ requestId: z.ZodString;
10
+ writerEpoch: z.ZodNumber;
11
+ sessionId: z.ZodString;
12
+ batchId: z.ZodString;
13
+ variantIndex: z.ZodNumber;
14
+ settledOnly: z.ZodDefault<z.ZodBoolean>;
15
+ sourceBranch: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strict>;
17
+ export declare const agentVariantGitResultSchema: z.ZodUnion<readonly [z.ZodObject<{
18
+ outcome: z.ZodLiteral<"uncertain">;
19
+ error: z.ZodString;
20
+ }, z.core.$strict>, z.ZodObject<{
21
+ outcome: z.ZodLiteral<"settled">;
22
+ kind: z.ZodLiteral<"inspect">;
23
+ status: z.ZodEnum<{
24
+ failed: "failed";
25
+ changed: "changed";
26
+ empty: "empty";
27
+ }>;
28
+ error: z.ZodOptional<z.ZodString>;
29
+ }, z.core.$strict>, z.ZodObject<{
30
+ outcome: z.ZodLiteral<"settled">;
31
+ kind: z.ZodLiteral<"push_state">;
32
+ status: z.ZodEnum<{
33
+ failed: "failed";
34
+ pushed: "pushed";
35
+ unpushed: "unpushed";
36
+ }>;
37
+ error: z.ZodOptional<z.ZodString>;
38
+ }, z.core.$strict>]>;
39
+ export declare const agentVariantGitResponseSchema: z.ZodObject<{
40
+ requestId: z.ZodString;
41
+ operationId: z.ZodString;
42
+ action: z.ZodEnum<{
43
+ settled: "settled";
44
+ inspect: "inspect";
45
+ push_state: "push_state";
46
+ }>;
47
+ inputHash: z.ZodString;
48
+ result: z.ZodUnion<readonly [z.ZodObject<{
49
+ outcome: z.ZodLiteral<"uncertain">;
50
+ error: z.ZodString;
51
+ }, z.core.$strict>, z.ZodObject<{
52
+ outcome: z.ZodLiteral<"settled">;
53
+ kind: z.ZodLiteral<"inspect">;
54
+ status: z.ZodEnum<{
55
+ failed: "failed";
56
+ changed: "changed";
57
+ empty: "empty";
58
+ }>;
59
+ error: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strict>, z.ZodObject<{
61
+ outcome: z.ZodLiteral<"settled">;
62
+ kind: z.ZodLiteral<"push_state">;
63
+ status: z.ZodEnum<{
64
+ failed: "failed";
65
+ pushed: "pushed";
66
+ unpushed: "unpushed";
67
+ }>;
68
+ error: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strict>]>;
70
+ }, z.core.$strict>;
71
+ export type AgentVariantGitAction = (typeof agentVariantGitActions)[number];
72
+ export type AgentVariantGitRequest = z.infer<typeof agentVariantGitRequestSchema>;
73
+ export type AgentVariantGitResult = z.infer<typeof agentVariantGitResultSchema>;
74
+ export type AgentVariantGitResponse = z.infer<typeof agentVariantGitResponseSchema>;
75
+ //# sourceMappingURL=agent-variant-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-variant-git.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/agent-variant-git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,eAAO,MAAM,sBAAsB,+CAAgD,CAAC;AAEpF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;kBAc2C,CAAC;AAErF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;oBAoBtC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQ/B,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 变体收尾前的只读 git 检查(R3.15)。
4
+ *
5
+ * 改码结束后用工作区脏文件和相对源分支的已提交 diff 判断有没有可玩交付,接管重跑发布前
6
+ * 再探一次分支是不是已经推过。调用方只声明变体和(inspect 时)源分支名;沙箱、工作目录
7
+ * 由 Runtime 从 `agent_draft_variants` 推导。本刀不执行 commit / push。
8
+ */
9
+ const uuid = z.string().uuid();
10
+ const gitRef = z
11
+ .string()
12
+ .min(1)
13
+ .max(200)
14
+ .refine((value) => !/[\x00-\x1f]/.test(value))
15
+ .refine((value) => /^[A-Za-z0-9._/-]+$/.test(value));
16
+ export const agentVariantGitActions = ['inspect', 'push_state', 'settled'];
17
+ export const agentVariantGitRequestSchema = z
18
+ .object({
19
+ action: z.enum(agentVariantGitActions),
20
+ requestId: uuid,
21
+ writerEpoch: z.number().int().positive().max(2_147_483_647),
22
+ sessionId: uuid,
23
+ batchId: uuid,
24
+ variantIndex: z.number().int().positive().max(1_000),
25
+ settledOnly: z.boolean().default(false),
26
+ /** 相对哪条源分支做 three-dot diff;仅 `inspect` 需要。 */
27
+ sourceBranch: gitRef.optional(),
28
+ })
29
+ .strict()
30
+ .refine((value) => value.action !== 'inspect' || Boolean(value.sourceBranch))
31
+ .refine((value) => value.action === 'inspect' || value.sourceBranch === undefined);
32
+ export const agentVariantGitResultSchema = z.union([
33
+ z.object({ outcome: z.literal('uncertain'), error: z.string().max(256) }).strict(),
34
+ z
35
+ .object({
36
+ outcome: z.literal('settled'),
37
+ kind: z.literal('inspect'),
38
+ /** changed:有可玩交付;empty:检查成功但没有;failed:git 命令没跑成。 */
39
+ status: z.enum(['changed', 'empty', 'failed']),
40
+ error: z.string().max(256).optional(),
41
+ })
42
+ .strict(),
43
+ z
44
+ .object({
45
+ outcome: z.literal('settled'),
46
+ kind: z.literal('push_state'),
47
+ /** pushed:HEAD 已在 origin;unpushed:还要提交或推送;failed:探测没跑成。 */
48
+ status: z.enum(['pushed', 'unpushed', 'failed']),
49
+ error: z.string().max(256).optional(),
50
+ })
51
+ .strict(),
52
+ ]);
53
+ export const agentVariantGitResponseSchema = z
54
+ .object({
55
+ requestId: uuid,
56
+ operationId: uuid,
57
+ action: z.enum(agentVariantGitActions),
58
+ inputHash: z.string().regex(/^[a-f0-9]{64}$/),
59
+ result: agentVariantGitResultSchema,
60
+ })
61
+ .strict();
62
+ //# sourceMappingURL=agent-variant-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-variant-git.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/agent-variant-git.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,11 @@ export declare const CORE_RUNTIME_PHASES: readonly ["starting", "awaiting_native
28
28
  export type CoreRuntimePhase = (typeof CORE_RUNTIME_PHASES)[number];
29
29
  export declare const coreRuntimePhaseSchema: z.ZodEnum<{
30
30
  ready: "ready";
31
+ unavailable: "unavailable";
31
32
  starting: "starting";
32
33
  awaiting_native: "awaiting_native";
33
34
  restoring: "restoring";
34
35
  quiescing: "quiescing";
35
- unavailable: "unavailable";
36
36
  }>;
37
37
  export declare function capability(name: RuntimeCapabilityName, ready: boolean, reason?: string): CapabilityState;
38
38
  export declare function listDeclaredCapabilities(states: readonly CapabilityState[]): RuntimeCapabilityName[];
@@ -0,0 +1,53 @@
1
+ import { CHAT_REALTIME_V2 } from './chat-realtime.js';
2
+ /**
3
+ * Section 9 rows. A logical runtime may advertise chatRealtimeV2 only when every row
4
+ * passed and the section 1 measurement conditions were actually met.
5
+ */
6
+ export declare const CHAT_REALTIME_ACCEPTANCE_ROWS: readonly ["paced_output", "archive_delay", "approval_and_stop", "early_notification_crash", "durable_before_live", "out_of_order_prefix", "refresh_snapshot", "non_owner_replica", "slow_subscriber", "ten_thousand_fragments", "revoke_and_disconnect", "crash_and_loss", "sqlite_commit_boundaries", "checkpoint_pin_disk", "native_jsonl_and_migration", "sandbox_disk_engine", "entry_proxy"];
7
+ export type ChatRealtimeAcceptanceRow = (typeof CHAT_REALTIME_ACCEPTANCE_ROWS)[number];
8
+ export type ChatRealtimeRowStatus = 'passed' | 'failed' | 'untested';
9
+ export type ChatRealtimeAdmissionInput = {
10
+ logicalRuntimeId: string;
11
+ rows: Record<ChatRealtimeAcceptanceRow, ChatRealtimeRowStatus>;
12
+ networkBudgetMet: boolean;
13
+ percentileSampleMet: boolean;
14
+ browserPaintObserved: boolean;
15
+ fixedCodexVersion: string | null;
16
+ protocolMinor: number;
17
+ replacesCursorSemantics: boolean;
18
+ deletesUnconfirmedSources: boolean;
19
+ };
20
+ export type ChatRealtimeAdmission = {
21
+ advertise: true;
22
+ mode: typeof CHAT_REALTIME_V2;
23
+ logicalRuntimeId: string;
24
+ } | {
25
+ advertise: false;
26
+ code: 'chat_realtime_unavailable';
27
+ logicalRuntimeId: string;
28
+ blockedBy: string[];
29
+ };
30
+ export type RealtimeTurnAdmission = {
31
+ ok: true;
32
+ mode: 'conversation' | typeof CHAT_REALTIME_V2;
33
+ } | {
34
+ ok: false;
35
+ code: 'chat_realtime_unavailable';
36
+ history: 'read';
37
+ fallback: 'none';
38
+ };
39
+ export declare function closedChatRealtimeAdmission(logicalRuntimeId: string): ChatRealtimeAdmissionInput;
40
+ /** Production advertisement. There is no environment override. */
41
+ export declare function advertisedChatModes(logicalRuntimeId: string): readonly string[];
42
+ export declare function mayAdvertiseChatRealtime(input: ChatRealtimeAdmissionInput): ChatRealtimeAdmission;
43
+ /**
44
+ * A requested realtime upload is refused when this logical runtime does not advertise it.
45
+ * Refusal keeps history reads and does not select a whole-turn upload mode.
46
+ * An omitted upload stays on the existing conversation path.
47
+ */
48
+ export declare function admitRealtimeTurn(input: {
49
+ requestedUpload?: string;
50
+ localModes: readonly string[];
51
+ remoteModes: readonly string[];
52
+ }): RealtimeTurnAdmission;
53
+ //# sourceMappingURL=chat-realtime-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-realtime-admission.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/chat-realtime-admission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAyB,MAAM,oBAAoB,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,6BAA6B,mYAkBhC,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErE,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,CAAC,CAAC;IAC/D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;IACjC,yBAAyB,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,gBAAgB,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE3G,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,cAAc,GAAG,OAAO,gBAAgB,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAExF,wBAAgB,2BAA2B,CAAC,gBAAgB,EAAE,MAAM,GAAG,0BAA0B,CAehG;AAED,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAG/E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,0BAA0B,GAAG,qBAAqB,CAsBjG;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,GAAG,qBAAqB,CAYxB"}
@@ -0,0 +1,95 @@
1
+ import { CLOUD_WORKSPACE_PROTOCOL_MINOR } from './protocol.js';
2
+ import { CHAT_REALTIME_V2, negotiateChatRealtime } from './chat-realtime.js';
3
+ /**
4
+ * Section 9 rows. A logical runtime may advertise chatRealtimeV2 only when every row
5
+ * passed and the section 1 measurement conditions were actually met.
6
+ */
7
+ export const CHAT_REALTIME_ACCEPTANCE_ROWS = [
8
+ 'paced_output',
9
+ 'archive_delay',
10
+ 'approval_and_stop',
11
+ 'early_notification_crash',
12
+ 'durable_before_live',
13
+ 'out_of_order_prefix',
14
+ 'refresh_snapshot',
15
+ 'non_owner_replica',
16
+ 'slow_subscriber',
17
+ 'ten_thousand_fragments',
18
+ 'revoke_and_disconnect',
19
+ 'crash_and_loss',
20
+ 'sqlite_commit_boundaries',
21
+ 'checkpoint_pin_disk',
22
+ 'native_jsonl_and_migration',
23
+ 'sandbox_disk_engine',
24
+ 'entry_proxy',
25
+ ];
26
+ export function closedChatRealtimeAdmission(logicalRuntimeId) {
27
+ const rows = Object.fromEntries(CHAT_REALTIME_ACCEPTANCE_ROWS.map((row) => [row, 'untested']));
28
+ return {
29
+ logicalRuntimeId,
30
+ rows,
31
+ networkBudgetMet: false,
32
+ percentileSampleMet: false,
33
+ browserPaintObserved: false,
34
+ fixedCodexVersion: null,
35
+ protocolMinor: CLOUD_WORKSPACE_PROTOCOL_MINOR,
36
+ replacesCursorSemantics: false,
37
+ deletesUnconfirmedSources: false,
38
+ };
39
+ }
40
+ /** Production advertisement. There is no environment override. */
41
+ export function advertisedChatModes(logicalRuntimeId) {
42
+ const decision = mayAdvertiseChatRealtime(closedChatRealtimeAdmission(logicalRuntimeId));
43
+ return decision.advertise ? [decision.mode] : [];
44
+ }
45
+ export function mayAdvertiseChatRealtime(input) {
46
+ const blockedBy = [];
47
+ if (!input.logicalRuntimeId.trim())
48
+ blockedBy.push('logical_runtime');
49
+ for (const row of CHAT_REALTIME_ACCEPTANCE_ROWS) {
50
+ if (input.rows[row] !== 'passed')
51
+ blockedBy.push(row);
52
+ }
53
+ if (!input.networkBudgetMet)
54
+ blockedBy.push('network_budget');
55
+ if (!input.percentileSampleMet)
56
+ blockedBy.push('percentile_sample');
57
+ if (!input.browserPaintObserved)
58
+ blockedBy.push('browser_paint');
59
+ if (!input.fixedCodexVersion?.trim())
60
+ blockedBy.push('fixed_codex_version');
61
+ if (input.protocolMinor !== CLOUD_WORKSPACE_PROTOCOL_MINOR)
62
+ blockedBy.push('protocol_minor');
63
+ if (input.replacesCursorSemantics)
64
+ blockedBy.push('cursor_semantics');
65
+ if (input.deletesUnconfirmedSources)
66
+ blockedBy.push('unconfirmed_sources');
67
+ if (blockedBy.length > 0) {
68
+ return {
69
+ advertise: false,
70
+ code: 'chat_realtime_unavailable',
71
+ logicalRuntimeId: input.logicalRuntimeId,
72
+ blockedBy,
73
+ };
74
+ }
75
+ return { advertise: true, mode: CHAT_REALTIME_V2, logicalRuntimeId: input.logicalRuntimeId };
76
+ }
77
+ /**
78
+ * A requested realtime upload is refused when this logical runtime does not advertise it.
79
+ * Refusal keeps history reads and does not select a whole-turn upload mode.
80
+ * An omitted upload stays on the existing conversation path.
81
+ */
82
+ export function admitRealtimeTurn(input) {
83
+ if (input.requestedUpload === undefined || input.requestedUpload === 'conversation') {
84
+ return { ok: true, mode: 'conversation' };
85
+ }
86
+ if (input.requestedUpload !== CHAT_REALTIME_V2) {
87
+ return { ok: false, code: 'chat_realtime_unavailable', history: 'read', fallback: 'none' };
88
+ }
89
+ const negotiated = negotiateChatRealtime({ local: input.localModes, remote: input.remoteModes });
90
+ if (!negotiated.ok) {
91
+ return { ok: false, code: 'chat_realtime_unavailable', history: 'read', fallback: 'none' };
92
+ }
93
+ return { ok: true, mode: CHAT_REALTIME_V2 };
94
+ }
95
+ //# sourceMappingURL=chat-realtime-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-realtime-admission.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/chat-realtime-admission.ts"],"names":[],"mappings":"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"}