@intentic/sandbox-contract 1.176.3 → 1.209.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.
- package/README.md +65 -0
- package/dist/agent-catalog.d.ts +15 -2
- package/dist/agent-catalog.d.ts.map +1 -1
- package/dist/agent-catalog.js +50 -1
- package/dist/agent-catalog.js.map +1 -1
- package/dist/agent-run-model.d.ts +3 -0
- package/dist/agent-run-model.d.ts.map +1 -0
- package/dist/agent-run-model.js +10 -0
- package/dist/agent-run-model.js.map +1 -0
- package/dist/capability-env.d.ts +2 -0
- package/dist/capability-env.d.ts.map +1 -0
- package/dist/capability-env.js +2 -0
- package/dist/capability-env.js.map +1 -0
- package/dist/chores/chores.d.ts +9 -0
- package/dist/chores/chores.d.ts.map +1 -1
- package/dist/chores/chores.js +257 -18
- package/dist/chores/chores.js.map +1 -1
- package/dist/chores/digest.js +0 -0
- package/dist/chores/digest.js.map +1 -1
- package/dist/chores/extension-update.d.ts +9 -0
- package/dist/chores/extension-update.d.ts.map +1 -0
- package/dist/chores/extension-update.js +15 -0
- package/dist/chores/extension-update.js.map +1 -0
- package/dist/chores/fix-deps.d.ts +10 -0
- package/dist/chores/fix-deps.d.ts.map +1 -0
- package/dist/chores/fix-deps.js +18 -0
- package/dist/chores/fix-deps.js.map +1 -0
- package/dist/chores/index.d.ts +7 -2
- package/dist/chores/index.d.ts.map +1 -1
- package/dist/chores/index.js +4 -1
- package/dist/chores/index.js.map +1 -1
- package/dist/chores/probes.d.ts.map +1 -1
- package/dist/chores/probes.js +127 -3
- package/dist/chores/probes.js.map +1 -1
- package/dist/chores/stack.d.ts +27 -0
- package/dist/chores/stack.d.ts.map +1 -0
- package/dist/chores/stack.js +121 -0
- package/dist/chores/stack.js.map +1 -0
- package/dist/chores/verdict.d.ts +2 -1
- package/dist/chores/verdict.d.ts.map +1 -1
- package/dist/chores/verdict.js +53 -6
- package/dist/chores/verdict.js.map +1 -1
- package/dist/contract-lock.d.ts +3 -0
- package/dist/contract-lock.d.ts.map +1 -0
- package/dist/contract-lock.js +35 -0
- package/dist/contract-lock.js.map +1 -0
- package/dist/contracts/activity.contract.d.ts +10 -0
- package/dist/contracts/activity.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.d.ts +230 -20
- package/dist/contracts/agent.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.js +2 -1
- package/dist/contracts/agent.contract.js.map +1 -1
- package/dist/contracts/agents.contract.d.ts +847 -1
- package/dist/contracts/agents.contract.d.ts.map +1 -1
- package/dist/contracts/agents.contract.js +3 -1
- package/dist/contracts/agents.contract.js.map +1 -1
- package/dist/contracts/automations.contract.d.ts +89 -0
- package/dist/contracts/automations.contract.d.ts.map +1 -1
- package/dist/contracts/automations.contract.js +3 -1
- package/dist/contracts/automations.contract.js.map +1 -1
- package/dist/contracts/capabilities.contract.d.ts +108 -32
- package/dist/contracts/capabilities.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.js +5 -1
- package/dist/contracts/capabilities.contract.js.map +1 -1
- package/dist/contracts/chores.contract.d.ts +43 -0
- package/dist/contracts/chores.contract.d.ts.map +1 -1
- package/dist/contracts/ci.contract.d.ts +5 -0
- package/dist/contracts/ci.contract.d.ts.map +1 -1
- package/dist/contracts/ci.contract.js +2 -2
- package/dist/contracts/ci.contract.js.map +1 -1
- package/dist/contracts/claude.contract.d.ts +3 -14
- package/dist/contracts/claude.contract.d.ts.map +1 -1
- package/dist/contracts/claude.contract.js +2 -3
- package/dist/contracts/claude.contract.js.map +1 -1
- package/dist/contracts/drafts.contract.d.ts +4 -0
- package/dist/contracts/drafts.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.d.ts +28 -12
- package/dist/contracts/endpoints.contract.d.ts.map +1 -1
- package/dist/contracts/endpoints.contract.js +9 -0
- package/dist/contracts/endpoints.contract.js.map +1 -1
- package/dist/contracts/extensions.contract.d.ts +399 -69
- package/dist/contracts/extensions.contract.d.ts.map +1 -1
- package/dist/contracts/extensions.contract.js +15 -1
- package/dist/contracts/extensions.contract.js.map +1 -1
- package/dist/contracts/git.contract.d.ts +209 -11
- package/dist/contracts/git.contract.d.ts.map +1 -1
- package/dist/contracts/git.contract.js +12 -2
- package/dist/contracts/git.contract.js.map +1 -1
- package/dist/contracts/grok.contract.d.ts +0 -13
- package/dist/contracts/grok.contract.d.ts.map +1 -1
- package/dist/contracts/grok.contract.js +1 -2
- package/dist/contracts/grok.contract.js.map +1 -1
- package/dist/contracts/host.contract.d.ts +39 -0
- package/dist/contracts/host.contract.d.ts.map +1 -1
- package/dist/contracts/host.contract.js +3 -2
- package/dist/contracts/host.contract.js.map +1 -1
- package/dist/contracts/loops.contract.d.ts +343 -0
- package/dist/contracts/loops.contract.d.ts.map +1 -0
- package/dist/contracts/loops.contract.js +11 -0
- package/dist/contracts/loops.contract.js.map +1 -0
- package/dist/contracts/panels.contract.d.ts +6 -0
- package/dist/contracts/panels.contract.d.ts.map +1 -1
- package/dist/contracts/personas.contract.d.ts +112 -0
- package/dist/contracts/personas.contract.d.ts.map +1 -0
- package/dist/contracts/personas.contract.js +13 -0
- package/dist/contracts/personas.contract.js.map +1 -0
- package/dist/contracts/ports.contract.d.ts +1 -0
- package/dist/contracts/ports.contract.d.ts.map +1 -1
- package/dist/contracts/prepush.contract.d.ts +1 -0
- package/dist/contracts/prepush.contract.d.ts.map +1 -1
- package/dist/contracts/prepush.contract.js.map +1 -1
- package/dist/contracts/{codex.contract.d.ts → providers.contract.d.ts} +11 -3
- package/dist/contracts/providers.contract.d.ts.map +1 -0
- package/dist/contracts/providers.contract.js +6 -0
- package/dist/contracts/providers.contract.js.map +1 -0
- package/dist/contracts/public.contract.d.ts +24 -0
- package/dist/contracts/public.contract.d.ts.map +1 -0
- package/dist/contracts/public.contract.js +8 -0
- package/dist/contracts/public.contract.js.map +1 -0
- package/dist/contracts/push.contract.d.ts +3 -3
- package/dist/contracts/secrets.contract.d.ts +9 -0
- package/dist/contracts/secrets.contract.d.ts.map +1 -1
- package/dist/contracts/sessions.contract.d.ts +16 -1
- package/dist/contracts/sessions.contract.d.ts.map +1 -1
- package/dist/contracts/sessions.contract.js +1 -1
- package/dist/contracts/sessions.contract.js.map +1 -1
- package/dist/contracts/settings.contract.d.ts +352 -58
- package/dist/contracts/settings.contract.d.ts.map +1 -1
- package/dist/contracts/settings.contract.js +2 -1
- package/dist/contracts/settings.contract.js.map +1 -1
- package/dist/contracts/share.contract.d.ts +55 -0
- package/dist/contracts/share.contract.d.ts.map +1 -0
- package/dist/contracts/share.contract.js +9 -0
- package/dist/contracts/share.contract.js.map +1 -0
- package/dist/contracts/skills.contract.d.ts +41 -0
- package/dist/contracts/skills.contract.d.ts.map +1 -0
- package/dist/contracts/skills.contract.js +9 -0
- package/dist/contracts/skills.contract.js.map +1 -0
- package/dist/contracts/system.contract.d.ts +204 -8
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/contracts/system.contract.js +10 -2
- package/dist/contracts/system.contract.js.map +1 -1
- package/dist/contracts/workflows.contract.d.ts +575 -0
- package/dist/contracts/workflows.contract.d.ts.map +1 -0
- package/dist/contracts/workflows.contract.js +13 -0
- package/dist/contracts/workflows.contract.js.map +1 -0
- package/dist/contracts/workspace.contract.d.ts +18 -4
- package/dist/contracts/workspace.contract.d.ts.map +1 -1
- package/dist/contracts/workspace.contract.js +6 -3
- package/dist/contracts/workspace.contract.js.map +1 -1
- package/dist/conversation-ids.d.ts +2 -0
- package/dist/conversation-ids.d.ts.map +1 -0
- package/dist/conversation-ids.js +113 -0
- package/dist/conversation-ids.js.map +1 -0
- package/dist/events.d.ts +523 -17
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +106 -13
- package/dist/events.js.map +1 -1
- package/dist/history-state.d.ts.map +1 -1
- package/dist/history-state.js +10 -0
- package/dist/history-state.js.map +1 -1
- package/dist/hostnames.d.ts +4 -0
- package/dist/hostnames.d.ts.map +1 -1
- package/dist/hostnames.js +7 -2
- package/dist/hostnames.js.map +1 -1
- package/dist/index.d.ts +3791 -478
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -17
- package/dist/index.js.map +1 -1
- package/dist/listener-protocol.d.ts +77 -0
- package/dist/listener-protocol.d.ts.map +1 -0
- package/dist/listener-protocol.js +33 -0
- package/dist/listener-protocol.js.map +1 -0
- package/dist/model-order.d.ts +1 -0
- package/dist/model-order.d.ts.map +1 -1
- package/dist/model-order.js +16 -0
- package/dist/model-order.js.map +1 -1
- package/dist/output-fields.d.ts +30 -0
- package/dist/output-fields.d.ts.map +1 -0
- package/dist/output-fields.js +57 -0
- package/dist/output-fields.js.map +1 -0
- package/dist/path-refs.d.ts.map +1 -1
- package/dist/path-refs.js.map +1 -1
- package/dist/publish-drafts.d.ts +7 -0
- package/dist/publish-drafts.d.ts.map +1 -0
- package/dist/publish-drafts.js +20 -0
- package/dist/publish-drafts.js.map +1 -0
- package/dist/quick-model.d.ts +2 -1
- package/dist/quick-model.d.ts.map +1 -1
- package/dist/quick-model.js +18 -14
- package/dist/quick-model.js.map +1 -1
- package/dist/routes.d.ts +3 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +63 -0
- package/dist/routes.js.map +1 -1
- package/dist/runtime-state.d.ts +33 -0
- package/dist/runtime-state.d.ts.map +1 -0
- package/dist/runtime-state.js +14 -0
- package/dist/runtime-state.js.map +1 -0
- package/dist/schemas.d.ts +4886 -851
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +993 -192
- package/dist/schemas.js.map +1 -1
- package/dist/search-globs.d.ts +6 -0
- package/dist/search-globs.d.ts.map +1 -0
- package/dist/search-globs.js +39 -0
- package/dist/search-globs.js.map +1 -0
- package/dist/share-paths.d.ts +8 -0
- package/dist/share-paths.d.ts.map +1 -0
- package/dist/share-paths.js +21 -0
- package/dist/share-paths.js.map +1 -0
- package/dist/title.d.ts.map +1 -1
- package/dist/title.js +1 -1
- package/dist/title.js.map +1 -1
- package/dist/tunnel-ids.d.ts +1 -0
- package/dist/tunnel-ids.d.ts.map +1 -1
- package/dist/tunnel-ids.js +1 -0
- package/dist/tunnel-ids.js.map +1 -1
- package/dist/versions.d.ts +4 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +15 -0
- package/dist/versions.js.map +1 -0
- package/dist/workflow-faults.d.ts +4 -0
- package/dist/workflow-faults.d.ts.map +1 -0
- package/dist/workflow-faults.js +115 -0
- package/dist/workflow-faults.js.map +1 -0
- package/dist/workspace-state.d.ts +280 -1
- package/dist/workspace-state.d.ts.map +1 -1
- package/dist/workspace-state.js +163 -21
- package/dist/workspace-state.js.map +1 -1
- package/package.json +30 -6
- package/src/agent-catalog.test.ts +147 -7
- package/src/agent-catalog.ts +233 -21
- package/src/agent-run-model.test.ts +60 -0
- package/src/agent-run-model.ts +51 -0
- package/src/capability-env.ts +10 -0
- package/src/capability-ledger.test.ts +110 -0
- package/src/chores/chores.test.ts +32 -0
- package/src/chores/chores.ts +456 -32
- package/src/chores/digest.ts +0 -0
- package/src/chores/extension-update.ts +37 -0
- package/src/chores/fix-deps.ts +40 -0
- package/src/chores/index.ts +7 -2
- package/src/chores/probes.test.ts +155 -3
- package/src/chores/probes.ts +200 -4
- package/src/chores/stack.test.ts +126 -0
- package/src/chores/stack.ts +244 -0
- package/src/chores/verdict.test.ts +357 -19
- package/src/chores/verdict.ts +95 -21
- package/src/contract-lock.test.ts +17 -0
- package/src/contract-lock.ts +66 -0
- package/src/contracts/agent.contract.ts +6 -0
- package/src/contracts/agents.contract.ts +12 -0
- package/src/contracts/automations.contract.ts +17 -1
- package/src/contracts/capabilities.contract.ts +22 -0
- package/src/contracts/ci.contract.ts +10 -2
- package/src/contracts/claude.contract.ts +8 -4
- package/src/contracts/endpoints.contract.ts +21 -0
- package/src/contracts/extensions.contract.ts +42 -0
- package/src/contracts/git.contract.ts +33 -6
- package/src/contracts/grok.contract.ts +4 -3
- package/src/contracts/host.contract.ts +13 -2
- package/src/contracts/loops.contract.ts +62 -0
- package/src/contracts/personas.contract.ts +56 -0
- package/src/contracts/prepush.contract.ts +4 -3
- package/src/contracts/providers.contract.ts +23 -0
- package/src/contracts/public.contract.ts +14 -0
- package/src/contracts/sessions.contract.ts +5 -1
- package/src/contracts/settings.contract.ts +5 -0
- package/src/contracts/share.contract.ts +20 -0
- package/src/contracts/skills.contract.ts +24 -0
- package/src/contracts/system.contract.ts +27 -3
- package/src/contracts/workflows.contract.ts +78 -0
- package/src/contracts/workspace.contract.ts +10 -2
- package/src/conversation-ids.test.ts +25 -0
- package/src/conversation-ids.ts +160 -0
- package/src/events.test.ts +20 -1
- package/src/events.ts +404 -43
- package/src/history-state.ts +30 -1
- package/src/hostnames.ts +20 -6
- package/src/index.ts +58 -17
- package/src/listener-protocol.ts +96 -0
- package/src/model-order.test.ts +32 -1
- package/src/model-order.ts +56 -3
- package/src/output-fields.ts +111 -0
- package/src/path-refs.test.ts +4 -4
- package/src/path-refs.ts +5 -5
- package/src/publish-drafts.ts +59 -0
- package/src/quick-model.test.ts +70 -27
- package/src/quick-model.ts +76 -40
- package/src/routes.test.ts +91 -3
- package/src/routes.ts +135 -0
- package/src/runtime-state.test.ts +45 -0
- package/src/runtime-state.ts +124 -0
- package/src/schemas.test.ts +16 -29
- package/src/schemas.ts +3475 -552
- package/src/search-globs.test.ts +46 -0
- package/src/search-globs.ts +76 -0
- package/src/share-paths.test.ts +48 -0
- package/src/share-paths.ts +68 -0
- package/src/state-portability.ts +8 -8
- package/src/title.test.ts +20 -1
- package/src/title.ts +12 -3
- package/src/tunnel-ids.ts +15 -1
- package/src/versions.test.ts +39 -0
- package/src/versions.ts +48 -0
- package/src/workflow-faults.test.ts +127 -0
- package/src/workflow-faults.ts +188 -0
- package/src/workspace-state.test.ts +169 -15
- package/src/workspace-state.ts +427 -35
- package/dist/contracts/codex.contract.d.ts.map +0 -1
- package/dist/contracts/codex.contract.js +0 -6
- package/dist/contracts/codex.contract.js.map +0 -1
- package/dist/contracts/gemini.contract.d.ts +0 -16
- package/dist/contracts/gemini.contract.d.ts.map +0 -1
- package/dist/contracts/gemini.contract.js +0 -6
- package/dist/contracts/gemini.contract.js.map +0 -1
- package/dist/contracts/kimi.contract.d.ts +0 -16
- package/dist/contracts/kimi.contract.d.ts.map +0 -1
- package/dist/contracts/kimi.contract.js +0 -6
- package/dist/contracts/kimi.contract.js.map +0 -1
- package/dist/contracts/komodo.contract.d.ts +0 -125
- package/dist/contracts/komodo.contract.d.ts.map +0 -1
- package/dist/contracts/komodo.contract.js +0 -14
- package/dist/contracts/komodo.contract.js.map +0 -1
- package/dist/contracts/memory.contract.d.ts +0 -34
- package/dist/contracts/memory.contract.d.ts.map +0 -1
- package/dist/contracts/memory.contract.js +0 -9
- package/dist/contracts/memory.contract.js.map +0 -1
- package/src/contracts/codex.contract.ts +0 -10
- package/src/contracts/gemini.contract.ts +0 -11
- package/src/contracts/kimi.contract.ts +0 -9
- package/src/contracts/komodo.contract.ts +0 -36
- package/src/contracts/memory.contract.ts +0 -13
package/dist/schemas.js
CHANGED
|
@@ -1,26 +1,60 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { STATE_DIR } from "@intentic/constants";
|
|
2
|
+
import { ExtensionManifestSchema } from "@intentic/extension-manifest";
|
|
2
3
|
import { RegistryEntrySchema } from "@intentic/registry";
|
|
3
4
|
import { z } from "zod";
|
|
5
|
+
import { OutputFieldsSchema } from "./output-fields.js";
|
|
4
6
|
export const OkSchema = z.object({ ok: z.literal(true) });
|
|
7
|
+
export const MemberRoleSchema = z.enum(["viewer", "collaborator", "maintainer", "owner"]);
|
|
8
|
+
export const GrantedRoleSchema = z.enum(["viewer", "collaborator", "maintainer"]);
|
|
9
|
+
const MEMBER_ROLE_RANK = { viewer: 0, collaborator: 1, maintainer: 2, owner: 3 };
|
|
10
|
+
export const roleAtLeast = (role, floor) => MEMBER_ROLE_RANK[role] >= MEMBER_ROLE_RANK[floor];
|
|
5
11
|
export const RepoParamSchema = z.object({ repo: z.string() });
|
|
6
|
-
export const SessionTranscriptMessageSchema = z.object({ role: z.enum(["user", "assistant"]), text: z.string() });
|
|
7
12
|
export const NATIVE_PROVIDERS = ["claude", "codex", "grok", "kimi", "gemini"];
|
|
8
13
|
export const AgentProviderSchema = z.string().min(1);
|
|
14
|
+
export const NativeProviderParamSchema = z.object({ provider: z.enum(NATIVE_PROVIDERS) });
|
|
9
15
|
export const AgentHarnessSchema = z.enum(["native", "claude-code"]);
|
|
16
|
+
export const RepoBaseSchema = z.object({ repo: z.string(), base: z.string().min(1) });
|
|
10
17
|
export const EditorContextSchema = z.object({
|
|
11
18
|
file: z.string().min(1),
|
|
12
19
|
startLine: z.number().int().min(1).optional(),
|
|
13
20
|
endLine: z.number().int().min(1).optional(),
|
|
14
21
|
selection: z.string().max(20_000).optional(),
|
|
15
22
|
});
|
|
16
|
-
const ConversationIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/);
|
|
23
|
+
export const ConversationIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/);
|
|
24
|
+
const entryId = z
|
|
25
|
+
.string()
|
|
26
|
+
.min(1)
|
|
27
|
+
.max(60)
|
|
28
|
+
.regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/);
|
|
17
29
|
export const AgentOriginSchema = z.object({
|
|
18
30
|
automationId: z.string(),
|
|
19
31
|
provider: z.string(),
|
|
20
32
|
channelId: z.string().optional(),
|
|
21
33
|
author: z.string().optional(),
|
|
22
34
|
});
|
|
35
|
+
export const WakeSourceSchema = z.enum(["schedule", "event", "listener", "webchat", "workspace", "workflow"]);
|
|
36
|
+
export const AdmissionRuleSchema = z.enum(["allow", "hold", "deny"]);
|
|
37
|
+
export const CommandClassSchema = z.enum([
|
|
38
|
+
"git.destructive",
|
|
39
|
+
"files.destructive",
|
|
40
|
+
"secrets.access",
|
|
41
|
+
"package.publish",
|
|
42
|
+
"network.outbound",
|
|
43
|
+
]);
|
|
44
|
+
export const AdmissionPolicySchema = z.object({
|
|
45
|
+
schedule: AdmissionRuleSchema.default("allow"),
|
|
46
|
+
event: AdmissionRuleSchema.default("allow"),
|
|
47
|
+
listener: AdmissionRuleSchema.default("allow"),
|
|
48
|
+
webchat: AdmissionRuleSchema.default("allow"),
|
|
49
|
+
workspace: AdmissionRuleSchema.default("allow"),
|
|
50
|
+
workflow: z.enum(["allow", "deny"]).default("allow"),
|
|
51
|
+
});
|
|
23
52
|
export const PermissionModeSchema = z.enum(["default", "acceptEdits", "plan", "bypassPermissions"]);
|
|
53
|
+
export const ForkedFromSchema = z.object({
|
|
54
|
+
conversationId: ConversationIdSchema,
|
|
55
|
+
index: z.number().int().nonnegative(),
|
|
56
|
+
files: z.enum(["then", "now"]),
|
|
57
|
+
});
|
|
24
58
|
export const AgentTurnSchema = z
|
|
25
59
|
.object({
|
|
26
60
|
prompt: z.string(),
|
|
@@ -29,42 +63,159 @@ export const AgentTurnSchema = z
|
|
|
29
63
|
agent: AgentProviderSchema.optional(),
|
|
30
64
|
harness: AgentHarnessSchema.optional(),
|
|
31
65
|
account: z.string().optional(),
|
|
66
|
+
actsAs: entryId.optional(),
|
|
32
67
|
sessionId: z.string().optional(),
|
|
33
68
|
conversationId: ConversationIdSchema.optional(),
|
|
34
69
|
isolated: z.boolean().optional(),
|
|
70
|
+
worktreeBase: z.array(RepoBaseSchema).min(1).max(50).optional(),
|
|
71
|
+
autoLand: z.boolean().optional(),
|
|
35
72
|
origin: AgentOriginSchema.optional(),
|
|
36
|
-
|
|
73
|
+
forkOf: z
|
|
74
|
+
.object({
|
|
75
|
+
conversationId: ConversationIdSchema,
|
|
76
|
+
keep: z.number().int().nonnegative(),
|
|
77
|
+
files: z.enum(["then", "now"]),
|
|
78
|
+
})
|
|
79
|
+
.optional(),
|
|
37
80
|
model: z.string().optional(),
|
|
81
|
+
unattended: z.boolean().optional(),
|
|
82
|
+
outsideWake: z.string().min(1).optional(),
|
|
38
83
|
permissionMode: PermissionModeSchema.optional(),
|
|
39
84
|
allowedTools: z.array(z.string().min(1)).optional(),
|
|
40
85
|
effort: z.string().optional(),
|
|
41
86
|
thinking: z.boolean().optional(),
|
|
87
|
+
fast: z.boolean().optional(),
|
|
42
88
|
editorContext: EditorContextSchema.optional(),
|
|
43
89
|
})
|
|
44
90
|
.refine((turn) => turn.prompt.trim().length > 0 || (turn.attachments?.length ?? 0) > 0, {
|
|
45
91
|
message: "prompt or attachments required",
|
|
46
|
-
})
|
|
47
|
-
.refine((turn) => turn.sessionId === undefined || turn.history === undefined, {
|
|
48
|
-
message: "history and sessionId are mutually exclusive",
|
|
49
92
|
})
|
|
50
93
|
.refine((turn) => turn.isolated !== true || turn.conversationId !== undefined, {
|
|
51
94
|
message: "isolated requires conversationId",
|
|
95
|
+
})
|
|
96
|
+
.refine((turn) => turn.worktreeBase === undefined || (turn.isolated === true && turn.conversationId !== undefined), {
|
|
97
|
+
message: "worktreeBase requires an isolated conversationId",
|
|
52
98
|
})
|
|
53
99
|
.refine((turn) => turn.origin === undefined || turn.conversationId !== undefined, {
|
|
54
100
|
message: "origin requires conversationId",
|
|
101
|
+
})
|
|
102
|
+
.refine((turn) => turn.forkOf === undefined || turn.conversationId !== undefined, {
|
|
103
|
+
message: "forkOf requires conversationId",
|
|
104
|
+
})
|
|
105
|
+
.refine((turn) => turn.forkOf?.files !== "then" || turn.isolated === true, {
|
|
106
|
+
message: 'forkOf.files "then" requires isolated',
|
|
55
107
|
});
|
|
108
|
+
export const AgentRunPickSchema = z.object({ agent: z.string().min(1), model: z.string().min(1) }).optional();
|
|
56
109
|
export const StartedTurnSchema = z.object({ run: z.string() });
|
|
57
110
|
export const AttachTurnSchema = z.object({
|
|
58
111
|
conversationId: ConversationIdSchema,
|
|
59
112
|
run: z.string().optional(),
|
|
60
113
|
after: z.number().int().min(0).optional(),
|
|
61
114
|
});
|
|
115
|
+
export const LoopContextSchema = z.enum(["fresh", "continue"]);
|
|
116
|
+
export const LoopOutputSchema = z.discriminatedUnion("kind", [
|
|
117
|
+
z.object({ kind: z.literal("none") }),
|
|
118
|
+
z.object({ kind: z.literal("claim") }),
|
|
119
|
+
z.object({ kind: z.literal("json"), fields: OutputFieldsSchema }),
|
|
120
|
+
]);
|
|
121
|
+
export const LoopCheckSchema = z.discriminatedUnion("kind", [
|
|
122
|
+
z.object({ kind: z.literal("command"), command: z.string().min(1) }),
|
|
123
|
+
z.object({ kind: z.literal("judge"), rubric: z.string().min(1), model: z.string().optional() }),
|
|
124
|
+
]);
|
|
125
|
+
export const LoopDocumentSchema = z.object({
|
|
126
|
+
done: z.boolean(),
|
|
127
|
+
reason: z.string(),
|
|
128
|
+
evidence: z.string().optional(),
|
|
129
|
+
data: z.record(z.string(), z.unknown()).optional(),
|
|
130
|
+
});
|
|
131
|
+
const LOOP_ITERATIONS_MAX = 50;
|
|
132
|
+
export const LoopSchema = z.object({
|
|
133
|
+
conversationId: ConversationIdSchema,
|
|
134
|
+
goal: z.string().min(1),
|
|
135
|
+
prompt: z.string().min(1),
|
|
136
|
+
context: LoopContextSchema,
|
|
137
|
+
output: LoopOutputSchema,
|
|
138
|
+
checks: z.array(LoopCheckSchema),
|
|
139
|
+
maxIterations: z.number().int().min(1).max(LOOP_ITERATIONS_MAX),
|
|
140
|
+
maxSpendUsd: z.number().positive().optional(),
|
|
141
|
+
stallLimit: z.number().int().min(1),
|
|
142
|
+
isolated: z.boolean(),
|
|
143
|
+
agent: AgentProviderSchema.optional(),
|
|
144
|
+
harness: AgentHarnessSchema.optional(),
|
|
145
|
+
account: z.string().optional(),
|
|
146
|
+
model: z.string().optional(),
|
|
147
|
+
actsAs: entryId.optional(),
|
|
148
|
+
worktreeBase: z.array(RepoBaseSchema).min(1).max(50).optional(),
|
|
149
|
+
autoLand: z.boolean().optional(),
|
|
150
|
+
});
|
|
151
|
+
export const loopCanConverge = (loop) => loop.output.kind !== "none" || loop.checks.length > 0;
|
|
152
|
+
export const LOOP_DIR = `${STATE_DIR}/artifacts/loops`;
|
|
153
|
+
export const LoopIterationSchema = z.object({
|
|
154
|
+
n: z.number().int().min(1),
|
|
155
|
+
at: z.number(),
|
|
156
|
+
outcome: z.enum(["continue", "done", "error"]),
|
|
157
|
+
detail: z.string().optional(),
|
|
158
|
+
costUsd: z.number().optional(),
|
|
159
|
+
changed: z.boolean(),
|
|
160
|
+
sessionId: z.string().optional(),
|
|
161
|
+
});
|
|
162
|
+
export const LoopStateSchema = z.enum(["running", "done", "exhausted", "stalled", "overspent", "stopped", "error"]);
|
|
163
|
+
export const LoopRecordSchema = LoopSchema.extend({
|
|
164
|
+
state: LoopStateSchema,
|
|
165
|
+
startedAt: z.number(),
|
|
166
|
+
endedAt: z.number().optional(),
|
|
167
|
+
resumed: z.number().int().min(0),
|
|
168
|
+
detail: z.string().optional(),
|
|
169
|
+
iterations: z.array(LoopIterationSchema),
|
|
170
|
+
});
|
|
171
|
+
export const LoopsListSchema = z.object({ loops: z.array(LoopRecordSchema) });
|
|
172
|
+
export const LoopIdParamSchema = z.object({ conversationId: ConversationIdSchema });
|
|
173
|
+
export const LoopDesignSchema = z.object({
|
|
174
|
+
id: entryId,
|
|
175
|
+
name: z.string().min(1).max(60),
|
|
176
|
+
description: z.string().max(280).optional(),
|
|
177
|
+
prompt: z.string().optional(),
|
|
178
|
+
context: LoopContextSchema,
|
|
179
|
+
output: LoopOutputSchema,
|
|
180
|
+
checks: z.array(LoopCheckSchema),
|
|
181
|
+
maxIterations: z.number().int().min(1).max(LOOP_ITERATIONS_MAX),
|
|
182
|
+
maxSpendUsd: z.number().positive().optional(),
|
|
183
|
+
stallLimit: z.number().int().min(1),
|
|
184
|
+
});
|
|
185
|
+
export const LoopDesignsListSchema = z.object({ designs: z.array(LoopDesignSchema) });
|
|
186
|
+
export const LoopDesignSaveSchema = z.object({ design: LoopDesignSchema, create: z.boolean() });
|
|
187
|
+
export const LoopDesignIdParamSchema = z.object({ id: entryId });
|
|
188
|
+
export const loopFromDesign = (design, aim) => ({
|
|
189
|
+
conversationId: aim.conversationId,
|
|
190
|
+
goal: aim.goal,
|
|
191
|
+
prompt: design.prompt ?? "Work towards the goal above. Do the next most useful thing.",
|
|
192
|
+
context: design.context,
|
|
193
|
+
output: design.output,
|
|
194
|
+
checks: design.checks,
|
|
195
|
+
maxIterations: design.maxIterations,
|
|
196
|
+
...(design.maxSpendUsd === undefined ? {} : { maxSpendUsd: design.maxSpendUsd }),
|
|
197
|
+
stallLimit: design.stallLimit,
|
|
198
|
+
isolated: aim.isolated,
|
|
199
|
+
});
|
|
200
|
+
export const loopDesignLine = (design) => {
|
|
201
|
+
const command = design.checks.find((check) => check.kind === "command");
|
|
202
|
+
const ends = command !== undefined
|
|
203
|
+
? command.command
|
|
204
|
+
: design.checks.some((check) => check.kind === "judge")
|
|
205
|
+
? "a reviewer agrees"
|
|
206
|
+
: design.output.kind === "none"
|
|
207
|
+
? "nothing checks it"
|
|
208
|
+
: "the agent says so";
|
|
209
|
+
const ceilings = [`${design.maxIterations} rounds`, design.maxSpendUsd === undefined ? `` : `$${design.maxSpendUsd}`].filter((part) => part !== ``);
|
|
210
|
+
return [ends, ...ceilings].join(" · ");
|
|
211
|
+
};
|
|
62
212
|
export const AgentStatusSchema = z.enum([
|
|
63
213
|
"idle",
|
|
64
214
|
"running",
|
|
65
215
|
"awaiting",
|
|
66
216
|
"stopping",
|
|
67
217
|
"stopped",
|
|
218
|
+
"resuming",
|
|
68
219
|
"ready",
|
|
69
220
|
"landed",
|
|
70
221
|
"conflict",
|
|
@@ -80,22 +231,48 @@ export const AgentAttentionSchema = z.object({
|
|
|
80
231
|
plan: z.boolean(),
|
|
81
232
|
question: z.boolean(),
|
|
82
233
|
permission: z.boolean(),
|
|
234
|
+
service: z.boolean(),
|
|
235
|
+
capability: z.boolean(),
|
|
83
236
|
conflict: z.boolean(),
|
|
84
237
|
});
|
|
238
|
+
export const LandedMessageSchema = z.object({
|
|
239
|
+
subject: z.string(),
|
|
240
|
+
note: z.string().optional(),
|
|
241
|
+
breaking: z.string().optional(),
|
|
242
|
+
});
|
|
243
|
+
export const LandedMessageStepSchema = z.object({
|
|
244
|
+
provider: z.string().min(1),
|
|
245
|
+
model: z.string().min(1),
|
|
246
|
+
status: z.enum(["asking", "answered", "refused", "skipped"]),
|
|
247
|
+
at: z.number().optional(),
|
|
248
|
+
ms: z.number().optional(),
|
|
249
|
+
reason: z.string().optional(),
|
|
250
|
+
});
|
|
251
|
+
export const LandedMessageDraftSchema = z.object({
|
|
252
|
+
startedAt: z.number(),
|
|
253
|
+
steps: z.array(LandedMessageStepSchema),
|
|
254
|
+
outcome: z.enum(["written", "failed"]).optional(),
|
|
255
|
+
reason: z.string().optional(),
|
|
256
|
+
finishedAt: z.number().optional(),
|
|
257
|
+
});
|
|
85
258
|
export const AgentSummarySchema = z.object({
|
|
86
259
|
id: z.string(),
|
|
87
260
|
sessionId: z.string().optional(),
|
|
88
261
|
title: z.string().optional(),
|
|
89
262
|
status: AgentStatusSchema,
|
|
263
|
+
failure: z.string().optional(),
|
|
90
264
|
provider: AgentProviderSchema,
|
|
91
265
|
harness: AgentHarnessSchema,
|
|
92
266
|
model: z.string().optional(),
|
|
93
267
|
effort: z.string().optional(),
|
|
94
268
|
thinking: z.boolean().optional(),
|
|
269
|
+
fast: z.boolean().optional(),
|
|
95
270
|
account: z.string().optional(),
|
|
96
271
|
branch: z.string().optional(),
|
|
97
272
|
autoLand: z.boolean().optional(),
|
|
273
|
+
landRequested: z.object({ email: z.string(), name: z.string().optional(), at: z.number() }).optional(),
|
|
98
274
|
origin: AgentOriginSchema.optional(),
|
|
275
|
+
forkedFrom: ForkedFromSchema.optional(),
|
|
99
276
|
base: z.string().optional(),
|
|
100
277
|
costUsd: z.number().optional(),
|
|
101
278
|
inputTokens: z.number().optional(),
|
|
@@ -103,6 +280,8 @@ export const AgentSummarySchema = z.object({
|
|
|
103
280
|
contextTokens: z.number().optional(),
|
|
104
281
|
contextWindow: z.number().optional(),
|
|
105
282
|
activity: AgentActivitySchema.optional(),
|
|
283
|
+
landedMessageDraft: LandedMessageDraftSchema.optional(),
|
|
284
|
+
landedMessage: LandedMessageSchema.optional(),
|
|
106
285
|
startedAt: z.number().optional(),
|
|
107
286
|
updatedAt: z.number(),
|
|
108
287
|
seenAt: z.number().optional(),
|
|
@@ -111,18 +290,33 @@ export const AgentSummarySchema = z.object({
|
|
|
111
290
|
toolUses: z.number().optional(),
|
|
112
291
|
subagents: z.object({ running: z.number(), total: z.number() }).optional(),
|
|
113
292
|
diff: z.object({ files: z.number(), insertions: z.number(), deletions: z.number() }).optional(),
|
|
293
|
+
landedPresence: z.object({ landed: z.number(), present: z.number() }).optional(),
|
|
294
|
+
loop: z
|
|
295
|
+
.object({ state: LoopStateSchema, iteration: z.number().int().min(0), maxIterations: z.number().int().min(1), goal: z.string() })
|
|
296
|
+
.optional(),
|
|
297
|
+
workflow: z
|
|
298
|
+
.object({
|
|
299
|
+
runId: z.string(),
|
|
300
|
+
name: z.string(),
|
|
301
|
+
step: z.string(),
|
|
302
|
+
index: z.number().int().min(1),
|
|
303
|
+
total: z.number().int().min(1),
|
|
304
|
+
})
|
|
305
|
+
.optional(),
|
|
114
306
|
archivedAt: z.number().optional(),
|
|
115
307
|
});
|
|
116
|
-
export const AgentsListSchema = z.object({ agents: z.array(AgentSummarySchema), rev: z.number() });
|
|
117
308
|
export const AgentIdSchema = z.object({ id: z.string().min(1) });
|
|
118
309
|
export const AgentArchiveSchema = z.object({ ids: z.array(z.string().min(1)).max(500).optional() });
|
|
119
310
|
export const AgentIdsSchema = z.object({ ids: z.array(z.string().min(1)).min(1).max(500) });
|
|
120
311
|
export const AgentsMovedSchema = z.object({ moved: z.array(AgentSummarySchema), rev: z.number() });
|
|
121
312
|
export const AgentsRemovedSchema = z.object({ removed: z.array(z.string()) });
|
|
122
|
-
export const AgentSearchQuerySchema = z.object({ query: z.string().trim().min(2) });
|
|
123
|
-
export const
|
|
313
|
+
export const AgentSearchQuerySchema = z.object({ query: z.string().trim().min(2), caseSensitive: z.stringbool().optional() });
|
|
314
|
+
export const SpeakerSchema = z.enum(["user", "agent"]);
|
|
315
|
+
export const MatchSnippetSchema = z.object({ text: z.string(), speaker: SpeakerSchema });
|
|
316
|
+
export const AgentMatchSchema = z.object({ id: z.string(), snippet: MatchSnippetSchema.optional() });
|
|
124
317
|
export const AgentSearchResultSchema = z.object({ matches: z.array(AgentMatchSchema), scanned: z.number() });
|
|
125
318
|
export const AgentRenameSchema = z.object({ id: z.string().min(1), title: z.string().trim().min(1).max(80) });
|
|
319
|
+
export const AgentPlaceSchema = z.object({ id: z.string().min(1), text: z.string().trim().min(1).max(8_000) });
|
|
126
320
|
export const AgentAutoLandSchema = z.object({ id: z.string().min(1), autoLand: z.boolean().nullable() });
|
|
127
321
|
export const AgentFileDiffQuerySchema = z.object({ id: z.string().min(1), repo: z.string().min(1), path: z.string().min(1) });
|
|
128
322
|
export const LandConflictReasonSchema = z.enum(["workspace", "diverged", "binary"]);
|
|
@@ -140,7 +334,13 @@ export const LandResultSchema = z.object({
|
|
|
140
334
|
held: z.boolean().optional(),
|
|
141
335
|
});
|
|
142
336
|
export const LandModeSchema = z.enum(["check", "merge", "measure"]);
|
|
143
|
-
export const
|
|
337
|
+
export const AgentSpanSchema = z.enum(["cumulative", "outstanding"]);
|
|
338
|
+
export const AgentLandSchema = z.object({
|
|
339
|
+
id: z.string().min(1),
|
|
340
|
+
mode: LandModeSchema.optional(),
|
|
341
|
+
span: AgentSpanSchema.optional(),
|
|
342
|
+
force: z.boolean().optional(),
|
|
343
|
+
});
|
|
144
344
|
export const KeyedProviderSchema = z.enum(["codex", "grok", "kimi", "gemini"]);
|
|
145
345
|
export const UsageWindowSchema = z.object({
|
|
146
346
|
kind: z.string(),
|
|
@@ -154,7 +354,7 @@ export const AccountUsageSchema = z.object({
|
|
|
154
354
|
});
|
|
155
355
|
export const ProviderRefusalSchema = z.object({
|
|
156
356
|
at: z.number(),
|
|
157
|
-
kind: z.enum(["limit", "auth"]),
|
|
357
|
+
kind: z.enum(["limit", "auth", "entitlement"]),
|
|
158
358
|
message: z.string(),
|
|
159
359
|
account: z.string().optional(),
|
|
160
360
|
});
|
|
@@ -175,7 +375,6 @@ export const AgentReplySchema = z.discriminatedUnion("kind", [
|
|
|
175
375
|
kind: z.literal("plan"),
|
|
176
376
|
requestId: z.string().min(1),
|
|
177
377
|
approve: z.boolean(),
|
|
178
|
-
mode: PermissionModeSchema.optional(),
|
|
179
378
|
feedback: z.string().optional(),
|
|
180
379
|
}),
|
|
181
380
|
z.object({
|
|
@@ -190,6 +389,28 @@ export const AgentReplySchema = z.discriminatedUnion("kind", [
|
|
|
190
389
|
decision: z.enum(["once", "always", "deny"]),
|
|
191
390
|
feedback: z.string().optional(),
|
|
192
391
|
}),
|
|
392
|
+
z.object({
|
|
393
|
+
kind: z.literal("browser_help"),
|
|
394
|
+
requestId: z.string().min(1),
|
|
395
|
+
helped: z.boolean(),
|
|
396
|
+
note: z.string().optional(),
|
|
397
|
+
}),
|
|
398
|
+
z.object({
|
|
399
|
+
kind: z.literal("terminal_help"),
|
|
400
|
+
requestId: z.string().min(1),
|
|
401
|
+
helped: z.boolean(),
|
|
402
|
+
note: z.string().optional(),
|
|
403
|
+
}),
|
|
404
|
+
z.object({
|
|
405
|
+
kind: z.literal("service_offer"),
|
|
406
|
+
requestId: z.string().min(1),
|
|
407
|
+
approve: z.boolean(),
|
|
408
|
+
}),
|
|
409
|
+
z.object({
|
|
410
|
+
kind: z.literal("capability_offer"),
|
|
411
|
+
requestId: z.string().min(1),
|
|
412
|
+
connect: z.boolean(),
|
|
413
|
+
}),
|
|
193
414
|
]);
|
|
194
415
|
export const SteerSchema = z
|
|
195
416
|
.object({
|
|
@@ -208,6 +429,7 @@ export const RateLimitInfoSchema = z.object({
|
|
|
208
429
|
rateLimitType: z.string().optional(),
|
|
209
430
|
utilization: z.number().optional(),
|
|
210
431
|
});
|
|
432
|
+
export const FastModeStateSchema = z.enum(["off", "cooldown", "on"]);
|
|
211
433
|
export const OauthAccountSchema = z.object({
|
|
212
434
|
id: z.string(),
|
|
213
435
|
label: z.string(),
|
|
@@ -220,6 +442,7 @@ export const OauthAccountSchema = z.object({
|
|
|
220
442
|
usage: AccountUsageSchema.optional(),
|
|
221
443
|
});
|
|
222
444
|
export const OauthAccountListSchema = z.object({ accounts: z.array(OauthAccountSchema) });
|
|
445
|
+
export const AccountListQuerySchema = z.object({ force: z.stringbool().default(false) });
|
|
223
446
|
export const AccountIdSchema = z.object({ id: z.string().min(1) });
|
|
224
447
|
export const AccountRenameSchema = z.object({ id: z.string().min(1), label: z.string().max(80) });
|
|
225
448
|
export const OauthExchangeSchema = z.object({
|
|
@@ -255,42 +478,110 @@ export const SessionSummarySchema = z.object({
|
|
|
255
478
|
id: z.string(),
|
|
256
479
|
title: z.string(),
|
|
257
480
|
updatedAt: z.number(),
|
|
258
|
-
snippet:
|
|
481
|
+
snippet: MatchSnippetSchema.optional(),
|
|
259
482
|
});
|
|
260
483
|
export const SessionsListSchema = z.object({ sessions: z.array(SessionSummarySchema) });
|
|
261
484
|
export const SystemPromptModeSchema = z.enum(["intentic", "claude", "custom"]);
|
|
262
485
|
export const BuiltinPromptSchema = z.object({ base: z.enum(["intentic", "claude"]) });
|
|
486
|
+
export const RuleMomentSchema = z.enum([
|
|
487
|
+
"turn.ending",
|
|
488
|
+
"push.starting",
|
|
489
|
+
"agent.finished",
|
|
490
|
+
]);
|
|
491
|
+
export const RuleBuiltinSchema = z.enum(["verify-edits"]);
|
|
492
|
+
export const RuleActionSchema = z.discriminatedUnion("kind", [
|
|
493
|
+
z.object({
|
|
494
|
+
kind: z.literal("command"),
|
|
495
|
+
command: z.string().max(500),
|
|
496
|
+
timeoutMs: z.number().min(60_000).max(3_600_000).default(900_000),
|
|
497
|
+
}),
|
|
498
|
+
z.object({ kind: z.literal("instruct"), text: z.string().min(1).max(4000) }),
|
|
499
|
+
z.object({ kind: z.literal("verdict"), verdict: z.enum(["allow", "hold"]) }),
|
|
500
|
+
z.object({ kind: z.literal("builtin"), name: RuleBuiltinSchema }),
|
|
501
|
+
]);
|
|
502
|
+
export const RuleConditionSchema = z.object({
|
|
503
|
+
repo: z.string().min(1).optional(),
|
|
504
|
+
paths: z.array(z.string().min(1)).max(20).optional(),
|
|
505
|
+
outcome: z.array(z.enum(["clean", "error", "conflict"])).optional(),
|
|
506
|
+
});
|
|
507
|
+
const MOMENT_ACTIONS = {
|
|
508
|
+
"turn.ending": ["builtin", "instruct", "command"],
|
|
509
|
+
"push.starting": ["command"],
|
|
510
|
+
"agent.finished": ["verdict"],
|
|
511
|
+
};
|
|
512
|
+
export const RuleSchema = z
|
|
513
|
+
.object({
|
|
514
|
+
id: z.string().regex(/^[a-z0-9][a-z0-9-]*$/),
|
|
515
|
+
label: z.string().min(1).max(80),
|
|
516
|
+
moment: RuleMomentSchema,
|
|
517
|
+
when: RuleConditionSchema.optional(),
|
|
518
|
+
action: RuleActionSchema,
|
|
519
|
+
enabled: z.boolean().default(true),
|
|
520
|
+
})
|
|
521
|
+
.refine((rule) => MOMENT_ACTIONS[rule.moment].includes(rule.action.kind), {
|
|
522
|
+
message: "that action cannot stand at that moment",
|
|
523
|
+
path: ["action"],
|
|
524
|
+
});
|
|
525
|
+
export const RuleFiringsSchema = z.record(z.string(), z.number());
|
|
526
|
+
export const SkillOriginSchema = z.enum(["builtin", "own", "capability", "extension", "plugin", "persona", "dropped"]);
|
|
527
|
+
export const SkillNameSchema = z.string().regex(/^[a-z0-9][a-z0-9-]*$/, "a skill name is lowercase letters, digits and dashes");
|
|
528
|
+
export const SkillSummarySchema = z.object({
|
|
529
|
+
id: z.string(),
|
|
530
|
+
name: z.string(),
|
|
531
|
+
description: z.string(),
|
|
532
|
+
origin: SkillOriginSchema,
|
|
533
|
+
owner: z.string().optional(),
|
|
534
|
+
enabled: z.boolean(),
|
|
535
|
+
switchable: z.boolean(),
|
|
536
|
+
editable: z.boolean(),
|
|
537
|
+
removable: z.boolean(),
|
|
538
|
+
});
|
|
539
|
+
export const SkillsListSchema = z.array(SkillSummarySchema);
|
|
540
|
+
export const SkillBodySchema = z.object({
|
|
541
|
+
id: z.string(),
|
|
542
|
+
name: z.string(),
|
|
543
|
+
body: z.string(),
|
|
544
|
+
});
|
|
545
|
+
export const SkillIdSchema = z.object({ id: z.string().min(1) });
|
|
546
|
+
export const SkillDraftSchema = z.object({
|
|
547
|
+
name: SkillNameSchema,
|
|
548
|
+
description: z.string().min(1).max(1024),
|
|
549
|
+
body: z.string().min(1),
|
|
550
|
+
});
|
|
551
|
+
export const SkillRemoveSchema = z.object({ name: SkillNameSchema });
|
|
263
552
|
export const SandboxSettingsSchema = z.object({
|
|
264
553
|
stableSystemPrompt: z.boolean().default(false),
|
|
265
|
-
skills: z.array(z.string()).default([]),
|
|
554
|
+
skills: z.array(z.string()).default(["lsp"]),
|
|
266
555
|
hashlineEdits: z.boolean().default(false),
|
|
267
556
|
terseOutput: z.boolean().default(false),
|
|
268
557
|
terseHoldout: z.number().min(0).max(1).default(0),
|
|
269
558
|
systemPromptMode: SystemPromptModeSchema.default("intentic"),
|
|
270
559
|
systemPrompt: z.string().max(20000).default(""),
|
|
271
560
|
iqSearch: z.boolean().default(false),
|
|
561
|
+
iqSearchHoldout: z.number().min(0).max(1).default(0),
|
|
272
562
|
iqContext: z.boolean().default(false),
|
|
273
563
|
iqContextHoldout: z.number().min(0).max(1).default(0),
|
|
274
564
|
outputCleaners: z.string().default("off"),
|
|
275
565
|
outputHoldout: z.number().min(0).max(1).default(0),
|
|
276
|
-
|
|
277
|
-
|
|
566
|
+
quickModel: z.array(z.string()).max(10).default([]),
|
|
567
|
+
changelogRepos: z.array(z.string()).max(50).default([]),
|
|
568
|
+
agentRunModels: z.array(z.string()).max(10).default([]),
|
|
569
|
+
agentRunEffort: z.string().default(""),
|
|
278
570
|
agentRetentionDays: z.number().min(0).max(365).default(3),
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
prepushCommand: z.string().max(500).default(""),
|
|
283
|
-
prepushTimeoutMs: z.number().min(60_000).max(3_600_000).default(900_000),
|
|
284
|
-
prepushFixModel: z.string().default(""),
|
|
285
|
-
prepushFixEffort: z.string().default(""),
|
|
286
|
-
verifyOnStop: z.boolean().default(false),
|
|
571
|
+
resumeAfterOutage: z.boolean().default(false),
|
|
572
|
+
autoResumeOnRestart: z.boolean().default(false),
|
|
573
|
+
rules: z.array(RuleSchema).max(50).default([]),
|
|
287
574
|
automationFailureLimit: z.number().min(0).max(20).default(0),
|
|
575
|
+
admission: AdmissionPolicySchema.prefault({}),
|
|
576
|
+
actionRules: z.record(z.string(), AdmissionRuleSchema).default({}),
|
|
577
|
+
commandRules: z.partialRecord(CommandClassSchema, AdmissionRuleSchema).default({}),
|
|
578
|
+
subagentsAtOnce: z.number().min(1).max(200).default(20),
|
|
579
|
+
subagentsPerTurn: z.number().min(1).max(2000).default(200),
|
|
580
|
+
subagentDepth: z.number().min(1).max(10).default(3),
|
|
288
581
|
});
|
|
289
582
|
export const BuiltinPromptTextSchema = z.object({ text: z.string(), version: z.string() });
|
|
290
583
|
export const SavingsStageSchema = z.object({ id: z.string(), commands: z.number(), savedTokens: z.number() });
|
|
291
584
|
export const InputSavingsSchema = z.object({
|
|
292
|
-
source: z.enum(["native", "rtk"]).default("native"),
|
|
293
|
-
windowed: z.boolean(),
|
|
294
585
|
updatedAt: z.number().optional(),
|
|
295
586
|
commands: z.number(),
|
|
296
587
|
rawTokens: z.number(),
|
|
@@ -298,22 +589,31 @@ export const InputSavingsSchema = z.object({
|
|
|
298
589
|
savedPct: z.number(),
|
|
299
590
|
perCleaner: z.array(SavingsStageSchema),
|
|
300
591
|
holdout: z.object({ cleaned: z.number(), heldOut: z.number(), measuredSavedPct: z.number().optional() }),
|
|
301
|
-
gaps: z.array(z.object({ command: z.string(), tokens: z.number() })),
|
|
592
|
+
gaps: z.array(z.object({ command: z.string(), commands: z.number(), tokens: z.number() })),
|
|
302
593
|
});
|
|
303
594
|
export const SavingsArmSchema = z.object({ turns: z.number(), mean: z.number() });
|
|
304
|
-
export const
|
|
305
|
-
|
|
595
|
+
export const IqContextOutcomeSchema = z.enum(["note", "ineligible", "deadline", "indexing", "no-hits", "failed"]);
|
|
596
|
+
export const TurnMetricReadingSchema = z.object({
|
|
597
|
+
metric: z.enum(["proseChars", "searchCalls", "openingSearches"]),
|
|
306
598
|
on: SavingsArmSchema,
|
|
307
599
|
off: SavingsArmSchema,
|
|
308
|
-
|
|
309
|
-
minTurns: z.number(),
|
|
600
|
+
controlTurnsNeeded: z.number().optional(),
|
|
310
601
|
marginPct: z.number().optional(),
|
|
311
602
|
deltaPct: z.number().optional(),
|
|
312
603
|
saved: z.number().optional(),
|
|
313
604
|
});
|
|
605
|
+
export const TurnExperimentSchema = z.object({
|
|
606
|
+
metrics: z.tuple([TurnMetricReadingSchema], TurnMetricReadingSchema),
|
|
607
|
+
minTurns: z.number(),
|
|
608
|
+
sampleUnit: z.enum(["turns", "conversations"]).optional(),
|
|
609
|
+
cohort: z.string().optional(),
|
|
610
|
+
deliveredPct: z.number().optional(),
|
|
611
|
+
outcomes: z.array(z.object({ outcome: IqContextOutcomeSchema, turns: z.number() })).optional(),
|
|
612
|
+
});
|
|
314
613
|
export const SavingsReportSchema = z.object({
|
|
315
614
|
input: InputSavingsSchema,
|
|
316
615
|
output: TurnExperimentSchema.optional(),
|
|
616
|
+
search: TurnExperimentSchema.optional(),
|
|
317
617
|
context: TurnExperimentSchema.optional(),
|
|
318
618
|
});
|
|
319
619
|
export const IntenticRunSchema = z.object({ args: z.array(z.string()) });
|
|
@@ -334,17 +634,7 @@ export const GitFileDiffQuerySchema = RepoParamSchema.extend({ path: z.string().
|
|
|
334
634
|
export const GitStatusSchema = z.object({ branch: z.string(), dirty: z.boolean(), files: z.array(z.string()) });
|
|
335
635
|
export const GitFilesSchema = z.object({ files: z.array(z.string()) });
|
|
336
636
|
export const GitFileSchema = z.object({ path: z.string(), content: z.string() });
|
|
337
|
-
export const CommitResultSchema = z.object({ committed: z.boolean() });
|
|
338
637
|
export const RepoPathsSchema = z.object({ repo: z.string().min(1), paths: z.array(z.string().min(1)).max(500).optional() });
|
|
339
|
-
export const CommitMessageDraftSchema = z.object({
|
|
340
|
-
repos: z.array(RepoPathsSchema).min(1).max(50),
|
|
341
|
-
all: z.boolean().optional(),
|
|
342
|
-
});
|
|
343
|
-
export const CommitMessageSchema = z.object({
|
|
344
|
-
message: z.string(),
|
|
345
|
-
provider: z.string(),
|
|
346
|
-
model: z.string(),
|
|
347
|
-
});
|
|
348
638
|
export const GitChangeSchema = z.object({
|
|
349
639
|
path: z.string(),
|
|
350
640
|
status: z.enum(["added", "modified", "deleted", "renamed", "type-changed", "conflicted"]),
|
|
@@ -372,17 +662,21 @@ export const GitBranchSchema = z.object({
|
|
|
372
662
|
gone: z.boolean().optional(),
|
|
373
663
|
at: z.number(),
|
|
374
664
|
});
|
|
375
|
-
export const
|
|
665
|
+
export const GitRemoteBranchSchema = z.object({ name: z.string(), remote: z.string(), branch: z.string(), at: z.number() });
|
|
666
|
+
export const GitBranchesSchema = z.object({ branches: z.array(GitBranchSchema), remotes: z.array(GitRemoteBranchSchema) });
|
|
376
667
|
export const GitBranchCreateAtSchema = RepoParamSchema.extend({
|
|
377
668
|
name: RefNameSchema,
|
|
378
669
|
start: z.string().min(1).optional(),
|
|
379
670
|
checkout: z.boolean().optional(),
|
|
380
671
|
});
|
|
381
672
|
export const GitBranchDeleteSchema = RepoParamSchema.extend({ name: RefNameSchema, force: z.boolean().optional() });
|
|
673
|
+
export const GitOperationSchema = z.enum(["merge", "rebase", "cherry-pick", "revert"]);
|
|
674
|
+
export const GitOperationStateSchema = z.object({ repo: z.string(), operation: GitOperationSchema.optional() });
|
|
382
675
|
export const RepoChangesSchema = z.object({
|
|
383
676
|
repo: z.string(),
|
|
384
677
|
branch: z.string().optional(),
|
|
385
678
|
conflicted: z.array(GitChangeSchema),
|
|
679
|
+
operation: GitOperationSchema.optional(),
|
|
386
680
|
staged: z.array(GitChangeSchema),
|
|
387
681
|
unstaged: z.array(GitChangeSchema),
|
|
388
682
|
truncated: z.number().optional(),
|
|
@@ -393,16 +687,27 @@ export const RepoChangesSchema = z.object({
|
|
|
393
687
|
export const OriginAgentSchema = z.object({
|
|
394
688
|
title: z.string().optional(),
|
|
395
689
|
provider: AgentProviderSchema,
|
|
690
|
+
landedMessage: LandedMessageSchema.optional(),
|
|
396
691
|
});
|
|
397
692
|
export const GitChangesSchema = z.object({
|
|
398
693
|
repos: z.array(RepoChangesSchema),
|
|
399
694
|
originAgents: z.record(z.string(), OriginAgentSchema).optional(),
|
|
695
|
+
committing: z.array(z.string()).optional(),
|
|
696
|
+
});
|
|
697
|
+
export const CommitResultSchema = z.object({
|
|
698
|
+
committed: z.boolean(),
|
|
699
|
+
changes: RepoChangesSchema.optional(),
|
|
700
|
+
originAgents: z.record(z.string(), OriginAgentSchema).optional(),
|
|
400
701
|
});
|
|
702
|
+
export const WorkspaceModuleSchema = z.object({ dir: z.string(), name: z.string() });
|
|
703
|
+
export const RepoModulesSchema = z.object({ repo: z.string(), modules: z.array(WorkspaceModuleSchema) });
|
|
704
|
+
export const WorkspaceModulesSchema = z.object({ repos: z.array(RepoModulesSchema) });
|
|
401
705
|
export const AgentChangeSchema = GitChangeSchema.extend({ landed: z.boolean() });
|
|
402
706
|
export const AgentRepoChangesSchema = z.object({
|
|
403
707
|
repo: z.string(),
|
|
404
708
|
branch: z.string().optional(),
|
|
405
709
|
changes: z.array(AgentChangeSchema),
|
|
710
|
+
modules: z.array(WorkspaceModuleSchema),
|
|
406
711
|
});
|
|
407
712
|
export const AgentChangesSchema = z.object({ repos: z.array(AgentRepoChangesSchema), conflicts: z.array(LandConflictSchema).optional() });
|
|
408
713
|
const ShaSchema = z.string().regex(/^[0-9a-f]{4,64}$/);
|
|
@@ -418,8 +723,16 @@ export const GitCommitSchema = z.object({
|
|
|
418
723
|
refs: z.array(z.string()),
|
|
419
724
|
head: z.boolean(),
|
|
420
725
|
});
|
|
421
|
-
export const GitLogSchema = z.object({
|
|
422
|
-
|
|
726
|
+
export const GitLogSchema = z.object({
|
|
727
|
+
repo: z.string(),
|
|
728
|
+
branch: z.string().optional(),
|
|
729
|
+
commits: z.array(GitCommitSchema),
|
|
730
|
+
hasMore: z.boolean(),
|
|
731
|
+
});
|
|
732
|
+
export const GitLogQuerySchema = RepoParamSchema.extend({
|
|
733
|
+
limit: z.coerce.number().int().positive().max(2000).optional(),
|
|
734
|
+
skip: z.coerce.number().int().nonnegative().max(1_000_000).optional(),
|
|
735
|
+
});
|
|
423
736
|
export const GitReposSchema = z.object({ repos: z.array(z.string()) });
|
|
424
737
|
export const GitCommitDiffQuerySchema = RepoParamSchema.extend({ sha: ShaSchema });
|
|
425
738
|
export const GitCommitDiffSchema = z.object({ files: z.array(GitChangeSchema) });
|
|
@@ -427,9 +740,37 @@ export const GitCommitFileDiffQuerySchema = RepoParamSchema.extend({ sha: ShaSch
|
|
|
427
740
|
export const GitBranchCreateSchema = RepoParamSchema.extend({ sha: ShaSchema, name: RefNameSchema });
|
|
428
741
|
export const GitTagCreateSchema = RepoParamSchema.extend({ sha: ShaSchema, name: RefNameSchema });
|
|
429
742
|
export const GitCheckoutSchema = RepoParamSchema.extend({ ref: RefNameSchema });
|
|
743
|
+
export const GitTagDeleteSchema = RepoParamSchema.extend({ name: RefNameSchema, remote: RefNameSchema.optional() });
|
|
744
|
+
export const GitTagPushSchema = RepoParamSchema.extend({ name: RefNameSchema, remote: RefNameSchema });
|
|
430
745
|
export const GitResetSchema = RepoParamSchema.extend({ sha: ShaSchema, mode: z.enum(["soft", "mixed", "hard"]) });
|
|
431
746
|
export const GitCommitActionSchema = RepoParamSchema.extend({ sha: ShaSchema });
|
|
432
747
|
export const GitActionResultSchema = z.object({ ok: z.boolean(), reason: z.string().optional() });
|
|
748
|
+
export const StashEntrySchema = z.object({
|
|
749
|
+
ref: z.string(),
|
|
750
|
+
sha: z.string(),
|
|
751
|
+
short: z.string(),
|
|
752
|
+
subject: z.string(),
|
|
753
|
+
branch: z.string().optional(),
|
|
754
|
+
at: z.number(),
|
|
755
|
+
parents: z.array(z.string()),
|
|
756
|
+
});
|
|
757
|
+
export const StashListSchema = z.object({ repo: z.string(), stashes: z.array(StashEntrySchema) });
|
|
758
|
+
const StashRefSchema = z.string().regex(/^stash@\{\d{1,4}\}$/);
|
|
759
|
+
export const StashPushSchema = RepoParamSchema.extend({ message: z.string().max(500).optional(), includeUntracked: z.boolean().optional() });
|
|
760
|
+
export const StashApplySchema = RepoParamSchema.extend({ ref: StashRefSchema, pop: z.boolean().optional() });
|
|
761
|
+
export const StashRefParamSchema = RepoParamSchema.extend({ ref: StashRefSchema });
|
|
762
|
+
export const StashDiffQuerySchema = RepoParamSchema.extend({ ref: StashRefSchema });
|
|
763
|
+
export const UndoKindSchema = z.enum(["commit", "amend", "merge", "rebase", "cherry-pick", "revert", "reset", "pull", "other"]);
|
|
764
|
+
export const UndoableActionSchema = z.object({
|
|
765
|
+
kind: UndoKindSchema,
|
|
766
|
+
description: z.string(),
|
|
767
|
+
branch: z.string(),
|
|
768
|
+
sha: z.string(),
|
|
769
|
+
previousSha: z.string(),
|
|
770
|
+
changesWorkingTree: z.boolean(),
|
|
771
|
+
});
|
|
772
|
+
export const GitUndoStateSchema = z.object({ repo: z.string(), action: UndoableActionSchema.optional() });
|
|
773
|
+
export const GitUndoSchema = RepoParamSchema.extend({ previousSha: ShaSchema, discardChanges: z.boolean().optional() });
|
|
433
774
|
export const SnapshotTriggerSchema = z.enum(["turn", "interval", "pre-restore", "restore", "user"]);
|
|
434
775
|
export const SnapshotSchema = z.object({
|
|
435
776
|
id: z.string(),
|
|
@@ -438,6 +779,14 @@ export const SnapshotSchema = z.object({
|
|
|
438
779
|
label: z.string().optional(),
|
|
439
780
|
});
|
|
440
781
|
export const SnapshotsListSchema = z.object({ snapshots: z.array(SnapshotSchema) });
|
|
782
|
+
export const RewindTurnSchema = z.object({
|
|
783
|
+
conversationId: z.string().min(1),
|
|
784
|
+
index: z.number().int().nonnegative(),
|
|
785
|
+
});
|
|
786
|
+
export const RewindResultSchema = z.object({
|
|
787
|
+
snapshot: z.string().optional(),
|
|
788
|
+
dropped: z.number().int().nonnegative(),
|
|
789
|
+
});
|
|
441
790
|
export const SnapshotIdSchema = z.object({ id: z.string().min(1) });
|
|
442
791
|
export const SnapshotChangeSchema = z.object({
|
|
443
792
|
scope: z.string(),
|
|
@@ -456,12 +805,18 @@ export const FileDiffSchema = z.object({
|
|
|
456
805
|
binary: z.boolean().optional(),
|
|
457
806
|
truncated: z.boolean().optional(),
|
|
458
807
|
});
|
|
808
|
+
export const WorkspaceScopeSchema = z.object({ agent: ConversationIdSchema.optional() });
|
|
809
|
+
export const WorkspaceLinkSchema = z.object({
|
|
810
|
+
to: z.string(),
|
|
811
|
+
state: z.enum(["broken", "outside"]).optional(),
|
|
812
|
+
});
|
|
459
813
|
export const WorkspaceTreeEntrySchema = z.object({
|
|
460
814
|
name: z.string(),
|
|
461
815
|
path: z.string(),
|
|
462
816
|
type: z.enum(["file", "dir"]),
|
|
463
817
|
size: z.number().optional(),
|
|
464
818
|
ignored: z.boolean().optional(),
|
|
819
|
+
link: WorkspaceLinkSchema.optional(),
|
|
465
820
|
get children() {
|
|
466
821
|
return z.array(WorkspaceTreeEntrySchema).optional();
|
|
467
822
|
},
|
|
@@ -471,26 +826,31 @@ export const WorkspaceTreeSchema = z.object({
|
|
|
471
826
|
tree: z.array(WorkspaceTreeEntrySchema),
|
|
472
827
|
hidden: z.number(),
|
|
473
828
|
});
|
|
474
|
-
export const WorkspaceChildrenQuerySchema =
|
|
829
|
+
export const WorkspaceChildrenQuerySchema = WorkspaceScopeSchema.extend({ path: z.string().min(1) });
|
|
475
830
|
export const WorkspaceChildrenSchema = z.object({
|
|
476
831
|
entries: z.array(WorkspaceTreeEntrySchema),
|
|
477
832
|
hidden: z.number(),
|
|
478
833
|
});
|
|
479
834
|
export const WorkspaceFileQuerySchema = z.object({ path: z.string().min(1) });
|
|
835
|
+
export const WorkspaceMediaTicketQuerySchema = WorkspaceScopeSchema.extend({ path: z.string().min(1) });
|
|
480
836
|
export const WorkspaceMediaTicketSchema = z.object({ ticket: z.string(), expiresAt: z.number() });
|
|
481
|
-
export const WorkspaceFileReadQuerySchema =
|
|
837
|
+
export const WorkspaceFileReadQuerySchema = WorkspaceScopeSchema.extend({
|
|
482
838
|
path: z.string().min(1),
|
|
483
839
|
offset: z.coerce.number().int().optional(),
|
|
484
840
|
limit: z.coerce.number().int().min(1).optional(),
|
|
485
841
|
});
|
|
486
|
-
export const
|
|
842
|
+
export const WorkspaceFilePresentSchema = z.object({
|
|
843
|
+
present: z.literal(true),
|
|
487
844
|
path: z.string(),
|
|
488
845
|
content: z.string(),
|
|
489
846
|
size: z.number(),
|
|
490
847
|
offset: z.number(),
|
|
491
848
|
bytes: z.number(),
|
|
849
|
+
shared: z.boolean(),
|
|
492
850
|
});
|
|
493
|
-
export const
|
|
851
|
+
export const WorkspaceFileAbsentSchema = z.object({ present: z.literal(false), path: z.string() });
|
|
852
|
+
export const WorkspaceFileSchema = z.discriminatedUnion("present", [WorkspaceFilePresentSchema, WorkspaceFileAbsentSchema]);
|
|
853
|
+
export const WorkspaceResolveQuerySchema = WorkspaceScopeSchema.extend({ path: z.string().min(1).max(512) });
|
|
494
854
|
export const WorkspaceResolveSchema = z.object({ path: z.string().optional() });
|
|
495
855
|
export const WorkspaceDirSchema = z.object({ path: z.string().min(1) });
|
|
496
856
|
export const WorkspaceMoveSchema = z.object({ from: z.string().min(1), to: z.string().min(1) });
|
|
@@ -505,6 +865,7 @@ export const WorkspaceSearchQuerySchema = z.object({
|
|
|
505
865
|
literal: z.stringbool().optional(),
|
|
506
866
|
word: z.stringbool().optional(),
|
|
507
867
|
caseSensitive: z.stringbool().optional(),
|
|
868
|
+
include: z.string().max(512).optional(),
|
|
508
869
|
limit: z.coerce.number().int().positive().optional(),
|
|
509
870
|
after: z.string().optional(),
|
|
510
871
|
});
|
|
@@ -582,11 +943,12 @@ export const ProjectSetupSchema = z.object({
|
|
|
582
943
|
manager: z.string(),
|
|
583
944
|
command: z.string(),
|
|
584
945
|
evidence: z.string(),
|
|
585
|
-
state: z.enum(["ready", "installing", "needs-setup", "unsupported"]),
|
|
946
|
+
state: z.enum(["ready", "installing", "needs-setup", "unsupported", "stale"]),
|
|
947
|
+
missing: z.number().optional(),
|
|
586
948
|
});
|
|
587
949
|
export const WorkspaceSetupSchema = z.object({ projects: z.array(ProjectSetupSchema) });
|
|
588
|
-
export const WorkspaceInstallSchema = z.object({ dirs: z.array(z.string()).min(1) });
|
|
589
|
-
export const WorkspaceInstallResultSchema = z.object({
|
|
950
|
+
export const WorkspaceInstallSchema = z.object({ dirs: z.array(z.string().max(500)).min(1).max(50) });
|
|
951
|
+
export const WorkspaceInstallResultSchema = z.object({ queued: z.array(z.string()) });
|
|
590
952
|
export const ReposListSchema = z.object({ repos: z.array(z.string()) });
|
|
591
953
|
export const CloneRepoSchema = z.object({ name: z.string().min(1), cloneUrl: z.string().min(1), branch: z.string().optional() });
|
|
592
954
|
export const CloneResultSchema = z.object({ name: z.string(), path: z.string() });
|
|
@@ -629,9 +991,6 @@ export const WorkspacePackageSchema = z.object({ name: z.string(), dir: z.string
|
|
|
629
991
|
export const WorkspaceDepTypeSchema = z.enum(["prod", "dev", "peer"]);
|
|
630
992
|
export const WorkspaceDepEdgeSchema = z.object({ from: z.string(), to: z.string(), type: WorkspaceDepTypeSchema });
|
|
631
993
|
export const WorkspaceGraphSchema = z.object({ packages: z.array(WorkspacePackageSchema), edges: z.array(WorkspaceDepEdgeSchema) });
|
|
632
|
-
export const WorkspaceModuleSchema = z.object({ dir: z.string(), name: z.string() });
|
|
633
|
-
export const RepoModulesSchema = z.object({ repo: z.string(), modules: z.array(WorkspaceModuleSchema) });
|
|
634
|
-
export const WorkspaceModulesSchema = z.object({ repos: z.array(RepoModulesSchema) });
|
|
635
994
|
export const RepoAppsParamSchema = z.object({ repo: z.string() });
|
|
636
995
|
export const AppParamSchema = z.object({
|
|
637
996
|
repo: z.string(),
|
|
@@ -700,17 +1059,13 @@ export const CapabilityKindSchema = z.enum([
|
|
|
700
1059
|
"vpn",
|
|
701
1060
|
"docker",
|
|
702
1061
|
"browser",
|
|
1062
|
+
"identity",
|
|
703
1063
|
"host",
|
|
704
1064
|
"agent",
|
|
705
1065
|
"endpoint",
|
|
706
1066
|
]);
|
|
707
1067
|
export const CapabilityStateSchema = z.enum(["active", "pending", "error", "inactive"]);
|
|
708
|
-
const
|
|
709
|
-
.string()
|
|
710
|
-
.min(1)
|
|
711
|
-
.max(60)
|
|
712
|
-
.regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/);
|
|
713
|
-
export const McpConfigSchema = z.object({ url: z.string().url(), token: z.string().optional() });
|
|
1068
|
+
export const McpConfigSchema = z.object({ url: z.url(), token: z.string().optional() });
|
|
714
1069
|
export const ServiceConfigSchema = z.object({
|
|
715
1070
|
service: ServiceKindSchema,
|
|
716
1071
|
domain: z.string().min(1),
|
|
@@ -720,7 +1075,7 @@ export const ServiceConfigSchema = z.object({
|
|
|
720
1075
|
export const IntegrationConfigSchema = z.object({ provider: z.literal("stripe") });
|
|
721
1076
|
export const CliConfigSchema = z.object({ provider: z.string().min(1) }).catchall(z.string());
|
|
722
1077
|
export const PluginConfigSchema = z.object({
|
|
723
|
-
url: z.
|
|
1078
|
+
url: z.url(),
|
|
724
1079
|
ref: z.string().min(1).optional(),
|
|
725
1080
|
path: z
|
|
726
1081
|
.string()
|
|
@@ -730,7 +1085,7 @@ export const PluginConfigSchema = z.object({
|
|
|
730
1085
|
token: z.string().min(1).optional(),
|
|
731
1086
|
});
|
|
732
1087
|
export const ExtensionConfigSchema = z.object({
|
|
733
|
-
url: z.
|
|
1088
|
+
url: z.url(),
|
|
734
1089
|
ref: z.string().regex(/^[0-9a-f]{40}$/, "ref must be a full 40-character commit sha"),
|
|
735
1090
|
path: z
|
|
736
1091
|
.string()
|
|
@@ -738,6 +1093,8 @@ export const ExtensionConfigSchema = z.object({
|
|
|
738
1093
|
.refine((value) => !value.split("/").includes(".."), { message: "path must stay inside the checkout" })
|
|
739
1094
|
.optional(),
|
|
740
1095
|
token: z.string().min(1).optional(),
|
|
1096
|
+
tier: z.enum(["free", "premium"]).optional(),
|
|
1097
|
+
registry: z.url().optional(),
|
|
741
1098
|
});
|
|
742
1099
|
export const SshConfigSchema = z.discriminatedUnion("auth", [
|
|
743
1100
|
z.object({
|
|
@@ -788,21 +1145,52 @@ export const IpsecVpnConfigSchema = z.object({
|
|
|
788
1145
|
pfs: z.enum(["on", "off"]).default("on"),
|
|
789
1146
|
dhGroup: z.enum(["2", "5", "14", "15", "16", "19", "20"]).default("14"),
|
|
790
1147
|
aggressive: z.enum(["on", "off"]).default("on"),
|
|
1148
|
+
routedNetworks: z
|
|
1149
|
+
.string()
|
|
1150
|
+
.default("0.0.0.0/0")
|
|
1151
|
+
.refine((value) => value
|
|
1152
|
+
.split(",")
|
|
1153
|
+
.map((entry) => entry.trim())
|
|
1154
|
+
.every((entry) => z.cidrv4().safeParse(entry).success || z.cidrv6().safeParse(entry).success), {
|
|
1155
|
+
message: "Routed networks is a comma-separated list of CIDRs, like 10.0.0.0/8,192.168.0.0/16. A single host needs its prefix too (192.168.0.168/32). Leave it at 0.0.0.0/0 to send everything through the gateway.",
|
|
1156
|
+
}),
|
|
791
1157
|
autoConnect,
|
|
792
1158
|
});
|
|
793
1159
|
export const VpnConfigSchema = z.discriminatedUnion("provider", [WireguardVpnConfigSchema, FortinetVpnConfigSchema, IpsecVpnConfigSchema]);
|
|
794
|
-
export const
|
|
795
|
-
|
|
796
|
-
|
|
1160
|
+
export const DockerConfigSchema = z.object({
|
|
1161
|
+
gpu: z.enum(["on", "off"]).default("off"),
|
|
1162
|
+
registryMirror: z.url().optional(),
|
|
1163
|
+
insecureRegistries: z.string().optional(),
|
|
1164
|
+
addressPool: z.string().optional(),
|
|
1165
|
+
});
|
|
1166
|
+
export const BrowserConfigSchema = z
|
|
1167
|
+
.object({
|
|
1168
|
+
platform: z.string().min(1),
|
|
1169
|
+
username: z.string().optional(),
|
|
1170
|
+
password: z.string().optional(),
|
|
1171
|
+
identity: z.string().optional(),
|
|
1172
|
+
purpose: z.string().optional(),
|
|
1173
|
+
openedAt: z.string().optional(),
|
|
1174
|
+
})
|
|
1175
|
+
.catchall(z.string());
|
|
1176
|
+
export const IdentityConfigSchema = z.object({
|
|
1177
|
+
email: z.string().min(3),
|
|
1178
|
+
password: z.string().optional(),
|
|
1179
|
+
mailbox: z.string().optional(),
|
|
1180
|
+
loginUrl: z.url().optional(),
|
|
1181
|
+
openAccounts: z.enum(["on", "off"]).default("off"),
|
|
1182
|
+
});
|
|
797
1183
|
const hostScope = z.enum(["on", "off"]);
|
|
798
1184
|
export const HostScopesSchema = z.object({
|
|
799
1185
|
shell: hostScope.default("on"),
|
|
800
1186
|
write: hostScope.default("off"),
|
|
801
1187
|
screen: hostScope.default("on"),
|
|
802
1188
|
control: hostScope.default("off"),
|
|
1189
|
+
sandboxes: hostScope.default("off"),
|
|
1190
|
+
sandboxRemove: hostScope.default("off"),
|
|
803
1191
|
roots: z.string().optional(),
|
|
804
1192
|
});
|
|
805
|
-
export const HostConfigSchema = HostScopesSchema.extend({ platform:
|
|
1193
|
+
export const HostConfigSchema = HostScopesSchema.extend({ platform: z.string().min(1) });
|
|
806
1194
|
export const AcpAgentConfigSchema = z.object({
|
|
807
1195
|
command: z.string().min(1),
|
|
808
1196
|
name: z.string().min(1).optional(),
|
|
@@ -811,7 +1199,7 @@ export const AcpAgentConfigSchema = z.object({
|
|
|
811
1199
|
});
|
|
812
1200
|
export const EndpointProtocolSchema = z.enum(["openai", "anthropic"]);
|
|
813
1201
|
export const EndpointConfigSchema = z.object({
|
|
814
|
-
baseUrl: z.
|
|
1202
|
+
baseUrl: z.url(),
|
|
815
1203
|
protocol: EndpointProtocolSchema.default("openai"),
|
|
816
1204
|
apiKey: z.string().optional(),
|
|
817
1205
|
headers: z.string().optional(),
|
|
@@ -827,27 +1215,116 @@ export const CapabilitySchema = z.discriminatedUnion("kind", [
|
|
|
827
1215
|
z.object({ id: entryId, kind: z.literal("extension"), config: ExtensionConfigSchema }),
|
|
828
1216
|
z.object({ id: entryId, kind: z.literal("ssh"), config: SshConfigSchema }),
|
|
829
1217
|
z.object({ id: entryId, kind: z.literal("vpn"), config: VpnConfigSchema }),
|
|
830
|
-
z.object({ id: entryId, kind: z.literal("docker"), config:
|
|
1218
|
+
z.object({ id: entryId, kind: z.literal("docker"), config: DockerConfigSchema }),
|
|
831
1219
|
z.object({ id: entryId, kind: z.literal("browser"), config: BrowserConfigSchema }),
|
|
1220
|
+
z.object({ id: entryId, kind: z.literal("identity"), config: IdentityConfigSchema }),
|
|
832
1221
|
z.object({ id: entryId, kind: z.literal("host"), config: HostConfigSchema }),
|
|
833
1222
|
z.object({ id: entryId, kind: z.literal("agent"), config: AcpAgentConfigSchema }),
|
|
834
1223
|
z.object({ id: entryId, kind: z.literal("endpoint"), config: EndpointConfigSchema }),
|
|
835
1224
|
]);
|
|
836
|
-
export const
|
|
1225
|
+
export const PersonaPowersSchema = z.object({
|
|
1226
|
+
files: z.enum(["none", "read", "write"]).default("write"),
|
|
1227
|
+
shell: z.boolean().default(true),
|
|
1228
|
+
code: z.boolean().default(true),
|
|
1229
|
+
web: z.boolean().default(true),
|
|
1230
|
+
browser: z.boolean().default(true),
|
|
1231
|
+
delegate: z.boolean().default(true),
|
|
1232
|
+
sandbox: z.boolean().default(true),
|
|
1233
|
+
connectors: z.array(entryId).max(100).optional(),
|
|
1234
|
+
computers: z.array(entryId).max(50).optional(),
|
|
1235
|
+
mcp: z.array(entryId).max(50).optional(),
|
|
1236
|
+
});
|
|
1237
|
+
export const PersonaWorkspaceSchema = z.object({
|
|
1238
|
+
startIn: z.string().max(200).optional(),
|
|
1239
|
+
folders: z.array(z.string().min(1)).max(50).optional(),
|
|
1240
|
+
});
|
|
1241
|
+
export const PersonaSchema = z.object({
|
|
1242
|
+
id: entryId,
|
|
1243
|
+
label: z.string().max(60).optional(),
|
|
1244
|
+
capabilities: z.array(entryId).max(50),
|
|
1245
|
+
repos: z.array(z.string().min(1)).max(50).optional(),
|
|
1246
|
+
powers: PersonaPowersSchema.optional(),
|
|
1247
|
+
workspace: PersonaWorkspaceSchema.optional(),
|
|
1248
|
+
systemPromptMode: SystemPromptModeSchema.optional(),
|
|
1249
|
+
});
|
|
1250
|
+
export const FRONT_DESK_PERSONA = "front-desk";
|
|
1251
|
+
export const personaBounds = (persona) => {
|
|
1252
|
+
const powers = persona.powers;
|
|
1253
|
+
if (powers === undefined) {
|
|
1254
|
+
return "Full powers";
|
|
1255
|
+
}
|
|
1256
|
+
const resolved = PersonaPowersSchema.parse(powers);
|
|
1257
|
+
if (resolved.files === "read" && !resolved.shell) {
|
|
1258
|
+
return "Read-only";
|
|
1259
|
+
}
|
|
1260
|
+
if (!resolved.shell) {
|
|
1261
|
+
return "No shell";
|
|
1262
|
+
}
|
|
1263
|
+
const limits = [
|
|
1264
|
+
resolved.files === "none",
|
|
1265
|
+
!resolved.code,
|
|
1266
|
+
!resolved.web,
|
|
1267
|
+
!resolved.browser,
|
|
1268
|
+
!resolved.delegate,
|
|
1269
|
+
!resolved.sandbox,
|
|
1270
|
+
resolved.connectors !== undefined,
|
|
1271
|
+
resolved.computers !== undefined,
|
|
1272
|
+
resolved.mcp !== undefined,
|
|
1273
|
+
].filter(Boolean).length;
|
|
1274
|
+
return limits === 0 ? "Full powers" : `${limits} limit${limits === 1 ? "" : "s"}`;
|
|
1275
|
+
};
|
|
1276
|
+
export const PersonaIdParamSchema = z.object({ id: entryId });
|
|
1277
|
+
export const PersonasListSchema = z.object({
|
|
1278
|
+
personas: z.array(PersonaSchema),
|
|
1279
|
+
connected: z.array(z.string()),
|
|
1280
|
+
});
|
|
1281
|
+
export const PersonaKitSchema = z.object({
|
|
1282
|
+
prompt: z.string(),
|
|
1283
|
+
skills: z.array(z.object({ name: z.string(), description: z.string() })),
|
|
1284
|
+
});
|
|
1285
|
+
export const PersonaPromptSchema = PersonaIdParamSchema.extend({ prompt: z.string().max(20000) });
|
|
1286
|
+
export const PersonaSkillSchema = PersonaIdParamSchema.extend(SkillDraftSchema.shape);
|
|
1287
|
+
export const PersonaSkillNameSchema = PersonaIdParamSchema.extend({ name: SkillNameSchema });
|
|
1288
|
+
export const PersonaSkillBodySchema = z.object({ name: z.string(), description: z.string(), body: z.string() });
|
|
1289
|
+
export const CapabilityStatusSchema = z.object({
|
|
1290
|
+
state: CapabilityStateSchema,
|
|
1291
|
+
detail: z.string().optional(),
|
|
1292
|
+
code: z.string().optional(),
|
|
1293
|
+
});
|
|
837
1294
|
export const CapabilitySummarySchema = z.object({
|
|
838
1295
|
id: z.string(),
|
|
839
1296
|
kind: CapabilityKindSchema,
|
|
840
1297
|
status: CapabilityStatusSchema,
|
|
841
1298
|
config: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])),
|
|
842
1299
|
});
|
|
843
|
-
export const CapabilityRecommendationSchema = z.object({
|
|
1300
|
+
export const CapabilityRecommendationSchema = z.object({
|
|
1301
|
+
card: z.string(),
|
|
1302
|
+
evidence: z.string(),
|
|
1303
|
+
reason: z.string(),
|
|
1304
|
+
prefill: z.record(z.string(), z.string()),
|
|
1305
|
+
});
|
|
844
1306
|
export const CapabilitiesListSchema = z.object({
|
|
845
1307
|
capabilities: z.array(CapabilitySummarySchema),
|
|
846
1308
|
recommendations: z.array(CapabilityRecommendationSchema).default([]),
|
|
847
1309
|
});
|
|
848
1310
|
export const CapabilityIdParamSchema = z.object({ id: z.string() });
|
|
1311
|
+
export const CapabilityConnectionSchema = z.object({
|
|
1312
|
+
id: z.string(),
|
|
1313
|
+
kind: z.string(),
|
|
1314
|
+
config: z.record(z.string(), z.string()),
|
|
1315
|
+
});
|
|
1316
|
+
export const CapabilityCardParamSchema = z.object({ card: z.string() });
|
|
849
1317
|
export const CapabilitySecretInputSchema = z.object({ id: z.string(), value: z.string().min(1) });
|
|
1318
|
+
export const CapabilityRenameSchema = z.object({
|
|
1319
|
+
id: z.string(),
|
|
1320
|
+
to: z
|
|
1321
|
+
.string()
|
|
1322
|
+
.min(1)
|
|
1323
|
+
.max(60)
|
|
1324
|
+
.regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/),
|
|
1325
|
+
});
|
|
850
1326
|
export const CapabilityLoginSchema = z.object({ session: z.string() });
|
|
1327
|
+
export const CapabilityOtpSchema = z.object({ code: z.string(), secondsRemaining: z.number() });
|
|
851
1328
|
export const HostFactsSchema = z.object({
|
|
852
1329
|
os: z.string(),
|
|
853
1330
|
arch: z.string(),
|
|
@@ -857,7 +1334,7 @@ export const HostFactsSchema = z.object({
|
|
|
857
1334
|
});
|
|
858
1335
|
export const HostSummarySchema = z.object({
|
|
859
1336
|
id: z.string(),
|
|
860
|
-
platform:
|
|
1337
|
+
platform: z.string().min(1),
|
|
861
1338
|
online: z.boolean(),
|
|
862
1339
|
version: z.string().optional(),
|
|
863
1340
|
lastSeen: z.number().optional(),
|
|
@@ -903,21 +1380,91 @@ export const ForticlientConnectionSchema = z.object({
|
|
|
903
1380
|
needs: z.array(z.string()),
|
|
904
1381
|
});
|
|
905
1382
|
export const ForticlientImportSchema = z.object({ connections: z.array(ForticlientConnectionSchema) });
|
|
906
|
-
export const MarketplaceRequestSchema = z.object({ url: z.
|
|
1383
|
+
export const MarketplaceRequestSchema = z.object({ url: z.url(), token: z.string().min(1).optional() });
|
|
907
1384
|
export const MarketplaceSchema = z.object({ name: z.string(), plugins: z.array(RegistryEntrySchema) });
|
|
908
1385
|
const extensionId = z
|
|
909
1386
|
.string()
|
|
910
1387
|
.min(1)
|
|
911
1388
|
.max(121)
|
|
912
1389
|
.regex(/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/);
|
|
1390
|
+
export const ExtensionUpdatePolicySchema = z.object({
|
|
1391
|
+
updates: z.enum(["notify", "agent", "auto"]),
|
|
1392
|
+
advisories: z.enum(["auto-disable", "notify"]),
|
|
1393
|
+
});
|
|
1394
|
+
export const ExtensionUpdateSchema = z.object({
|
|
1395
|
+
ref: z.string(),
|
|
1396
|
+
version: z.string().optional(),
|
|
1397
|
+
url: z.string(),
|
|
1398
|
+
path: z.string().optional(),
|
|
1399
|
+
trust: z.enum(["verified", "listed"]),
|
|
1400
|
+
securityFix: z.boolean().optional(),
|
|
1401
|
+
registry: z.string(),
|
|
1402
|
+
at: z.string(),
|
|
1403
|
+
needsReview: z.string().optional(),
|
|
1404
|
+
review: z.object({ conversationId: z.string(), at: z.string() }).optional(),
|
|
1405
|
+
});
|
|
1406
|
+
export const ExtensionAdvisorySchema = z.object({
|
|
1407
|
+
reason: z.string(),
|
|
1408
|
+
registry: z.string(),
|
|
1409
|
+
at: z.string(),
|
|
1410
|
+
autoDisabled: z.boolean(),
|
|
1411
|
+
});
|
|
1412
|
+
export const ExtensionHealthSchema = z.object({
|
|
1413
|
+
state: z.enum(["watching", "healthy", "unhealthy"]),
|
|
1414
|
+
detail: z.string().optional(),
|
|
1415
|
+
fromRef: z.string().optional(),
|
|
1416
|
+
at: z.string(),
|
|
1417
|
+
autoReverted: z.boolean().optional(),
|
|
1418
|
+
});
|
|
1419
|
+
export const PowersDiffSchema = z.object({ added: z.array(z.string()), removed: z.array(z.string()), unchanged: z.array(z.string()) });
|
|
1420
|
+
export const ExtensionUpdateActionSchema = z.object({
|
|
1421
|
+
id: extensionId,
|
|
1422
|
+
ref: z
|
|
1423
|
+
.string()
|
|
1424
|
+
.regex(/^[0-9a-f]{40}$/)
|
|
1425
|
+
.optional(),
|
|
1426
|
+
});
|
|
1427
|
+
export const ExtensionUpdatePreviewSchema = z.object({
|
|
1428
|
+
ref: z.string(),
|
|
1429
|
+
version: z.string(),
|
|
1430
|
+
installedVersion: z.string(),
|
|
1431
|
+
engines: z.string(),
|
|
1432
|
+
compatible: z.boolean(),
|
|
1433
|
+
powers: PowersDiffSchema,
|
|
1434
|
+
});
|
|
1435
|
+
export const ExtensionUpdateAppliedSchema = z.object({ ok: z.literal(true), ref: z.string(), rebuildNeeded: z.boolean().optional() });
|
|
1436
|
+
export const ExtensionUpdatePolicyInputSchema = z.object({
|
|
1437
|
+
id: extensionId,
|
|
1438
|
+
updates: z.enum(["notify", "agent", "auto"]).optional(),
|
|
1439
|
+
advisories: z.enum(["auto-disable", "notify"]).optional(),
|
|
1440
|
+
});
|
|
1441
|
+
export const ExtensionUpdatesCheckedSchema = z.object({ ok: z.literal(true), checkedAt: z.string() });
|
|
913
1442
|
export const ExtensionSummarySchema = z.object({
|
|
914
1443
|
id: extensionId,
|
|
915
1444
|
manifest: ExtensionManifestSchema,
|
|
916
1445
|
commit: z.string(),
|
|
917
|
-
|
|
1446
|
+
source: z.enum(["builtin", "installed", "workspace"]),
|
|
918
1447
|
enabled: z.boolean(),
|
|
1448
|
+
essential: z.boolean().optional(),
|
|
1449
|
+
usage: z.record(z.string(), z.object({ calls: z.number().int().nonnegative(), last: z.string() })).optional(),
|
|
1450
|
+
backend: z
|
|
1451
|
+
.object({
|
|
1452
|
+
state: z.enum(["running", "error", "absent", "incompatible", "starting", "stopped"]),
|
|
1453
|
+
detail: z.string().optional(),
|
|
1454
|
+
})
|
|
1455
|
+
.optional(),
|
|
1456
|
+
update: ExtensionUpdateSchema.optional(),
|
|
1457
|
+
advisory: ExtensionAdvisorySchema.optional(),
|
|
1458
|
+
health: ExtensionHealthSchema.optional(),
|
|
1459
|
+
previous: z.object({ ref: z.string(), version: z.string().optional() }).optional(),
|
|
1460
|
+
updatePolicy: ExtensionUpdatePolicySchema.optional(),
|
|
1461
|
+
});
|
|
1462
|
+
export const InvalidWorkspaceExtensionSchema = z.object({ dir: z.string(), error: z.string() });
|
|
1463
|
+
export const ExtensionsListSchema = z.object({
|
|
1464
|
+
extensions: z.array(ExtensionSummarySchema),
|
|
1465
|
+
invalid: z.array(InvalidWorkspaceExtensionSchema),
|
|
1466
|
+
updatesCheckedAt: z.string().optional(),
|
|
919
1467
|
});
|
|
920
|
-
export const ExtensionsListSchema = z.object({ extensions: z.array(ExtensionSummarySchema) });
|
|
921
1468
|
export const ExtensionSettingsSchema = z.object({
|
|
922
1469
|
settings: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])),
|
|
923
1470
|
secretsSet: z.array(z.string()),
|
|
@@ -927,6 +1474,12 @@ export const ExtensionSettingsInputSchema = z.object({
|
|
|
927
1474
|
settings: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])),
|
|
928
1475
|
});
|
|
929
1476
|
export const ExtensionEnabledInputSchema = z.object({ id: z.string(), enabled: z.boolean() });
|
|
1477
|
+
export const WorkspaceExtensionCreateSchema = z.object({
|
|
1478
|
+
publisher: z.string().regex(/^[a-z0-9][a-z0-9-]*$/),
|
|
1479
|
+
name: z.string().regex(/^[a-z0-9][a-z0-9-]*$/),
|
|
1480
|
+
});
|
|
1481
|
+
export const WorkspaceExtensionCreatedSchema = z.object({ id: z.string(), dir: z.string() });
|
|
1482
|
+
export const ExtensionUsageInputSchema = z.object({ id: z.string(), used: z.record(z.string(), z.number().int().positive()) });
|
|
930
1483
|
export const ExtensionProcessParamSchema = z.object({ id: z.string(), name: z.string() });
|
|
931
1484
|
export const ExtensionProcessStatusSchema = z.object({
|
|
932
1485
|
name: z.string(),
|
|
@@ -934,7 +1487,7 @@ export const ExtensionProcessStatusSchema = z.object({
|
|
|
934
1487
|
port: z.number().optional(),
|
|
935
1488
|
previewUrl: z.string().optional(),
|
|
936
1489
|
});
|
|
937
|
-
export const WorkspaceEventKindSchema = z.enum(["turn.settled", "agent.landed"]);
|
|
1490
|
+
export const WorkspaceEventKindSchema = z.enum(["turn.settled", "agent.landed", "deps.broken", "deps.fixed"]);
|
|
938
1491
|
export const WorkspaceEventSchema = z.object({
|
|
939
1492
|
event: WorkspaceEventKindSchema,
|
|
940
1493
|
agentId: z.string(),
|
|
@@ -942,6 +1495,15 @@ export const WorkspaceEventSchema = z.object({
|
|
|
942
1495
|
branch: z.string(),
|
|
943
1496
|
outcome: z.enum(["landed", "conflict", "ready", "idle", "error"]),
|
|
944
1497
|
repos: z.array(z.object({ repo: z.string(), from: z.string(), dir: z.string() })),
|
|
1498
|
+
deps: z
|
|
1499
|
+
.object({
|
|
1500
|
+
project: z.string(),
|
|
1501
|
+
command: z.string(),
|
|
1502
|
+
exitCode: z.number(),
|
|
1503
|
+
attempt: z.number(),
|
|
1504
|
+
logTail: z.string(),
|
|
1505
|
+
})
|
|
1506
|
+
.optional(),
|
|
945
1507
|
});
|
|
946
1508
|
export const TriggerSchema = z.discriminatedUnion("kind", [
|
|
947
1509
|
z.object({ kind: z.literal("schedule"), cron: z.string().min(1) }),
|
|
@@ -952,6 +1514,7 @@ export const TriggerSchema = z.discriminatedUnion("kind", [
|
|
|
952
1514
|
channelId: z.string().min(1).optional(),
|
|
953
1515
|
eventType: z.string().min(1).optional(),
|
|
954
1516
|
mentioned: z.boolean().optional(),
|
|
1517
|
+
branch: z.string().min(1).optional(),
|
|
955
1518
|
allowedOrigins: z.array(z.string()).optional(),
|
|
956
1519
|
}),
|
|
957
1520
|
z.object({ kind: z.literal("workspace"), event: WorkspaceEventKindSchema, repo: z.string().min(1).optional() }),
|
|
@@ -1008,9 +1571,12 @@ export const AutomationSchema = z.object({
|
|
|
1008
1571
|
webchat: WebchatConfigSchema.optional(),
|
|
1009
1572
|
allowedTools: z.array(z.string().min(1)).optional(),
|
|
1010
1573
|
agent: AgentProviderSchema.optional(),
|
|
1574
|
+
account: z.string().optional(),
|
|
1575
|
+
actsAs: entryId.optional(),
|
|
1011
1576
|
harness: AgentHarnessSchema.optional(),
|
|
1012
1577
|
model: z.string().optional(),
|
|
1013
1578
|
requireApproval: z.boolean().optional(),
|
|
1579
|
+
holdForSeconds: z.number().optional(),
|
|
1014
1580
|
chore: z.boolean().optional(),
|
|
1015
1581
|
enabled: z.boolean(),
|
|
1016
1582
|
});
|
|
@@ -1020,7 +1586,15 @@ export const AutomationApprovalSchema = z.object({
|
|
|
1020
1586
|
payload: z.string().optional(),
|
|
1021
1587
|
origin: AgentOriginSchema.optional(),
|
|
1022
1588
|
title: z.string().optional(),
|
|
1589
|
+
conversationId: z.string().optional(),
|
|
1590
|
+
sessionId: z.string().optional(),
|
|
1023
1591
|
createdAt: z.number(),
|
|
1592
|
+
autoRunAt: z.number().optional(),
|
|
1593
|
+
});
|
|
1594
|
+
export const AgentsListSchema = z.object({
|
|
1595
|
+
agents: z.array(AgentSummarySchema),
|
|
1596
|
+
rev: z.number(),
|
|
1597
|
+
held: z.array(AutomationApprovalSchema).default([]),
|
|
1024
1598
|
});
|
|
1025
1599
|
export const AutomationApprovalsListSchema = z.object({ approvals: z.array(AutomationApprovalSchema) });
|
|
1026
1600
|
export const AutomationApprovalIdParamSchema = z.object({ id: z.string() });
|
|
@@ -1036,6 +1610,125 @@ export const AutomationSummarySchema = AutomationSchema.extend({
|
|
|
1036
1610
|
});
|
|
1037
1611
|
export const AutomationsListSchema = z.object({ automations: z.array(AutomationSummarySchema) });
|
|
1038
1612
|
export const AutomationIdParamSchema = z.object({ id: z.string() });
|
|
1613
|
+
export const AutomationEnabledInputSchema = z.object({ id: z.string(), enabled: z.boolean() });
|
|
1614
|
+
const TriggerFieldSchema = z.object({ label: z.string().min(1), placeholder: z.string().min(1), hint: z.string().min(1).optional() });
|
|
1615
|
+
export const TriggerSourceSchema = z.object({
|
|
1616
|
+
provider: z.string().min(1),
|
|
1617
|
+
label: z.string().min(1),
|
|
1618
|
+
logo: z.string().min(1).optional(),
|
|
1619
|
+
icon: z.string().min(1).optional(),
|
|
1620
|
+
events: z.array(z.object({ value: z.string().min(1), label: z.string().min(1) })),
|
|
1621
|
+
channel: TriggerFieldSchema,
|
|
1622
|
+
branchField: TriggerFieldSchema.optional(),
|
|
1623
|
+
mentionLabel: z.string().min(1).optional(),
|
|
1624
|
+
starterPrompt: z.string().min(1).optional(),
|
|
1625
|
+
requires: z.array(z.string().min(1)).default([]),
|
|
1626
|
+
enabled: z.boolean(),
|
|
1627
|
+
});
|
|
1628
|
+
export const TemplateOfferSchema = z.enum(["create", "configure"]);
|
|
1629
|
+
export const AutomationTemplateSchema = z.object({
|
|
1630
|
+
id: z.string().min(1),
|
|
1631
|
+
title: z.string().min(1),
|
|
1632
|
+
logo: z.string().min(1).optional(),
|
|
1633
|
+
icon: z.string().min(1).optional(),
|
|
1634
|
+
requires: z.array(z.string().min(1)).default([]),
|
|
1635
|
+
trigger: TriggerSchema,
|
|
1636
|
+
guard: z.string().min(1).optional(),
|
|
1637
|
+
holdForSeconds: z.number().int().positive().optional(),
|
|
1638
|
+
prompt: z.string().min(1),
|
|
1639
|
+
note: z.string().min(1).optional(),
|
|
1640
|
+
setup: z.string().min(1).optional(),
|
|
1641
|
+
description: z.string().min(1).optional(),
|
|
1642
|
+
offer: TemplateOfferSchema.optional(),
|
|
1643
|
+
chore: z.boolean().optional(),
|
|
1644
|
+
});
|
|
1645
|
+
export const AutomationCatalogSchema = z.object({
|
|
1646
|
+
sources: z.array(TriggerSourceSchema),
|
|
1647
|
+
templates: z.array(AutomationTemplateSchema),
|
|
1648
|
+
});
|
|
1649
|
+
const StepIdSchema = z
|
|
1650
|
+
.string()
|
|
1651
|
+
.min(1)
|
|
1652
|
+
.max(24)
|
|
1653
|
+
.regex(/^[a-z0-9][a-z0-9-]*$/);
|
|
1654
|
+
export const WorkflowHandoffSchema = z.enum(["fresh", "continue"]);
|
|
1655
|
+
const WORKFLOW_STEPS_MAX = 24;
|
|
1656
|
+
export const WorkflowStepSchema = z.object({
|
|
1657
|
+
id: StepIdSchema,
|
|
1658
|
+
title: z.string().min(1).max(60),
|
|
1659
|
+
goal: z.string().min(1).optional(),
|
|
1660
|
+
prompt: z.string().min(1).optional(),
|
|
1661
|
+
needs: z.array(StepIdSchema),
|
|
1662
|
+
handoff: WorkflowHandoffSchema,
|
|
1663
|
+
output: LoopOutputSchema,
|
|
1664
|
+
checks: z.array(LoopCheckSchema),
|
|
1665
|
+
context: LoopContextSchema,
|
|
1666
|
+
maxSpendUsd: z.number().positive().optional(),
|
|
1667
|
+
agent: AgentProviderSchema.optional(),
|
|
1668
|
+
harness: AgentHarnessSchema.optional(),
|
|
1669
|
+
account: z.string().optional(),
|
|
1670
|
+
model: z.string().optional(),
|
|
1671
|
+
actsAs: entryId.optional(),
|
|
1672
|
+
});
|
|
1673
|
+
export const WorkflowGateSchema = z.object({
|
|
1674
|
+
step: StepIdSchema,
|
|
1675
|
+
field: z.string().min(1),
|
|
1676
|
+
pass: z.array(z.string().min(1)).min(1),
|
|
1677
|
+
token: z.string().optional(),
|
|
1678
|
+
dailyMax: z.number().int().positive().optional(),
|
|
1679
|
+
});
|
|
1680
|
+
export const GATE_DAILY_MAX_DEFAULT = 20;
|
|
1681
|
+
export const GateOutcomeSchema = z.enum(["pass", "fail", "blocked"]);
|
|
1682
|
+
export const GateVerdictSchema = z.object({
|
|
1683
|
+
outcome: GateOutcomeSchema,
|
|
1684
|
+
reason: z.string(),
|
|
1685
|
+
runId: z.string(),
|
|
1686
|
+
value: z.string().optional(),
|
|
1687
|
+
});
|
|
1688
|
+
export const WorkflowSchema = z.object({
|
|
1689
|
+
id: entryId,
|
|
1690
|
+
name: z.string().min(1).max(80),
|
|
1691
|
+
description: z.string().max(400).optional(),
|
|
1692
|
+
steps: z.array(WorkflowStepSchema).min(1).max(WORKFLOW_STEPS_MAX),
|
|
1693
|
+
gate: WorkflowGateSchema.optional(),
|
|
1694
|
+
maxParallel: z.number().int().min(1).max(8),
|
|
1695
|
+
});
|
|
1696
|
+
export const WorkflowStepStateSchema = z.enum(["pending", "running", "done", "failed", "skipped", "stopped"]);
|
|
1697
|
+
export const WorkflowStepRunSchema = z.object({
|
|
1698
|
+
stepId: StepIdSchema,
|
|
1699
|
+
state: WorkflowStepStateSchema,
|
|
1700
|
+
conversationId: z.string(),
|
|
1701
|
+
startedAt: z.number().optional(),
|
|
1702
|
+
endedAt: z.number().optional(),
|
|
1703
|
+
iterations: z.number().int().min(0),
|
|
1704
|
+
costUsd: z.number().optional(),
|
|
1705
|
+
loopState: LoopStateSchema.optional(),
|
|
1706
|
+
detail: z.string().optional(),
|
|
1707
|
+
document: LoopDocumentSchema.optional(),
|
|
1708
|
+
report: z.string().optional(),
|
|
1709
|
+
reportPath: z.string().optional(),
|
|
1710
|
+
});
|
|
1711
|
+
export const WorkflowRunStateSchema = z.enum(["running", "done", "failed", "stopped", "overspent", "error"]);
|
|
1712
|
+
export const WorkflowRunSchema = z.object({
|
|
1713
|
+
runId: z.string().min(1),
|
|
1714
|
+
workflow: WorkflowSchema,
|
|
1715
|
+
repos: z.array(RepoBaseSchema).min(1).max(50),
|
|
1716
|
+
request: z.string().optional(),
|
|
1717
|
+
state: WorkflowRunStateSchema,
|
|
1718
|
+
startedAt: z.number(),
|
|
1719
|
+
endedAt: z.number().optional(),
|
|
1720
|
+
resumed: z.number().int().min(0),
|
|
1721
|
+
detail: z.string().optional(),
|
|
1722
|
+
steps: z.array(WorkflowStepRunSchema),
|
|
1723
|
+
archivedAt: z.number().optional(),
|
|
1724
|
+
});
|
|
1725
|
+
export const WorkflowSummarySchema = WorkflowSchema.extend({ runs: z.array(WorkflowRunSchema) });
|
|
1726
|
+
export const WorkflowsListSchema = z.object({ workflows: z.array(WorkflowSummarySchema) });
|
|
1727
|
+
export const WorkflowRunsListSchema = z.object({ runs: z.array(WorkflowRunSchema) });
|
|
1728
|
+
export const WorkflowIdParamSchema = z.object({ id: z.string() });
|
|
1729
|
+
export const WorkflowRunIdParamSchema = z.object({ runId: z.string() });
|
|
1730
|
+
export const WorkflowRunStartSchema = WorkflowIdParamSchema.extend({ request: z.string().min(1).max(20_000).optional() });
|
|
1731
|
+
export const WorkflowSaveSchema = z.object({ workflow: WorkflowSchema, create: z.boolean() });
|
|
1039
1732
|
export const CiHostSchema = z.enum(["github", "gitlab"]);
|
|
1040
1733
|
export const PipelineStatusSchema = z.enum(["running", "success", "failed", "canceled", "skipped"]);
|
|
1041
1734
|
export const PipelineRunSchema = z.object({
|
|
@@ -1059,6 +1752,7 @@ export const PipelineJobSchema = z.object({
|
|
|
1059
1752
|
name: z.string(),
|
|
1060
1753
|
status: PipelineStatusSchema,
|
|
1061
1754
|
stage: z.string().optional(),
|
|
1755
|
+
needs: z.array(z.string()).optional(),
|
|
1062
1756
|
startedAt: z.number().optional(),
|
|
1063
1757
|
finishedAt: z.number().optional(),
|
|
1064
1758
|
durationSeconds: z.number().optional(),
|
|
@@ -1074,6 +1768,7 @@ export const CiRepoSchema = z.object({
|
|
|
1074
1768
|
url: z.string(),
|
|
1075
1769
|
hookWarning: z.string().optional(),
|
|
1076
1770
|
});
|
|
1771
|
+
export const CI_POLL_INTERVAL_MS = 2 * 60_000;
|
|
1077
1772
|
export const CiRunsResponseSchema = z.object({
|
|
1078
1773
|
repos: z.array(CiRepoSchema),
|
|
1079
1774
|
runs: z.array(PipelineRunSchema),
|
|
@@ -1081,90 +1776,8 @@ export const CiRunsResponseSchema = z.object({
|
|
|
1081
1776
|
});
|
|
1082
1777
|
export const CiSeenResponseSchema = z.object({ seenAt: z.number() });
|
|
1083
1778
|
export const CiRunParamSchema = z.object({ repo: z.string(), runId: z.number() });
|
|
1779
|
+
export const CiFixParamSchema = CiRunParamSchema.extend({ pick: AgentRunPickSchema });
|
|
1084
1780
|
export const CiFixResponseSchema = z.object({ conversationId: z.string() });
|
|
1085
|
-
export const DeployStateSchema = z.enum(["running", "deploying", "stopped", "unhealthy", "unknown"]);
|
|
1086
|
-
export const DeployResourceKindSchema = z.enum(["deployment", "stack"]);
|
|
1087
|
-
export const DeployServiceSchema = z.object({
|
|
1088
|
-
name: z.string(),
|
|
1089
|
-
image: z.string(),
|
|
1090
|
-
updateAvailable: z.boolean(),
|
|
1091
|
-
});
|
|
1092
|
-
export const DeployResourceSchema = z.object({
|
|
1093
|
-
kind: DeployResourceKindSchema,
|
|
1094
|
-
id: z.string(),
|
|
1095
|
-
name: z.string(),
|
|
1096
|
-
state: DeployStateSchema,
|
|
1097
|
-
status: z.string().optional(),
|
|
1098
|
-
server: z.string().optional(),
|
|
1099
|
-
image: z.string().optional(),
|
|
1100
|
-
updateAvailable: z.boolean(),
|
|
1101
|
-
services: z.array(DeployServiceSchema),
|
|
1102
|
-
url: z.string(),
|
|
1103
|
-
});
|
|
1104
|
-
export const DeployServerStateSchema = z.enum(["ok", "unreachable", "disabled"]);
|
|
1105
|
-
export const DeployServerSchema = z.object({
|
|
1106
|
-
id: z.string(),
|
|
1107
|
-
name: z.string(),
|
|
1108
|
-
state: DeployServerStateSchema,
|
|
1109
|
-
cpuPercent: z.number().optional(),
|
|
1110
|
-
memPercent: z.number().optional(),
|
|
1111
|
-
diskPercent: z.number().optional(),
|
|
1112
|
-
url: z.string(),
|
|
1113
|
-
});
|
|
1114
|
-
export const DeployAlertSchema = z.object({
|
|
1115
|
-
id: z.string(),
|
|
1116
|
-
type: z.string(),
|
|
1117
|
-
level: z.enum(["ok", "warning", "critical"]),
|
|
1118
|
-
resolved: z.boolean(),
|
|
1119
|
-
ts: z.number(),
|
|
1120
|
-
resource: z.string().optional(),
|
|
1121
|
-
server: z.string().optional(),
|
|
1122
|
-
from: z.string().optional(),
|
|
1123
|
-
to: z.string().optional(),
|
|
1124
|
-
});
|
|
1125
|
-
export const DeployViewerSchema = z.object({
|
|
1126
|
-
username: z.string(),
|
|
1127
|
-
admin: z.boolean(),
|
|
1128
|
-
});
|
|
1129
|
-
export const DeployRepoLinkSchema = z.object({
|
|
1130
|
-
repo: z.string(),
|
|
1131
|
-
projectName: z.string(),
|
|
1132
|
-
composePath: z.string(),
|
|
1133
|
-
linkedStack: z.string().optional(),
|
|
1134
|
-
suggestions: z.array(z.string()),
|
|
1135
|
-
});
|
|
1136
|
-
export const DeployLinkParamSchema = z.object({
|
|
1137
|
-
capability: z.string(),
|
|
1138
|
-
repo: z.string(),
|
|
1139
|
-
stack: z.string(),
|
|
1140
|
-
});
|
|
1141
|
-
export const DeployOverviewResponseSchema = z.object({
|
|
1142
|
-
komodoUrl: z.string(),
|
|
1143
|
-
reachable: z.boolean(),
|
|
1144
|
-
unreachableReason: z.string().optional(),
|
|
1145
|
-
viewer: DeployViewerSchema.optional(),
|
|
1146
|
-
repos: z.array(DeployRepoLinkSchema).default([]),
|
|
1147
|
-
resources: z.array(DeployResourceSchema),
|
|
1148
|
-
servers: z.array(DeployServerSchema),
|
|
1149
|
-
alerts: z.array(DeployAlertSchema),
|
|
1150
|
-
seenAt: z.number().optional(),
|
|
1151
|
-
});
|
|
1152
|
-
export const DeployCapabilityParamSchema = z.object({ capability: z.string() });
|
|
1153
|
-
export const DeployActionSchema = z.enum(["deploy", "restart", "start", "stop", "pull"]);
|
|
1154
|
-
export const DeployActionParamSchema = z.object({
|
|
1155
|
-
capability: z.string(),
|
|
1156
|
-
kind: DeployResourceKindSchema,
|
|
1157
|
-
id: z.string(),
|
|
1158
|
-
action: DeployActionSchema,
|
|
1159
|
-
});
|
|
1160
|
-
export const DeployLogsParamSchema = z.object({
|
|
1161
|
-
capability: z.string(),
|
|
1162
|
-
kind: DeployResourceKindSchema,
|
|
1163
|
-
id: z.string(),
|
|
1164
|
-
});
|
|
1165
|
-
export const DeployLogsResponseSchema = z.object({ stdout: z.string(), stderr: z.string() });
|
|
1166
|
-
export const DeployFixResponseSchema = z.object({ conversationId: z.string() });
|
|
1167
|
-
export const DeploySeenResponseSchema = z.object({ seenAt: z.number() });
|
|
1168
1781
|
export const PrepushStatusSchema = z.enum(["idle", "running", "passed", "failed", "error", "cancelled"]);
|
|
1169
1782
|
export const PrepushRunSchema = z.object({
|
|
1170
1783
|
status: PrepushStatusSchema,
|
|
@@ -1173,6 +1786,7 @@ export const PrepushRunSchema = z.object({
|
|
|
1173
1786
|
finishedAt: z.number().optional(),
|
|
1174
1787
|
exitCode: z.number().optional(),
|
|
1175
1788
|
timedOut: z.boolean().optional(),
|
|
1789
|
+
session: z.string().optional(),
|
|
1176
1790
|
output: z.string(),
|
|
1177
1791
|
});
|
|
1178
1792
|
export const DraftStatusSchema = z.enum(["proposed", "approved", "posting", "posted", "failed"]);
|
|
@@ -1185,7 +1799,9 @@ export const DraftSchema = z.object({
|
|
|
1185
1799
|
scheduledAt: z.number().optional(),
|
|
1186
1800
|
status: DraftStatusSchema.default("proposed"),
|
|
1187
1801
|
createdAt: z.number().optional(),
|
|
1802
|
+
postingAt: z.number().optional(),
|
|
1188
1803
|
postedAt: z.number().optional(),
|
|
1804
|
+
postedUrl: z.string().optional(),
|
|
1189
1805
|
error: z.string().optional(),
|
|
1190
1806
|
});
|
|
1191
1807
|
export const DraftSummarySchema = DraftSchema.extend({ id: entryId });
|
|
@@ -1197,6 +1813,7 @@ export const PanelSummarySchema = z.object({
|
|
|
1197
1813
|
running: z.boolean(),
|
|
1198
1814
|
healthy: z.boolean(),
|
|
1199
1815
|
port: z.number().optional(),
|
|
1816
|
+
servers: z.array(z.object({ url: z.string(), dir: z.string().optional(), session: z.string().optional() })),
|
|
1200
1817
|
previewUrl: z.string().optional(),
|
|
1201
1818
|
role: z.enum(["intent", "desired-state", "app"]).optional(),
|
|
1202
1819
|
deployConfig: z.boolean(),
|
|
@@ -1205,6 +1822,7 @@ export const PanelSummarySchema = z.object({
|
|
|
1205
1822
|
monorepo: z.boolean(),
|
|
1206
1823
|
vitest: z.boolean(),
|
|
1207
1824
|
userStories: z.boolean(),
|
|
1825
|
+
docs: z.boolean(),
|
|
1208
1826
|
});
|
|
1209
1827
|
export const PanelsListSchema = z.object({ panels: z.array(PanelSummarySchema) });
|
|
1210
1828
|
export const PanelRepoParamSchema = z.object({ repo: z.string() });
|
|
@@ -1216,12 +1834,126 @@ export const PortSummarySchema = z.object({
|
|
|
1216
1834
|
pid: z.number().optional(),
|
|
1217
1835
|
command: z.string().optional(),
|
|
1218
1836
|
cwd: z.string().optional(),
|
|
1837
|
+
session: z.string().optional(),
|
|
1219
1838
|
forwarded: z.boolean(),
|
|
1220
1839
|
previewUrl: z.string().optional(),
|
|
1221
1840
|
});
|
|
1222
1841
|
export const PortsListSchema = z.object({ ports: z.array(PortSummarySchema) });
|
|
1223
1842
|
export const PortParamSchema = z.object({ port: z.number().int().min(1).max(65535) });
|
|
1224
1843
|
export const PortForwardResultSchema = z.object({ previewUrl: z.string().optional() });
|
|
1844
|
+
export const MachineSandboxSchema = z.object({
|
|
1845
|
+
slug: z.string(),
|
|
1846
|
+
container: z.string(),
|
|
1847
|
+
name: z.string().optional(),
|
|
1848
|
+
running: z.boolean(),
|
|
1849
|
+
image: z.string(),
|
|
1850
|
+
tunnelRunning: z.boolean().optional(),
|
|
1851
|
+
});
|
|
1852
|
+
export const MachineSandboxOpSchema = z.enum(["start", "stop", "restart", "update", "rebuild", "rollback", "remove"]);
|
|
1853
|
+
export const MachineSandboxFlowSchema = z.object({
|
|
1854
|
+
op: MachineSandboxOpSchema,
|
|
1855
|
+
slug: z.string().min(1),
|
|
1856
|
+
hash: z.string().optional(),
|
|
1857
|
+
});
|
|
1858
|
+
export const MachineSandboxFlowInputSchema = MachineSandboxFlowSchema.extend({ id: z.string().min(1) });
|
|
1859
|
+
export const MachineFlowLineSchema = z.discriminatedUnion("kind", [
|
|
1860
|
+
z.object({ kind: z.literal("line"), text: z.string() }),
|
|
1861
|
+
z.object({ kind: z.literal("result"), message: z.string() }),
|
|
1862
|
+
z.object({ kind: z.literal("error"), message: z.string() }),
|
|
1863
|
+
]);
|
|
1864
|
+
export const MachinePairingSchema = z.object({
|
|
1865
|
+
sandboxId: z.string(),
|
|
1866
|
+
mode: z.enum(["sync", "mirror"]),
|
|
1867
|
+
localDir: z.string().optional(),
|
|
1868
|
+
mutagenStatus: z.string().optional(),
|
|
1869
|
+
conflicts: z.number().int().nonnegative().optional(),
|
|
1870
|
+
paused: z.boolean().optional(),
|
|
1871
|
+
});
|
|
1872
|
+
export const MachinePortStateSchema = z.enum([
|
|
1873
|
+
"mirrored",
|
|
1874
|
+
"held-by-sandbox",
|
|
1875
|
+
"busy",
|
|
1876
|
+
]);
|
|
1877
|
+
export const MachinePortSchema = z.object({
|
|
1878
|
+
port: z.number().int().min(1).max(65535),
|
|
1879
|
+
host: z.enum(["127.0.0.1", "::1"]),
|
|
1880
|
+
sandboxId: z.string(),
|
|
1881
|
+
state: MachinePortStateSchema,
|
|
1882
|
+
heldBy: z.string().optional(),
|
|
1883
|
+
command: z.string().optional(),
|
|
1884
|
+
});
|
|
1885
|
+
export const MachineWatcherSchema = z.object({
|
|
1886
|
+
running: z.boolean(),
|
|
1887
|
+
pid: z.number().int().optional(),
|
|
1888
|
+
lastTickAt: z.number().optional(),
|
|
1889
|
+
});
|
|
1890
|
+
export const MachineReportSchema = z.object({
|
|
1891
|
+
hostname: z.string(),
|
|
1892
|
+
os: z.string(),
|
|
1893
|
+
agents: z.object({ sync: z.string().optional(), host: z.string().optional() }),
|
|
1894
|
+
sandboxes: z.array(MachineSandboxSchema),
|
|
1895
|
+
pairings: z.array(MachinePairingSchema),
|
|
1896
|
+
ports: z.array(MachinePortSchema),
|
|
1897
|
+
watcher: MachineWatcherSchema,
|
|
1898
|
+
capturedAt: z.number(),
|
|
1899
|
+
});
|
|
1900
|
+
export const ComputerGapSchema = z.enum([
|
|
1901
|
+
"offline",
|
|
1902
|
+
"scope-off",
|
|
1903
|
+
"no-agent",
|
|
1904
|
+
"unreported",
|
|
1905
|
+
]);
|
|
1906
|
+
export const ComputerSchema = z.object({
|
|
1907
|
+
key: z.string(),
|
|
1908
|
+
label: z.string(),
|
|
1909
|
+
syncEnrolled: z.boolean(),
|
|
1910
|
+
hostId: z.string().optional(),
|
|
1911
|
+
online: z.boolean().optional(),
|
|
1912
|
+
platform: z.string().optional(),
|
|
1913
|
+
facts: HostFactsSchema.optional(),
|
|
1914
|
+
hostAgent: z.string().optional(),
|
|
1915
|
+
lastSeen: z.number().optional(),
|
|
1916
|
+
report: MachineReportSchema.optional(),
|
|
1917
|
+
gap: ComputerGapSchema.optional(),
|
|
1918
|
+
});
|
|
1919
|
+
export const ComputersListSchema = z.object({ computers: z.array(ComputerSchema) });
|
|
1920
|
+
export const SyncStatusSchema = z.object({
|
|
1921
|
+
enrolled: z.boolean(),
|
|
1922
|
+
sshHostname: z.string().optional(),
|
|
1923
|
+
syncingFrom: z.string().optional(),
|
|
1924
|
+
syncSeenAt: z.number().optional(),
|
|
1925
|
+
mirroredBy: z.array(z.string()).optional(),
|
|
1926
|
+
machines: z.array(MachineReportSchema).optional(),
|
|
1927
|
+
});
|
|
1928
|
+
export const PublicFileSchema = z.object({
|
|
1929
|
+
path: z.string(),
|
|
1930
|
+
size: z.number(),
|
|
1931
|
+
modifiedAt: z.number(),
|
|
1932
|
+
url: z.string().optional(),
|
|
1933
|
+
blocked: z.string().optional(),
|
|
1934
|
+
});
|
|
1935
|
+
export const PublicListSchema = z.object({ url: z.string().optional(), files: z.array(PublicFileSchema) });
|
|
1936
|
+
export const PublishSchema = z.object({ path: z.string().min(1) });
|
|
1937
|
+
export const UnpublishSchema = z.object({ path: z.string().min(1) });
|
|
1938
|
+
export const PublishResultSchema = z.object({ path: z.string(), url: z.string().optional() });
|
|
1939
|
+
export const ShareDetailSchema = z.enum(["messages", "everything"]);
|
|
1940
|
+
export const SharedConversationSchema = z.object({
|
|
1941
|
+
id: z.string(),
|
|
1942
|
+
conversationId: z.string(),
|
|
1943
|
+
title: z.string(),
|
|
1944
|
+
detail: ShareDetailSchema,
|
|
1945
|
+
sharedAt: z.number(),
|
|
1946
|
+
messages: z.number(),
|
|
1947
|
+
url: z.string().optional(),
|
|
1948
|
+
});
|
|
1949
|
+
export const ShareListSchema = z.object({ shares: z.array(SharedConversationSchema) });
|
|
1950
|
+
export const ShareCreateSchema = z.object({
|
|
1951
|
+
conversationId: z.string().min(1),
|
|
1952
|
+
title: z.string().min(1).max(80),
|
|
1953
|
+
detail: ShareDetailSchema,
|
|
1954
|
+
});
|
|
1955
|
+
export const ShareUpdateSchema = z.object({ id: z.string().min(1) });
|
|
1956
|
+
export const ShareRemoveSchema = z.object({ id: z.string().min(1) });
|
|
1225
1957
|
export const TerminalSessionSchema = z.object({
|
|
1226
1958
|
name: z.string(),
|
|
1227
1959
|
label: z.string().optional(),
|
|
@@ -1231,9 +1963,20 @@ export const TerminalSessionSchema = z.object({
|
|
|
1231
1963
|
exitCode: z.number().optional(),
|
|
1232
1964
|
extensionId: z.string().optional(),
|
|
1233
1965
|
processName: z.string().optional(),
|
|
1966
|
+
help: z.object({ requestId: z.string(), message: z.string(), requestedAt: z.number() }).optional(),
|
|
1234
1967
|
});
|
|
1235
1968
|
export const TerminalsListSchema = z.object({ sessions: z.array(TerminalSessionSchema) });
|
|
1236
1969
|
export const TerminalNameParamSchema = z.object({ name: z.string() });
|
|
1970
|
+
export const TerminalScrollbackQuerySchema = z.object({
|
|
1971
|
+
name: z.string(),
|
|
1972
|
+
lines: z.coerce.number().min(1).max(100_000).default(20_000),
|
|
1973
|
+
});
|
|
1974
|
+
export const TerminalScrollbackSchema = z.object({
|
|
1975
|
+
name: z.string(),
|
|
1976
|
+
text: z.string(),
|
|
1977
|
+
lines: z.number(),
|
|
1978
|
+
truncated: z.boolean(),
|
|
1979
|
+
});
|
|
1237
1980
|
export const BrowserPageSchema = z.object({
|
|
1238
1981
|
id: z.string(),
|
|
1239
1982
|
title: z.string().optional(),
|
|
@@ -1247,12 +1990,13 @@ export const BrowserSessionSchema = z.object({
|
|
|
1247
1990
|
running: z.boolean(),
|
|
1248
1991
|
activityAt: z.number(),
|
|
1249
1992
|
finishedAt: z.number().optional(),
|
|
1993
|
+
help: z.object({ requestId: z.string(), message: z.string(), requestedAt: z.number() }).optional(),
|
|
1250
1994
|
pages: z.array(BrowserPageSchema),
|
|
1251
1995
|
});
|
|
1252
1996
|
export const BrowsersListSchema = z.object({ sessions: z.array(BrowserSessionSchema) });
|
|
1253
1997
|
export const BrowserNameParamSchema = z.object({ name: z.string() });
|
|
1254
1998
|
export const SubagentKindSchema = z.enum(["subagent", "codex", "grok"]);
|
|
1255
|
-
export const SubagentStatusSchema = z.enum(["pending", "running", "completed", "failed", "killed", "paused"]);
|
|
1999
|
+
export const SubagentStatusSchema = z.enum(["pending", "running", "blocked", "completed", "failed", "killed", "paused"]);
|
|
1256
2000
|
export const SubagentSessionSchema = z.object({
|
|
1257
2001
|
id: z.string(),
|
|
1258
2002
|
kind: SubagentKindSchema,
|
|
@@ -1284,6 +2028,23 @@ export const EnvironmentSchema = z.object({
|
|
|
1284
2028
|
container: z.string().optional(),
|
|
1285
2029
|
});
|
|
1286
2030
|
export const EnvironmentApproveSchema = z.object({ hash: z.string().min(1) });
|
|
2031
|
+
const environmentToolSchema = z.object({
|
|
2032
|
+
name: z.string(),
|
|
2033
|
+
version: z.string().optional(),
|
|
2034
|
+
});
|
|
2035
|
+
export const EnvironmentItemSchema = z.object({
|
|
2036
|
+
id: z.string(),
|
|
2037
|
+
name: z.string(),
|
|
2038
|
+
origin: z.enum(["custom", "capability", "base"]),
|
|
2039
|
+
originLabel: z.string().optional(),
|
|
2040
|
+
state: z.enum(["active", "after-rebuild", "awaiting-approval"]),
|
|
2041
|
+
tools: z.array(environmentToolSchema),
|
|
2042
|
+
extras: z.number().optional(),
|
|
2043
|
+
purpose: z.string().optional(),
|
|
2044
|
+
detail: z.string().optional(),
|
|
2045
|
+
commands: z.string().optional(),
|
|
2046
|
+
});
|
|
2047
|
+
export const EnvironmentContentsSchema = z.object({ items: z.array(EnvironmentItemSchema) });
|
|
1287
2048
|
export const BundleManifestSchema = z.object({
|
|
1288
2049
|
version: z.literal(1),
|
|
1289
2050
|
sandbox: z.object({ name: z.string() }).optional(),
|
|
@@ -1302,6 +2063,15 @@ export const ImportReportSchema = z.object({
|
|
|
1302
2063
|
refused: z.array(z.string()),
|
|
1303
2064
|
needsAction: z.array(z.object({ subject: z.string(), detail: z.string() })),
|
|
1304
2065
|
});
|
|
2066
|
+
export const BundleExportSchema = z.object({
|
|
2067
|
+
name: z.string(),
|
|
2068
|
+
status: z.enum(["packing", "ready", "failed"]),
|
|
2069
|
+
bytes: z.number(),
|
|
2070
|
+
createdAt: z.number(),
|
|
2071
|
+
secrets: z.boolean(),
|
|
2072
|
+
error: z.string().optional(),
|
|
2073
|
+
});
|
|
2074
|
+
export const BundleExportsSchema = z.object({ exports: z.array(BundleExportSchema) });
|
|
1305
2075
|
export const SecretSetSchema = z.object({
|
|
1306
2076
|
key: z
|
|
1307
2077
|
.string()
|
|
@@ -1321,18 +2091,35 @@ export const SecretInventoryEntrySchema = z.object({
|
|
|
1321
2091
|
storedAt: z.string(),
|
|
1322
2092
|
revealable: z.boolean(),
|
|
1323
2093
|
ci: z.object({ synced: z.boolean(), pushedAt: z.string().optional() }).optional(),
|
|
2094
|
+
lastUse: z.object({ at: z.number(), lane: z.enum(["shell", "code", "browser"]), detail: z.string().optional() }).optional(),
|
|
1324
2095
|
});
|
|
1325
2096
|
export const SecretInventorySchema = z.object({ entries: z.array(SecretInventoryEntrySchema) });
|
|
2097
|
+
export const AdapterHealthSchema = z.object({
|
|
2098
|
+
state: z.enum(["ready", "unavailable", "unknown"]),
|
|
2099
|
+
detail: z.string().optional(),
|
|
2100
|
+
checkedAt: z.number(),
|
|
2101
|
+
});
|
|
1326
2102
|
export const InfoSchema = z.object({
|
|
1327
2103
|
name: z.string().optional(),
|
|
1328
2104
|
image: z.string().optional(),
|
|
1329
2105
|
version: z.string().optional(),
|
|
1330
2106
|
latest: z.string().optional(),
|
|
1331
2107
|
updateAvailable: z.boolean().optional(),
|
|
1332
|
-
|
|
2108
|
+
runtimes: z.record(z.string(), AdapterHealthSchema).optional(),
|
|
2109
|
+
channel: z.string().optional(),
|
|
2110
|
+
previousImage: z.string().optional(),
|
|
2111
|
+
updateNotes: z.array(z.string()).optional(),
|
|
2112
|
+
moreUpdateNotes: z.number().optional(),
|
|
2113
|
+
breakingNotes: z.array(z.string()).optional(),
|
|
2114
|
+
});
|
|
2115
|
+
export const ManifestProblemSchema = z.object({
|
|
2116
|
+
kind: z.enum(["unreadable", "unknownKey", "invalidEntry"]),
|
|
2117
|
+
detail: z.string(),
|
|
2118
|
+
suggestion: z.string().optional(),
|
|
2119
|
+
});
|
|
2120
|
+
export const ManifestProblemReportSchema = z.object({ path: z.string(), problems: z.array(ManifestProblemSchema) });
|
|
2121
|
+
export const ManifestProblemsSchema = z.array(ManifestProblemReportSchema);
|
|
1333
2122
|
export const DaemonSessionSchema = z.object({ token: z.string(), expiresAt: z.number(), email: z.string() });
|
|
1334
|
-
export const HostTunnelInputSchema = z.object({ hostName: z.string().min(1) });
|
|
1335
|
-
export const HostTunnelSchema = z.object({ hostname: z.string(), tunnelToken: z.string() });
|
|
1336
2123
|
export const ActivityEventSchema = z.object({
|
|
1337
2124
|
id: z.string(),
|
|
1338
2125
|
at: z.number(),
|
|
@@ -1346,6 +2133,10 @@ export const ActivityEventSchema = z.object({
|
|
|
1346
2133
|
method: z.string().optional(),
|
|
1347
2134
|
endpoint: z.string().optional(),
|
|
1348
2135
|
sessionId: z.string().optional(),
|
|
2136
|
+
turnId: z.string().optional(),
|
|
2137
|
+
conversationId: z.string().optional(),
|
|
2138
|
+
title: z.string().optional(),
|
|
2139
|
+
origin: AgentOriginSchema.optional(),
|
|
1349
2140
|
automationIds: z.array(z.string()).optional(),
|
|
1350
2141
|
outcome: z.enum(["ok", "error"]).optional(),
|
|
1351
2142
|
error: z.string().optional(),
|
|
@@ -1360,7 +2151,7 @@ export const ActivityListSchema = z.object({ events: z.array(ActivityEventSchema
|
|
|
1360
2151
|
export const ActivityConnectionSchema = z.object({
|
|
1361
2152
|
capabilityId: z.string(),
|
|
1362
2153
|
provider: z.string(),
|
|
1363
|
-
gateway: z.enum(["ready", "connecting", "disconnected", "idle"]),
|
|
2154
|
+
gateway: z.enum(["ready", "connecting", "pairing", "disconnected", "idle"]),
|
|
1364
2155
|
lastError: z.string().optional(),
|
|
1365
2156
|
});
|
|
1366
2157
|
export const ActivityStatusSchema = z.object({
|
|
@@ -1384,8 +2175,13 @@ export const UsageTurnSchema = z.object({
|
|
|
1384
2175
|
durationMs: z.number(),
|
|
1385
2176
|
terse: z.boolean().optional(),
|
|
1386
2177
|
iqContext: z.boolean().optional(),
|
|
1387
|
-
|
|
2178
|
+
iqContextOutcome: IqContextOutcomeSchema.optional(),
|
|
2179
|
+
iqSearchArm: z.boolean().optional(),
|
|
2180
|
+
iqSearchCohort: z.string().optional(),
|
|
2181
|
+
iqContextDurationMs: z.number().nonnegative().optional(),
|
|
1388
2182
|
proseChars: z.number().optional(),
|
|
2183
|
+
searchCalls: z.number().optional(),
|
|
2184
|
+
openingSearches: z.number().optional(),
|
|
1389
2185
|
});
|
|
1390
2186
|
export const UsageRollupRowSchema = z.object({
|
|
1391
2187
|
day: z.string(),
|
|
@@ -1434,29 +2230,6 @@ export const LogReadSchema = z.object({
|
|
|
1434
2230
|
text: z.string(),
|
|
1435
2231
|
truncated: z.boolean(),
|
|
1436
2232
|
});
|
|
1437
|
-
export const MemoryFileEntrySchema = z.object({
|
|
1438
|
-
project: z.string(),
|
|
1439
|
-
name: z.string(),
|
|
1440
|
-
sizeBytes: z.number(),
|
|
1441
|
-
modifiedAt: z.number(),
|
|
1442
|
-
});
|
|
1443
|
-
export const MemoryListSchema = z.object({ files: z.array(MemoryFileEntrySchema) });
|
|
1444
|
-
export const MemoryFileQuerySchema = z.object({
|
|
1445
|
-
project: z.string().min(1),
|
|
1446
|
-
name: z.string().min(1),
|
|
1447
|
-
});
|
|
1448
|
-
export const MemoryFileSchema = z.object({
|
|
1449
|
-
project: z.string(),
|
|
1450
|
-
name: z.string(),
|
|
1451
|
-
content: z.string(),
|
|
1452
|
-
sizeBytes: z.number(),
|
|
1453
|
-
modifiedAt: z.number(),
|
|
1454
|
-
});
|
|
1455
|
-
export const MemoryWriteSchema = z.object({
|
|
1456
|
-
project: z.string().min(1),
|
|
1457
|
-
name: z.string().min(1),
|
|
1458
|
-
content: z.string().max(1_048_576),
|
|
1459
|
-
});
|
|
1460
2233
|
export const PresenceReportSchema = z.object({
|
|
1461
2234
|
clientId: z.string(),
|
|
1462
2235
|
idle: z.boolean(),
|
|
@@ -1465,7 +2238,7 @@ export const PresenceReportSchema = z.object({
|
|
|
1465
2238
|
path: z.string().optional(),
|
|
1466
2239
|
});
|
|
1467
2240
|
export const PushSubscriptionSchema = z.object({
|
|
1468
|
-
endpoint: z.
|
|
2241
|
+
endpoint: z.url(),
|
|
1469
2242
|
keys: z.object({
|
|
1470
2243
|
p256dh: z.string().min(1),
|
|
1471
2244
|
auth: z.string().min(1),
|
|
@@ -1479,10 +2252,10 @@ export const PushNotificationSchema = z.object({
|
|
|
1479
2252
|
requireInteraction: z.boolean().optional(),
|
|
1480
2253
|
});
|
|
1481
2254
|
export const PushConfigSchema = z.object({ publicKey: z.string(), subscribed: z.boolean() });
|
|
1482
|
-
export const PushEndpointSchema = z.object({ endpoint: z.
|
|
1483
|
-
export const PushConfigQuerySchema = z.object({ endpoint: z.
|
|
2255
|
+
export const PushEndpointSchema = z.object({ endpoint: z.url() });
|
|
2256
|
+
export const PushConfigQuerySchema = z.object({ endpoint: z.url().optional() });
|
|
1484
2257
|
export const PushTestSchema = z.object({ delivered: z.number().int().nonnegative() });
|
|
1485
|
-
export const PROBE_IDS = ["outdated", "audit", "knip", "jscpd"];
|
|
2258
|
+
export const PROBE_IDS = ["outdated", "audit", "knip", "jscpd", "ui", "bundle"];
|
|
1486
2259
|
export const ProbeIdSchema = z.enum(PROBE_IDS);
|
|
1487
2260
|
export const OutdatedPackageSchema = z.object({
|
|
1488
2261
|
name: z.string(),
|
|
@@ -1511,12 +2284,25 @@ export const DuplicationSchema = z.object({
|
|
|
1511
2284
|
clones: z.number().int().nonnegative(),
|
|
1512
2285
|
top: z.array(z.object({ lines: z.number().int().nonnegative(), first: z.string(), second: z.string() })),
|
|
1513
2286
|
});
|
|
2287
|
+
export const UiScanSchema = z.object({
|
|
2288
|
+
components: z.array(z.string()),
|
|
2289
|
+
bypasses: z.array(z.object({ path: z.string(), count: z.number().int().positive() })),
|
|
2290
|
+
idioms: z.array(z.object({ id: z.string(), files: z.array(z.string()) })),
|
|
2291
|
+
});
|
|
2292
|
+
export const BundleSchema = z.object({
|
|
2293
|
+
dir: z.string(),
|
|
2294
|
+
totalBytes: z.number().int().nonnegative(),
|
|
2295
|
+
totalGzip: z.number().int().nonnegative(),
|
|
2296
|
+
assets: z.array(z.object({ path: z.string(), bytes: z.number().int().nonnegative(), gzip: z.number().int().nonnegative() })),
|
|
2297
|
+
});
|
|
1514
2298
|
export const ProbeStateSchema = z.enum(["ok", "unavailable", "failed"]);
|
|
1515
2299
|
export const ProbeFactsSchema = z.discriminatedUnion("id", [
|
|
1516
2300
|
z.object({ id: z.literal("outdated"), packages: z.array(OutdatedPackageSchema) }),
|
|
1517
2301
|
z.object({ id: z.literal("audit"), advisories: z.array(AdvisorySchema) }),
|
|
1518
2302
|
z.object({ id: z.literal("knip"), deadCode: DeadCodeSchema }),
|
|
1519
2303
|
z.object({ id: z.literal("jscpd"), duplication: DuplicationSchema }),
|
|
2304
|
+
z.object({ id: z.literal("ui"), scan: UiScanSchema }),
|
|
2305
|
+
z.object({ id: z.literal("bundle"), bundle: BundleSchema }),
|
|
1520
2306
|
]);
|
|
1521
2307
|
export const ProbeResultSchema = z.object({
|
|
1522
2308
|
id: ProbeIdSchema,
|
|
@@ -1540,6 +2326,7 @@ export const ChoreShapeSchema = z.object({
|
|
|
1540
2326
|
ci: z.array(z.string()),
|
|
1541
2327
|
lockfile: z.boolean(),
|
|
1542
2328
|
packageManifest: z.boolean(),
|
|
2329
|
+
deps: z.array(z.string()),
|
|
1543
2330
|
});
|
|
1544
2331
|
export const ChoreSignalsSchema = z.object({
|
|
1545
2332
|
packages: z.array(ChorePackageSchema),
|
|
@@ -1559,11 +2346,25 @@ export const ChoreLedgerEntrySchema = z.object({
|
|
|
1559
2346
|
digest: z.string(),
|
|
1560
2347
|
snoozedUntil: z.number().optional(),
|
|
1561
2348
|
});
|
|
2349
|
+
export const RunningProbeSchema = z.object({
|
|
2350
|
+
repo: z.string(),
|
|
2351
|
+
id: ProbeIdSchema,
|
|
2352
|
+
askedAt: z.number(),
|
|
2353
|
+
startedAt: z.number().optional(),
|
|
2354
|
+
});
|
|
1562
2355
|
export const ChoresReportSchema = z.object({
|
|
1563
2356
|
repos: z.array(z.object({ repo: z.string(), probes: z.array(ProbeResultSchema), signals: ChoreSignalsSchema })),
|
|
1564
2357
|
ledger: z.array(ChoreLedgerEntrySchema),
|
|
2358
|
+
running: z.array(RunningProbeSchema),
|
|
1565
2359
|
node: z.string(),
|
|
1566
2360
|
});
|
|
1567
2361
|
export const ChoreProbeRequestSchema = z.object({ repo: z.string().min(1), id: ProbeIdSchema });
|
|
1568
2362
|
export const ChoreLedgerWriteSchema = ChoreLedgerEntrySchema;
|
|
2363
|
+
export const ReadinessCheckSchema = z.object({
|
|
2364
|
+
id: z.string(),
|
|
2365
|
+
label: z.string(),
|
|
2366
|
+
status: z.enum(["pass", "warn", "fail"]),
|
|
2367
|
+
detail: z.string(),
|
|
2368
|
+
});
|
|
2369
|
+
export const ExtensionReadinessSchema = z.object({ checks: z.array(ReadinessCheckSchema) });
|
|
1569
2370
|
//# sourceMappingURL=schemas.js.map
|