@lineai/agent-platform-types 0.1.0 → 0.1.2

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.
@@ -1,122 +0,0 @@
1
- import { z } from 'zod';
2
- import { CollectionAccessSchema, ConnectedIntegrationSchema, ContextFileRefSchema, MemoryCardRefSchema, } from './capabilities';
3
- /**
4
- * Plugin schemas — these mirror the documents stored in Firestore at:
5
- * organizations/{orgId}/projects/{projectId}/services/agent-platform/plugin/{section}
6
- *
7
- * Sections: defaults, skills, agents (subagents), mcp-servers, hooks.
8
- *
9
- * The line-ai console authors these documents; the agent-platform orchestrator
10
- * loads them at task submission time and merges them into the resolved task
11
- * definition that the runtime executes.
12
- */
13
- // ---------- API capabilities (mirror of runtime CapabilitiesSchema) ----------
14
- export const PluginCapabilitiesSchema = z.object({
15
- promptCaching: z.boolean().optional(),
16
- extendedThinking: z
17
- .object({
18
- enabled: z.boolean(),
19
- budgetTokens: z.number().min(1024),
20
- })
21
- .optional(),
22
- extendedContext: z.boolean().optional(),
23
- memory: z
24
- .object({
25
- enabled: z.boolean(),
26
- backend: z.enum(['gcs', 'local']).default('gcs'),
27
- directory: z.string().optional(),
28
- })
29
- .optional(),
30
- });
31
- // ---------- Defaults section ----------
32
- export const PluginDefaultsSchema = z.object({
33
- // Execution
34
- model: z.string().optional(),
35
- maxTurns: z.number().min(1).max(500).optional(),
36
- timeoutSeconds: z.number().min(60).max(86400).optional(),
37
- workingDir: z.string().optional(),
38
- // System prompt
39
- systemPromptRef: z.string().optional(),
40
- persona: z.string().optional(),
41
- constraints: z.array(z.string()).optional(),
42
- // Tools
43
- allowedTools: z.array(z.string()).optional(),
44
- disabledTools: z.array(z.string()).optional(),
45
- // SDK features
46
- capabilities: PluginCapabilitiesSchema.optional(),
47
- betas: z.array(z.string()).optional(),
48
- // Capability resources (replaced — not merged — when task supplies its own)
49
- integrations: z.array(ConnectedIntegrationSchema).optional(),
50
- collections: z.array(CollectionAccessSchema).optional(),
51
- contextFiles: z.array(ContextFileRefSchema).optional(),
52
- memoryCards: z.array(MemoryCardRefSchema).optional(),
53
- });
54
- // ---------- Skills section ----------
55
- export const SkillSchema = z.object({
56
- id: z.string(),
57
- name: z.string(),
58
- description: z.string(),
59
- body: z.string(),
60
- allowedTools: z.array(z.string()).optional(),
61
- });
62
- export const PluginSkillsSchema = z.object({
63
- items: z.array(SkillSchema).default([]),
64
- });
65
- // ---------- Subagents section ----------
66
- export const SubagentModelChoiceSchema = z.enum([
67
- 'inherit',
68
- 'haiku',
69
- 'sonnet',
70
- 'opus',
71
- ]);
72
- export const PluginSubagentSchema = z.object({
73
- id: z.string(),
74
- name: z.string(),
75
- description: z.string(),
76
- prompt: z.string(),
77
- tools: z.array(z.string()).optional(),
78
- model: SubagentModelChoiceSchema.optional(),
79
- // Skill IDs the subagent should have access to (resolved via .claude/skills/).
80
- skills: z.array(z.string()).optional(),
81
- // MCP server names (keys in the merged mcpServers catalog).
82
- mcpServers: z.array(z.string()).optional(),
83
- });
84
- export const PluginAgentsSchema = z.object({
85
- items: z.array(PluginSubagentSchema).default([]),
86
- });
87
- // ---------- MCP servers section ----------
88
- export const PluginMcpServerEntrySchema = z.object({
89
- type: z.literal('http'),
90
- url: z.string().url(),
91
- headers: z.record(z.string()).optional(),
92
- });
93
- export const PluginMcpServersSchema = z.object({
94
- servers: z.record(PluginMcpServerEntrySchema).default({}),
95
- });
96
- // ---------- Hooks section (read-only, deferred) ----------
97
- export const PluginHookSchema = z.object({
98
- id: z.string(),
99
- name: z.string(),
100
- description: z.string(),
101
- event: z.string(),
102
- });
103
- export const PluginHooksSchema = z.object({
104
- items: z.array(PluginHookSchema).default([]),
105
- });
106
- // ---------- Full plugin snapshot ----------
107
- export const PluginSnapshotSchema = z.object({
108
- defaults: PluginDefaultsSchema.nullable().optional(),
109
- skills: PluginSkillsSchema.nullable().optional(),
110
- agents: PluginAgentsSchema.nullable().optional(),
111
- 'mcp-servers': PluginMcpServersSchema.nullable().optional(),
112
- hooks: PluginHooksSchema.nullable().optional(),
113
- });
114
- /** The Firestore section keys, in load order. */
115
- export const PLUGIN_SECTIONS = [
116
- 'defaults',
117
- 'skills',
118
- 'agents',
119
- 'mcp-servers',
120
- 'hooks',
121
- ];
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4Qjs7Ozs7Ozs7O0dBU0c7QUFFSCxnRkFBZ0Y7QUFFaEYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMvQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hCLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO1FBQ3BCLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztLQUNuQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2IsZUFBZSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsTUFBTSxFQUFFLENBQUM7U0FDTixNQUFNLENBQUM7UUFDTixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNwQixPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDaEQsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDakMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUdILHlDQUF5QztBQUV6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzND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
@@ -1,64 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * Persisted records returned by the agent platform API. These represent
4
- * Firestore documents the orchestrator owns:
5
- *
6
- * organizations/{orgId}/projects/{projectId}/services/agent-platform/
7
- * tasks/{taskId} ← TaskRecord
8
- * tasks/{taskId}/runs/{runId} ← RunRecord
9
- */
10
- export const TaskStatusSchema = z.enum([
11
- 'pending',
12
- 'running',
13
- 'succeeded',
14
- 'failed',
15
- 'cancelled',
16
- ]);
17
- export const RunStatusSchema = z.enum(['running', 'succeeded', 'failed']);
18
- export const RunMetricsSchema = z.object({
19
- turns: z.number(),
20
- durationMs: z.number(),
21
- tokens: z
22
- .object({
23
- input: z.number(),
24
- output: z.number(),
25
- cacheRead: z.number().optional(),
26
- cacheCreation: z.number().optional(),
27
- source: z.enum(['sdk', 'reconciled']),
28
- })
29
- .optional(),
30
- });
31
- export const RunRecordSchema = z.object({
32
- id: z.string(),
33
- taskId: z.string(),
34
- status: RunStatusSchema,
35
- sessionId: z.string().optional(),
36
- jobName: z.string().optional(),
37
- startedAt: z.string(),
38
- completedAt: z.string().optional(),
39
- result: z.string().optional(),
40
- error: z.string().optional(),
41
- artifacts: z.array(z.string()).default([]),
42
- metrics: RunMetricsSchema,
43
- });
44
- export const TaskRecordSchema = z.object({
45
- id: z.string(),
46
- workflowId: z.string().optional(),
47
- status: TaskStatusSchema,
48
- createdAt: z.string(),
49
- createdBy: z.string(),
50
- idempotencyKey: z.string().optional(),
51
- definition: z.record(z.unknown()),
52
- callbackUrl: z.string().optional(),
53
- orgId: z.string(),
54
- projectId: z.string(),
55
- });
56
- export const TaskDetailResponseSchema = TaskRecordSchema.extend({
57
- latestRun: RunRecordSchema.optional(),
58
- runs: z.array(RunRecordSchema).optional(),
59
- });
60
- export const TaskListResponseSchema = z.object({
61
- tasks: z.array(TaskRecordSchema),
62
- nextPageToken: z.string().optional(),
63
- });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Jkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWNvcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEI7Ozs7Ozs7R0FPRztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckMsU0FBUztJQUNULFNBQVM7SUFDVCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFHSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUcxRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxDQUFDO1NBQ04sTUFBTSxDQUFDO1FBQ04sS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDakIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDbEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDaEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDcEMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDdEMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUdILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3RDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGVBQWU7SUFDdkIsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDaEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDckIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMxQyxPQUFPLEVBQUUsZ0JBQWdCO0NBQzFCLENBQUMsQ0FBQztBQUdILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxNQUFNLEVBQUUsZ0JBQWdCO0lBQ3hCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3JCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3JCLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUN0QixDQUFDLENBQUM7QUFHSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDOUQsU0FBUyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQzFDLENBQUMsQ0FBQztBQUdILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDaEMsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDckMsQ0FBQyxDQUFDIn0=