@polpo-ai/server 0.15.47 → 0.15.48

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/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { ScheduleService, ScheduleServiceError, type ManualScheduleTriggerInput,
18
18
  export { legacyMissionScheduleId, migrateLegacyMissionSchedules, type LegacyMissionMigrationCode, type LegacyMissionMigrationItem, type LegacyMissionMigrationOptions, type LegacyMissionMigrationResult, type LegacyMissionMigrationStatus, type LegacyMissionScheduleRecord, } from "./services/schedules-migration.js";
19
19
  export { watcherRoutes } from "./routes/watchers.js";
20
20
  export { stateRoutes } from "./routes/state.js";
21
+ export { brainRoutes, type BrainRouteDeps, } from "./routes/brain.js";
21
22
  export { healthRoutes } from "./routes/health.js";
22
23
  export { completionRoutes, resumeProjectLoopRun, buildChatRunInjection, prepareChatCompletionExecution, runConversationTurn, runChatTurnViaRun, type ConversationTurnResult, type ChatViaRunTurnResult, type PreparedConversationTurn, type CompletionRouteDeps, type CompletionRuntimeInvocation, type CompletionRuntimePlanInput, } from "./routes/completions.js";
23
24
  export { agentRoutes } from "./routes/agents.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,GACjC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC1I,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19,6 +19,7 @@ export { ScheduleService, ScheduleServiceError, } from "./services/schedules.js"
19
19
  export { legacyMissionScheduleId, migrateLegacyMissionSchedules, } from "./services/schedules-migration.js";
20
20
  export { watcherRoutes } from "./routes/watchers.js";
21
21
  export { stateRoutes } from "./routes/state.js";
22
+ export { brainRoutes, } from "./routes/brain.js";
22
23
  export { healthRoutes } from "./routes/health.js";
23
24
  export { completionRoutes, resumeProjectLoopRun, buildChatRunInjection, prepareChatCompletionExecution, runConversationTurn, runChatTurnViaRun, } from "./routes/completions.js";
24
25
  export { agentRoutes } from "./routes/agents.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,oBAAoB,GAIrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAO9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,GAOlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAyB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAsC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAuB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,gBAAgB,GAMjB,MAAM,0BAA0B,CAAC;AAmBlC,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC1I,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,eAAe,EACf,oBAAoB,GAIrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAO9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,WAAW,GAEZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,GAOlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAyB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAsC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAuB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,gBAAgB,GAMjB,MAAM,0BAA0B,CAAC;AAmBlC,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC1I,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { OpenAPIHono } from "@hono/zod-openapi";
2
+ import type { Context } from "hono";
3
+ import { type BrainManagementService, type BrainServiceContext } from "@polpo-ai/core/brain";
4
+ export interface BrainRouteDeps {
5
+ readonly service: BrainManagementService;
6
+ readonly context: BrainServiceContext;
7
+ }
8
+ type BrainRouteDepsResolver = (context: Context) => BrainRouteDeps | Promise<BrainRouteDeps>;
9
+ export declare function brainRoutes(resolveDeps: BrainRouteDepsResolver): OpenAPIHono;
10
+ export {};
11
+ //# sourceMappingURL=brain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAUL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAiM9B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC;AAED,KAAK,sBAAsB,GAAG,CAC5B,OAAO,EAAE,OAAO,KACb,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAsH9C,wBAAgB,WAAW,CACzB,WAAW,EAAE,sBAAsB,GAClC,WAAW,CAkJb"}
@@ -0,0 +1,379 @@
1
+ import { OpenAPIHono, createRoute, z, } from "@hono/zod-openapi";
2
+ import { BRAIN_SOURCE_STATUSES, BRAIN_SOURCE_TYPES, BRAIN_TRUST_LEVELS, BrainContractError, BrainIngestionError, BrainStoreAuthorizationError, BrainStoreConflictError, BrainStoreValidationError, normalizeBrainScope, } from "@polpo-ai/core/brain";
3
+ const ScopeSchema = z.object({
4
+ kind: z.enum(["org", "project"]),
5
+ subjectId: z.string().trim().min(1).max(512),
6
+ }).strict();
7
+ const PasteContentSchema = z.object({
8
+ kind: z.literal("paste"),
9
+ text: z.string().min(1),
10
+ contentType: z.string().trim().min(1).max(256).optional(),
11
+ }).strict();
12
+ const FileContentSchema = z.object({
13
+ kind: z.literal("file"),
14
+ path: z.string().trim().min(1).max(8_192),
15
+ }).strict();
16
+ const UrlContentSchema = z.object({
17
+ kind: z.literal("url"),
18
+ url: z.string().trim().min(1).max(8_192),
19
+ }).strict();
20
+ const ConnectionContentSchema = z.object({
21
+ kind: z.literal("connection"),
22
+ connectionId: z.string().trim().min(1).max(512),
23
+ locator: z.string().trim().min(1).max(8_192).optional(),
24
+ }).strict();
25
+ const ContentSchema = z.discriminatedUnion("kind", [
26
+ PasteContentSchema,
27
+ FileContentSchema,
28
+ UrlContentSchema,
29
+ ConnectionContentSchema,
30
+ ]);
31
+ const CreateSourceSchema = z.object({
32
+ scope: ScopeSchema.optional(),
33
+ id: z.string().trim().min(1).max(512).optional(),
34
+ label: z.string().trim().min(1).max(512),
35
+ trust: z.enum(BRAIN_TRUST_LEVELS),
36
+ metadata: z.record(z.string(), z.unknown()).optional(),
37
+ content: ContentSchema,
38
+ }).strict();
39
+ const UpdateSourceSchema = z.object({
40
+ label: z.string().trim().min(1).max(512).optional(),
41
+ trust: z.enum(BRAIN_TRUST_LEVELS).optional(),
42
+ metadata: z.record(z.string(), z.unknown()).optional(),
43
+ }).strict().refine((value) => Object.keys(value).length > 0, "At least one source field is required");
44
+ const ReindexSourceSchema = z.object({
45
+ content: ContentSchema,
46
+ }).strict();
47
+ const SearchSchema = z.object({
48
+ query: z.string().trim().min(1).max(16_384),
49
+ scopes: z.array(ScopeSchema).min(1).max(100).optional(),
50
+ limit: z.number().int().min(1).max(1_000).optional(),
51
+ tokenBudget: z.number().int().min(0).max(1_000_000).optional(),
52
+ }).strict();
53
+ const SourceParamsSchema = z.object({
54
+ sourceId: z.string().trim().min(1).max(512),
55
+ });
56
+ const ScopeQuerySchema = z.object({
57
+ scopeKind: z.enum(["org", "project"]).optional(),
58
+ scopeId: z.string().trim().min(1).max(512).optional(),
59
+ });
60
+ const ListQuerySchema = ScopeQuerySchema.extend({
61
+ status: z.string().trim().min(1).optional(),
62
+ type: z.string().trim().min(1).optional(),
63
+ limit: z.coerce.number().int().min(1).max(1_000).optional(),
64
+ cursor: z.string().trim().min(1).max(8_192).optional(),
65
+ });
66
+ const SuccessSchema = z.object({
67
+ ok: z.literal(true),
68
+ data: z.any(),
69
+ });
70
+ const ErrorSchema = z.object({
71
+ ok: z.literal(false),
72
+ error: z.string(),
73
+ code: z.string(),
74
+ });
75
+ function responses(successStatus) {
76
+ return {
77
+ [successStatus]: {
78
+ content: { "application/json": { schema: SuccessSchema } },
79
+ description: "Success",
80
+ },
81
+ 400: {
82
+ content: { "application/json": { schema: ErrorSchema } },
83
+ description: "Invalid request",
84
+ },
85
+ 403: {
86
+ content: { "application/json": { schema: ErrorSchema } },
87
+ description: "Forbidden",
88
+ },
89
+ 404: {
90
+ content: { "application/json": { schema: ErrorSchema } },
91
+ description: "Not found",
92
+ },
93
+ 409: {
94
+ content: { "application/json": { schema: ErrorSchema } },
95
+ description: "Conflict",
96
+ },
97
+ };
98
+ }
99
+ const listRoute = createRoute({
100
+ method: "get",
101
+ path: "/sources",
102
+ tags: ["Brain"],
103
+ summary: "List Brain sources",
104
+ request: { query: ListQuerySchema },
105
+ responses: responses(200),
106
+ });
107
+ const createRouteDefinition = createRoute({
108
+ method: "post",
109
+ path: "/sources",
110
+ tags: ["Brain"],
111
+ summary: "Create and ingest a Brain source",
112
+ request: {
113
+ body: {
114
+ content: { "application/json": { schema: CreateSourceSchema } },
115
+ },
116
+ },
117
+ responses: responses(201),
118
+ });
119
+ const getRoute = createRoute({
120
+ method: "get",
121
+ path: "/sources/{sourceId}",
122
+ tags: ["Brain"],
123
+ summary: "Get a Brain source",
124
+ request: {
125
+ params: SourceParamsSchema,
126
+ query: ScopeQuerySchema,
127
+ },
128
+ responses: responses(200),
129
+ });
130
+ const updateRoute = createRoute({
131
+ method: "patch",
132
+ path: "/sources/{sourceId}",
133
+ tags: ["Brain"],
134
+ summary: "Update Brain source metadata",
135
+ request: {
136
+ params: SourceParamsSchema,
137
+ query: ScopeQuerySchema,
138
+ body: {
139
+ content: { "application/json": { schema: UpdateSourceSchema } },
140
+ },
141
+ },
142
+ responses: responses(200),
143
+ });
144
+ const deleteRoute = createRoute({
145
+ method: "delete",
146
+ path: "/sources/{sourceId}",
147
+ tags: ["Brain"],
148
+ summary: "Delete a Brain source",
149
+ request: {
150
+ params: SourceParamsSchema,
151
+ query: ScopeQuerySchema,
152
+ },
153
+ responses: responses(200),
154
+ });
155
+ const reindexRoute = createRoute({
156
+ method: "post",
157
+ path: "/sources/{sourceId}/reindex",
158
+ tags: ["Brain"],
159
+ summary: "Build and publish a new Brain source version",
160
+ request: {
161
+ params: SourceParamsSchema,
162
+ query: ScopeQuerySchema,
163
+ body: {
164
+ content: { "application/json": { schema: ReindexSourceSchema } },
165
+ },
166
+ },
167
+ responses: responses(202),
168
+ });
169
+ const searchRoute = createRoute({
170
+ method: "post",
171
+ path: "/search",
172
+ tags: ["Brain"],
173
+ summary: "Search granted Brain sources",
174
+ request: {
175
+ body: {
176
+ content: { "application/json": { schema: SearchSchema } },
177
+ },
178
+ },
179
+ responses: responses(200),
180
+ });
181
+ const publicInputCodes = new Set([
182
+ "content_too_large",
183
+ "empty_content",
184
+ "fetch_failed",
185
+ "file_outside_root",
186
+ "too_many_redirects",
187
+ "unsafe_url",
188
+ "unsupported_file",
189
+ "unsupported_mime",
190
+ ]);
191
+ function errorResponse(c, error) {
192
+ if (error instanceof BrainStoreAuthorizationError
193
+ || (error instanceof BrainIngestionError
194
+ && error.code === "access_denied")) {
195
+ return c.json({
196
+ ok: false,
197
+ error: "Brain access denied",
198
+ code: "forbidden",
199
+ }, 403);
200
+ }
201
+ if (error instanceof BrainIngestionError
202
+ && (error.code === "source_not_found"
203
+ || error.code === "version_not_found")) {
204
+ return c.json({
205
+ ok: false,
206
+ error: "Brain source not found",
207
+ code: "not_found",
208
+ }, 404);
209
+ }
210
+ if (error instanceof BrainStoreConflictError) {
211
+ return c.json({
212
+ ok: false,
213
+ error: "Brain source changed; retry the request",
214
+ code: "conflict",
215
+ }, 409);
216
+ }
217
+ if (error instanceof BrainContractError
218
+ || error instanceof BrainStoreValidationError
219
+ || (error instanceof BrainIngestionError
220
+ && error.code !== "ingestion_failed")
221
+ || (error
222
+ && typeof error === "object"
223
+ && "code" in error
224
+ && publicInputCodes.has(String(error.code)))) {
225
+ return c.json({
226
+ ok: false,
227
+ error: "Invalid Brain request",
228
+ code: "invalid_request",
229
+ }, 400);
230
+ }
231
+ throw error;
232
+ }
233
+ function parseList(value, allowed, label) {
234
+ if (!value)
235
+ return undefined;
236
+ const values = [...new Set(value.split(",").map((item) => item.trim()))];
237
+ if (values.some((item) => !allowed.includes(item))) {
238
+ throw new BrainStoreValidationError(`Unknown Brain ${label}`);
239
+ }
240
+ return values;
241
+ }
242
+ function explicitScope(input) {
243
+ if ((input.scopeKind === undefined) !== (input.scopeId === undefined)) {
244
+ throw new BrainStoreValidationError("scopeKind and scopeId must be provided together");
245
+ }
246
+ return input.scopeKind && input.scopeId
247
+ ? normalizeBrainScope({
248
+ kind: input.scopeKind,
249
+ subjectId: input.scopeId,
250
+ })
251
+ : undefined;
252
+ }
253
+ function inferredScope(context, mode, requested) {
254
+ if (requested)
255
+ return normalizeBrainScope(requested);
256
+ if (mode === "write" && context.defaultWriteScope) {
257
+ return normalizeBrainScope(context.defaultWriteScope);
258
+ }
259
+ const scopes = mode === "write" ? context.writeScopes : context.readScopes;
260
+ if (scopes.length !== 1) {
261
+ throw new BrainStoreValidationError(`An explicit Brain ${mode} scope is required`);
262
+ }
263
+ return normalizeBrainScope(scopes[0]);
264
+ }
265
+ export function brainRoutes(resolveDeps) {
266
+ const app = new OpenAPIHono();
267
+ app.openapi(listRoute, async (c) => {
268
+ try {
269
+ const { service, context } = await resolveDeps(c);
270
+ const query = c.req.valid("query");
271
+ const scope = explicitScope(query);
272
+ const statuses = parseList(query.status, BRAIN_SOURCE_STATUSES, "source status");
273
+ const types = parseList(query.type, BRAIN_SOURCE_TYPES, "source type");
274
+ const data = await service.listSources(context, {
275
+ ...(scope ? { scopes: [scope] } : {}),
276
+ ...(statuses ? { statuses } : {}),
277
+ ...(types ? { types } : {}),
278
+ ...(query.limit === undefined ? {} : { limit: query.limit }),
279
+ ...(query.cursor === undefined ? {} : { cursor: query.cursor }),
280
+ });
281
+ return c.json({ ok: true, data }, 200);
282
+ }
283
+ catch (error) {
284
+ return errorResponse(c, error);
285
+ }
286
+ });
287
+ app.openapi(createRouteDefinition, async (c) => {
288
+ try {
289
+ const { service, context } = await resolveDeps(c);
290
+ const body = c.req.valid("json");
291
+ const scope = inferredScope(context, "write", body.scope);
292
+ const data = await service.createSource(context, {
293
+ scope,
294
+ ...(body.id === undefined ? {} : { id: body.id }),
295
+ label: body.label,
296
+ trust: body.trust,
297
+ ...(body.metadata === undefined ? {} : { metadata: body.metadata }),
298
+ content: body.content,
299
+ });
300
+ return c.json({ ok: true, data }, 201);
301
+ }
302
+ catch (error) {
303
+ return errorResponse(c, error);
304
+ }
305
+ });
306
+ app.openapi(getRoute, async (c) => {
307
+ try {
308
+ const { service, context } = await resolveDeps(c);
309
+ const { sourceId } = c.req.valid("param");
310
+ const scope = inferredScope(context, "read", explicitScope(c.req.valid("query")));
311
+ const data = await service.getSource(context, { scope, sourceId });
312
+ if (!data) {
313
+ return c.json({
314
+ ok: false,
315
+ error: "Brain source not found",
316
+ code: "not_found",
317
+ }, 404);
318
+ }
319
+ return c.json({ ok: true, data }, 200);
320
+ }
321
+ catch (error) {
322
+ return errorResponse(c, error);
323
+ }
324
+ });
325
+ app.openapi(updateRoute, async (c) => {
326
+ try {
327
+ const { service, context } = await resolveDeps(c);
328
+ const { sourceId } = c.req.valid("param");
329
+ const scope = inferredScope(context, "write", explicitScope(c.req.valid("query")));
330
+ const body = c.req.valid("json");
331
+ const data = await service.updateSource(context, { scope, sourceId }, body);
332
+ return c.json({ ok: true, data }, 200);
333
+ }
334
+ catch (error) {
335
+ return errorResponse(c, error);
336
+ }
337
+ });
338
+ app.openapi(deleteRoute, async (c) => {
339
+ try {
340
+ const { service, context } = await resolveDeps(c);
341
+ const { sourceId } = c.req.valid("param");
342
+ const scope = inferredScope(context, "write", explicitScope(c.req.valid("query")));
343
+ await service.deleteSource(context, { scope, sourceId });
344
+ return c.json({
345
+ ok: true,
346
+ data: { deleted: true },
347
+ }, 200);
348
+ }
349
+ catch (error) {
350
+ return errorResponse(c, error);
351
+ }
352
+ });
353
+ app.openapi(reindexRoute, async (c) => {
354
+ try {
355
+ const { service, context } = await resolveDeps(c);
356
+ const { sourceId } = c.req.valid("param");
357
+ const scope = inferredScope(context, "write", explicitScope(c.req.valid("query")));
358
+ const body = c.req.valid("json");
359
+ const data = await service.reindexSource(context, { scope, sourceId }, body);
360
+ return c.json({ ok: true, data }, 202);
361
+ }
362
+ catch (error) {
363
+ return errorResponse(c, error);
364
+ }
365
+ });
366
+ app.openapi(searchRoute, async (c) => {
367
+ try {
368
+ const { service, context } = await resolveDeps(c);
369
+ const body = c.req.valid("json");
370
+ const data = await service.search(context, body);
371
+ return c.json({ ok: true, data }, 200);
372
+ }
373
+ catch (error) {
374
+ return errorResponse(c, error);
375
+ }
376
+ });
377
+ return app;
378
+ }
379
+ //# sourceMappingURL=brain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=brain.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.test.d.ts","sourceRoot":"","sources":["../../src/routes/brain.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,234 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { BrainIngestionError, BrainStoreAuthorizationError, BrainStoreConflictError, } from "@polpo-ai/core/brain";
3
+ import { brainRoutes } from "./brain.js";
4
+ const projectA = { kind: "project", subjectId: "project-a" };
5
+ const projectB = { kind: "project", subjectId: "project-b" };
6
+ const context = {
7
+ actor: {
8
+ actor: "user",
9
+ actorId: "user-1",
10
+ projectId: "project-a",
11
+ },
12
+ readScopes: [projectA],
13
+ writeScopes: [projectA],
14
+ defaultWriteScope: projectA,
15
+ };
16
+ const source = {
17
+ id: "source-1",
18
+ scope: projectA,
19
+ type: "paste",
20
+ label: "Runbook",
21
+ status: "indexed",
22
+ trust: "user_provided",
23
+ currentVersion: "v1",
24
+ metadata: {},
25
+ createdAt: "2026-07-28T12:00:00.000Z",
26
+ updatedAt: "2026-07-28T12:00:01.000Z",
27
+ };
28
+ function service() {
29
+ return {
30
+ listSources: vi.fn(async () => ({ sources: [source] })),
31
+ createSource: vi.fn(async () => source),
32
+ getSource: vi.fn(async () => source),
33
+ updateSource: vi.fn(async () => source),
34
+ deleteSource: vi.fn(async () => undefined),
35
+ reindexSource: vi.fn(async () => source),
36
+ listVersions: vi.fn(async () => []),
37
+ search: vi.fn(async () => []),
38
+ readSource: vi.fn(async () => {
39
+ throw new Error("not used");
40
+ }),
41
+ };
42
+ }
43
+ function app(overrides = {}) {
44
+ const runtime = overrides.service ?? service();
45
+ return {
46
+ runtime,
47
+ app: brainRoutes(async () => ({
48
+ service: runtime,
49
+ context: overrides.context ?? context,
50
+ })),
51
+ };
52
+ }
53
+ describe("brainRoutes", () => {
54
+ it("lists sources using host scopes and bounded query filters", async () => {
55
+ const runtime = app();
56
+ const response = await runtime.app.request("/sources?status=indexed&type=paste&limit=25");
57
+ expect(response.status).toBe(200);
58
+ expect(await response.json()).toMatchObject({
59
+ ok: true,
60
+ data: { sources: [{ id: "source-1" }] },
61
+ });
62
+ expect(runtime.runtime.listSources).toHaveBeenCalledWith(context, {
63
+ statuses: ["indexed"],
64
+ types: ["paste"],
65
+ limit: 25,
66
+ });
67
+ });
68
+ it("creates a source in the default write scope without accepting model context", async () => {
69
+ const runtime = app();
70
+ const response = await runtime.app.request("/sources", {
71
+ method: "POST",
72
+ headers: { "content-type": "application/json" },
73
+ body: JSON.stringify({
74
+ label: "Runbook",
75
+ trust: "user_provided",
76
+ content: { kind: "paste", text: "Support policy." },
77
+ }),
78
+ });
79
+ expect(response.status).toBe(201);
80
+ expect(runtime.runtime.createSource).toHaveBeenCalledWith(context, {
81
+ scope: projectA,
82
+ label: "Runbook",
83
+ trust: "user_provided",
84
+ content: { kind: "paste", text: "Support policy." },
85
+ });
86
+ });
87
+ it("requires an explicit scope when the host grants multiple write scopes", async () => {
88
+ const runtime = app({
89
+ context: {
90
+ ...context,
91
+ readScopes: [projectA, projectB],
92
+ writeScopes: [projectA, projectB],
93
+ defaultWriteScope: undefined,
94
+ },
95
+ });
96
+ const response = await runtime.app.request("/sources", {
97
+ method: "POST",
98
+ headers: { "content-type": "application/json" },
99
+ body: JSON.stringify({
100
+ label: "Runbook",
101
+ trust: "user_provided",
102
+ content: { kind: "paste", text: "Support policy." },
103
+ }),
104
+ });
105
+ expect(response.status).toBe(400);
106
+ expect(await response.json()).toMatchObject({
107
+ ok: false,
108
+ code: "invalid_request",
109
+ });
110
+ expect(runtime.runtime.createSource).not.toHaveBeenCalled();
111
+ });
112
+ it("gets, updates, reindexes, and deletes by an exact inferred scope", async () => {
113
+ const runtime = app();
114
+ expect((await runtime.app.request("/sources/source-1")).status).toBe(200);
115
+ expect((await runtime.app.request("/sources/source-1", {
116
+ method: "PATCH",
117
+ headers: { "content-type": "application/json" },
118
+ body: JSON.stringify({ label: "Updated" }),
119
+ })).status).toBe(200);
120
+ expect((await runtime.app.request("/sources/source-1/reindex", {
121
+ method: "POST",
122
+ headers: { "content-type": "application/json" },
123
+ body: JSON.stringify({
124
+ content: { kind: "url", url: "https://example.com/runbook" },
125
+ }),
126
+ })).status).toBe(202);
127
+ expect((await runtime.app.request("/sources/source-1", {
128
+ method: "DELETE",
129
+ })).status).toBe(200);
130
+ const ref = { scope: projectA, sourceId: "source-1" };
131
+ expect(runtime.runtime.getSource).toHaveBeenCalledWith(context, ref);
132
+ expect(runtime.runtime.updateSource).toHaveBeenCalledWith(context, ref, { label: "Updated" });
133
+ expect(runtime.runtime.reindexSource).toHaveBeenCalledWith(context, ref, { content: { kind: "url", url: "https://example.com/runbook" } });
134
+ expect(runtime.runtime.deleteSource).toHaveBeenCalledWith(context, ref);
135
+ });
136
+ it("searches only the scopes resolved by the host", async () => {
137
+ const runtime = app();
138
+ const response = await runtime.app.request("/search", {
139
+ method: "POST",
140
+ headers: { "content-type": "application/json" },
141
+ body: JSON.stringify({
142
+ query: "refund policy",
143
+ limit: 4,
144
+ tokenBudget: 900,
145
+ }),
146
+ });
147
+ expect(response.status).toBe(200);
148
+ expect(runtime.runtime.search).toHaveBeenCalledWith(context, {
149
+ query: "refund policy",
150
+ limit: 4,
151
+ tokenBudget: 900,
152
+ });
153
+ });
154
+ it("returns 404 without leaking whether an inaccessible source exists", async () => {
155
+ const runtime = service();
156
+ vi.mocked(runtime.getSource).mockResolvedValue(null);
157
+ const routes = app({ service: runtime });
158
+ const response = await routes.app.request("/sources/missing");
159
+ expect(response.status).toBe(404);
160
+ expect(await response.json()).toEqual({
161
+ ok: false,
162
+ error: "Brain source not found",
163
+ code: "not_found",
164
+ });
165
+ });
166
+ it.each([
167
+ [
168
+ new BrainStoreAuthorizationError("internal policy detail"),
169
+ 403,
170
+ "forbidden",
171
+ ],
172
+ [
173
+ new BrainIngestionError("internal source detail", "source_not_found"),
174
+ 404,
175
+ "not_found",
176
+ ],
177
+ [
178
+ new BrainStoreConflictError("internal version detail"),
179
+ 409,
180
+ "conflict",
181
+ ],
182
+ ])("maps domain failures without exposing internals", async (error, status, code) => {
183
+ const runtime = service();
184
+ vi.mocked(runtime.createSource).mockRejectedValue(error);
185
+ const routes = app({ service: runtime });
186
+ const response = await routes.app.request("/sources", {
187
+ method: "POST",
188
+ headers: { "content-type": "application/json" },
189
+ body: JSON.stringify({
190
+ label: "Runbook",
191
+ trust: "user_provided",
192
+ content: { kind: "paste", text: "Support policy." },
193
+ }),
194
+ });
195
+ const payload = await response.json();
196
+ expect(response.status).toBe(status);
197
+ expect(payload).toMatchObject({ ok: false, code });
198
+ expect(JSON.stringify(payload)).not.toContain("internal");
199
+ });
200
+ it("rejects malformed content, unknown fields, and invalid bounds", async () => {
201
+ const runtime = app();
202
+ const requests = [
203
+ runtime.app.request("/sources", {
204
+ method: "POST",
205
+ headers: { "content-type": "application/json" },
206
+ body: JSON.stringify({
207
+ label: "Runbook",
208
+ trust: "future",
209
+ content: { kind: "paste", text: "content" },
210
+ }),
211
+ }),
212
+ runtime.app.request("/sources", {
213
+ method: "POST",
214
+ headers: { "content-type": "application/json" },
215
+ body: JSON.stringify({
216
+ label: "Runbook",
217
+ trust: "trusted",
218
+ content: { kind: "paste", text: "content", secret: "no" },
219
+ }),
220
+ }),
221
+ runtime.app.request("/search", {
222
+ method: "POST",
223
+ headers: { "content-type": "application/json" },
224
+ body: JSON.stringify({ query: "x", limit: 0 }),
225
+ }),
226
+ ];
227
+ for (const response of await Promise.all(requests)) {
228
+ expect(response.status).toBe(400);
229
+ }
230
+ expect(runtime.runtime.createSource).not.toHaveBeenCalled();
231
+ expect(runtime.runtime.search).not.toHaveBeenCalled();
232
+ });
233
+ });
234
+ //# sourceMappingURL=brain.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain.test.js","sourceRoot":"","sources":["../../src/routes/brain.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,GAGxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAW,CAAC;AACtE,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAW,CAAC;AACtE,MAAM,OAAO,GAAwB;IACnC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,WAAW;KACvB;IACD,UAAU,EAAE,CAAC,QAAQ,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,CAAC;IACvB,iBAAiB,EAAE,QAAQ;CAC5B,CAAC;AAEF,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,eAAe;IACtB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,0BAA0B;IACrC,SAAS,EAAE,0BAA0B;CAC7B,CAAC;AAEX,SAAS,OAAO;IACd,OAAO;QACL,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvD,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;QACvC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;QACpC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;QACvC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;QAC1C,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;QACxC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7B,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,YAGT,EAAE;IACJ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC/C,OAAO;QACL,OAAO;QACP,GAAG,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC5B,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,OAAO;SACtC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CACxC,6CAA6C,CAC9C,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;SACxC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE;YAChE,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,KAAK,EAAE,CAAC,OAAO,CAAC;YAChB,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;aACpD,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE;YACjE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,OAAO,GAAG,GAAG,CAAC;YAClB,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAChC,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBACjC,iBAAiB,EAAE,SAAS;aAC7B;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;aACpD,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;YAC1C,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,iBAAiB;SACxB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QAEtB,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACrD,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE;aAC7D,CAAC;SACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACrD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtB,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,oBAAoB,CACvD,OAAO,EACP,GAAG,EACH,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,oBAAoB,CACxD,OAAO,EACP,GAAG,EACH,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE,EAAE,CACjE,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,GAAG;aACjB,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE;YAC3D,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAE9D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YACpC,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN;YACE,IAAI,4BAA4B,CAAC,wBAAwB,CAAC;YAC1D,GAAG;YACH,WAAW;SACZ;QACD;YACE,IAAI,mBAAmB,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;YACrE,GAAG;YACH,WAAW;SACZ;QACD;YACE,IAAI,uBAAuB,CAAC,yBAAyB,CAAC;YACtD,GAAG;YACH,UAAU;SACX;KACF,CAAC,CAAC,iDAAiD,EAAE,KAAK,EACzD,KAAK,EACL,MAAM,EACN,IAAI,EACJ,EAAE;QACF,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;aACpD,CAAC;SACH,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG;YACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC9B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC5C,CAAC;aACH,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC9B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;iBAC1D,CAAC;aACH,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC7B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC/C,CAAC;SACH,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/server",
3
- "version": "0.15.47",
3
+ "version": "0.15.48",
4
4
  "description": "Polpo API route factories — edge-compatible Hono routes for tasks, agents, missions, vault, and more",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -20,11 +20,11 @@
20
20
  "hono": ">=4.0.0",
21
21
  "nanoid": ">=5.0.0",
22
22
  "typescript": "^5.7.3",
23
- "@polpo-ai/connect": "0.15.47",
24
- "@polpo-ai/connect-server": "0.15.47",
25
- "@polpo-ai/core": "0.15.47",
26
- "@polpo-ai/llm": "0.15.47",
27
- "@polpo-ai/tools": "0.15.47"
23
+ "@polpo-ai/connect-server": "0.15.48",
24
+ "@polpo-ai/connect": "0.15.48",
25
+ "@polpo-ai/llm": "0.15.48",
26
+ "@polpo-ai/tools": "0.15.48",
27
+ "@polpo-ai/core": "0.15.48"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "ai": ">=6.0.0",