@ai-agent-forge/plugin-workspace-files 0.88.11 → 0.88.13
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 +1 -1
- package/agent-forge.json +1 -1
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +3 -0
- package/dist/capability.js.map +1 -1
- package/package.json +5 -4
- package/plugin.json +1 -1
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ their profile machinery.
|
|
|
16
16
|
agent-forge plugin install ./plugins/workspace-files
|
|
17
17
|
|
|
18
18
|
# from npm
|
|
19
|
-
agent-forge plugin install @agent-forge/plugin-workspace-files
|
|
19
|
+
agent-forge plugin install @ai-agent-forge/plugin-workspace-files
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
The package ships two manifests: `agent-forge.json` (ecosystem manifest for the deterministic plugin resolver) and
|
package/agent-forge.json
CHANGED
package/dist/capability.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAY3E,OAAO,KAAK,EACX,uBAAuB,EAIvB,MAAM,YAAY,CAAC;AAmOpB,iFAAiF;AACjF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CAiGrH","sourcesContent":["import type { CapabilityPluginSyncFactory } from \"@agent-forge/plugin-sdk\";\nimport { Type } from \"typebox\";\nimport {\n\tprojectFind,\n\tprojectList,\n\tprojectRead,\n\tsanitizeWorkspaceFilesTextV1,\n\tWORKSPACE_FILES_MAX_MATCHES_V1,\n\tWORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1,\n\tWORKSPACE_FILES_MAX_QUERY_CHARS_V1,\n\tWORKSPACE_FILES_MAX_READ_BYTES_V1,\n} from \"./node-adapter.ts\";\nimport type {\n\tWorkspaceFilesAdapterV1,\n\tWorkspaceFilesFindResultV1,\n\tWorkspaceFilesListResultV1,\n\tWorkspaceFilesReadResultV1,\n} from \"./types.ts\";\n\nconst refSchema = Type.String({ minLength: 1, maxLength: 256, pattern: \"^[A-Za-z0-9][A-Za-z0-9._:-]*$\" });\nconst listSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tdirectoryRef: Type.Optional(refSchema),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: 256 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst readSchema = Type.Object(\n\t{\n\t\tfileRef: refSchema,\n\t\tmaxBytes: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_READ_BYTES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst findSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tquery: Type.String({ minLength: 1, maxLength: WORKSPACE_FILES_MAX_QUERY_CHARS_V1 }),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_MATCHES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\n\ntype Result = WorkspaceFilesListResultV1 | WorkspaceFilesReadResultV1 | WorkspaceFilesFindResultV1;\n\nfunction input(\n\tfirst: unknown,\n\tsecond: unknown,\n): { readonly request: Record<string, unknown>; readonly operationId: string } {\n\t// Shape-based dual-convention read (aligned with subagent-delegate): the\n\t// runtime invoke face passes the input object first and the host\n\t// CapabilityToolContext second; the agent tool face passes the tool call\n\t// id (a string) first and the params object second.\n\tconst value = first !== null && typeof first === \"object\" && !Array.isArray(first) ? first : second;\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value))\n\t\tthrow new Error(\"workspace input must be an object\");\n\tconst operationId =\n\t\ttypeof first === \"string\" && first.trim() !== \"\" && first.length <= WORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1\n\t\t\t? first\n\t\t\t: \"profile-runtime-tool-call\";\n\tconst outer = value as Record<string, unknown>;\n\tif (outer.request === null || typeof outer.request !== \"object\" || Array.isArray(outer.request))\n\t\tthrow new Error(\"workspace request must be an object\");\n\treturn { request: outer.request as Record<string, unknown>, operationId };\n}\n\nfunction signalFrom(value: unknown): AbortSignal | undefined {\n\treturn value instanceof AbortSignal ? value : undefined;\n}\n\nconst NON_SUCCESS_STATUSES = new Set([\"failed\", \"cancelled\", \"needs_user\", \"unsupported\"]);\n\nfunction nonSuccessError(value: unknown): WorkspaceFilesListResultV1[\"error\"] | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst error = value as Record<string, unknown>;\n\tif (\n\t\terror.version !== 1 ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!/^[a-z][a-z0-9_]{0,127}$/u.test(error.code) ||\n\t\ttypeof error.message !== \"string\" ||\n\t\terror.message.trim() === \"\" ||\n\t\terror.message.length > 512\n\t)\n\t\treturn undefined;\n\treturn { version: 1, code: error.code, message: sanitizeWorkspaceFilesTextV1(error.message, 512) };\n}\n\nfunction projectNonSuccess(value: unknown, operationId: string, kind: \"list\" | \"read\" | \"find\"): Result | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst result = value as Record<string, unknown>;\n\tif (result.version !== 1 || result.operationId !== operationId || typeof result.status !== \"string\")\n\t\treturn undefined;\n\tif (!NON_SUCCESS_STATUSES.has(result.status)) return undefined;\n\tconst error = nonSuccessError(result.error);\n\tif (error === undefined) return undefined;\n\tif (kind === \"list\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"entries\", \"entriesTruncated\", \"error\"].includes(key),\n\t\t\t) ||\n\t\t\t!Array.isArray(result.entries) ||\n\t\t\tresult.entries.length !== 0 ||\n\t\t\tresult.entriesTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesListResultV1[\"status\"],\n\t\t\tentries: [],\n\t\t\tentriesTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (kind === \"read\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) =>\n\t\t\t\t\t![\n\t\t\t\t\t\t\"version\",\n\t\t\t\t\t\t\"operationId\",\n\t\t\t\t\t\t\"status\",\n\t\t\t\t\t\t\"contentPreview\",\n\t\t\t\t\t\t\"contentBytes\",\n\t\t\t\t\t\t\"contentTruncated\",\n\t\t\t\t\t\t\"artifactRef\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t].includes(key),\n\t\t\t) ||\n\t\t\tresult.contentPreview !== \"\" ||\n\t\t\tresult.contentBytes !== 0 ||\n\t\t\tresult.contentTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesReadResultV1[\"status\"],\n\t\t\tcontentPreview: \"\",\n\t\t\tcontentBytes: 0,\n\t\t\tcontentTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (\n\t\tObject.keys(result).some(\n\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"matches\", \"matchesTruncated\", \"error\"].includes(key),\n\t\t) ||\n\t\t!Array.isArray(result.matches) ||\n\t\tresult.matches.length !== 0 ||\n\t\tresult.matchesTruncated !== false\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus: result.status as WorkspaceFilesFindResultV1[\"status\"],\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror,\n\t};\n}\n\nfunction projectListResult(value: unknown, operationId: string): WorkspaceFilesListResultV1 | undefined {\n\treturn (\n\t\tprojectList(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"list\") as WorkspaceFilesListResultV1 | undefined)\n\t);\n}\n\nfunction projectReadResult(value: unknown, operationId: string): WorkspaceFilesReadResultV1 | undefined {\n\treturn (\n\t\tprojectRead(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"read\") as WorkspaceFilesReadResultV1 | undefined)\n\t);\n}\n\nfunction projectFindResult(value: unknown, operationId: string): WorkspaceFilesFindResultV1 | undefined {\n\treturn (\n\t\tprojectFind(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"find\") as WorkspaceFilesFindResultV1 | undefined)\n\t);\n}\n\nfunction errorFor(status: \"failed\" | \"cancelled\") {\n\tconst error = {\n\t\tversion: 1 as const,\n\t\tcode: status === \"cancelled\" ? \"cancelled\" : \"adapter_failed\",\n\t\tmessage: status === \"cancelled\" ? \"Workspace operation was cancelled\" : \"Workspace file adapter failed\",\n\t};\n\treturn error;\n}\n\nfunction listFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesListResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tentries: [],\n\t\tentriesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction readFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesReadResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tcontentPreview: \"\",\n\t\tcontentBytes: 0,\n\t\tcontentTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction findFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesFindResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nasync function execute<T extends Result>(\n\toperationId: string,\n\tsignal: AbortSignal | undefined,\n\trun: () => Promise<T>,\n\tproject: (value: unknown, operationId: string) => T | undefined,\n\tfallbackResult: (status: \"failed\" | \"cancelled\") => T,\n): Promise<T> {\n\tif (signal?.aborted) return fallbackResult(\"cancelled\");\n\ttry {\n\t\tconst result = await run();\n\t\treturn project(result, operationId) ?? fallbackResult(\"failed\");\n\t} catch {\n\t\treturn fallbackResult(\"failed\");\n\t}\n}\n\n/** Registers bounded workspace reads using only opaque host-owned references. */\nexport function createWorkspaceFilesCapabilityFactoryV1(runtime: WorkspaceFilesAdapterV1): CapabilityPluginSyncFactory {\n\treturn (api) => {\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_list\",\n\t\t\tlabel: \"List workspace files\",\n\t\t\tdescription: \"List bounded workspace entries through host-owned opaque references\",\n\t\t\tparameters: Type.Object({ request: listSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.list(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\t...(request.directoryRef === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { directoryRef: request.directoryRef as string }),\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectListResult(value, id),\n\t\t\t\t\t\t(status) => listFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn listFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_read\",\n\t\t\tlabel: \"Read workspace file\",\n\t\t\tdescription: \"Read a bounded preview from a host-owned workspace file reference\",\n\t\t\tparameters: Type.Object({ request: readSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.read(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tfileRef: request.fileRef as string,\n\t\t\t\t\t\t\t\t\t...(request.maxBytes === undefined ? {} : { maxBytes: request.maxBytes as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectReadResult(value, id),\n\t\t\t\t\t\t(status) => readFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn readFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_find\",\n\t\t\tlabel: \"Find in workspace\",\n\t\t\tdescription: \"Return bounded workspace matches without injecting the full file contents\",\n\t\t\tparameters: Type.Object({ request: findSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.find(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\tquery: request.query as string,\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectFindResult(value, id),\n\t\t\t\t\t\t(status) => findFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn findFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAY3E,OAAO,KAAK,EACX,uBAAuB,EAIvB,MAAM,YAAY,CAAC;AAmOpB,iFAAiF;AACjF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,uBAAuB,GAAG,2BAA2B,CAoGrH","sourcesContent":["import type { CapabilityPluginSyncFactory } from \"@agent-forge/plugin-sdk\";\nimport { Type } from \"typebox\";\nimport {\n\tprojectFind,\n\tprojectList,\n\tprojectRead,\n\tsanitizeWorkspaceFilesTextV1,\n\tWORKSPACE_FILES_MAX_MATCHES_V1,\n\tWORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1,\n\tWORKSPACE_FILES_MAX_QUERY_CHARS_V1,\n\tWORKSPACE_FILES_MAX_READ_BYTES_V1,\n} from \"./node-adapter.ts\";\nimport type {\n\tWorkspaceFilesAdapterV1,\n\tWorkspaceFilesFindResultV1,\n\tWorkspaceFilesListResultV1,\n\tWorkspaceFilesReadResultV1,\n} from \"./types.ts\";\n\nconst refSchema = Type.String({ minLength: 1, maxLength: 256, pattern: \"^[A-Za-z0-9][A-Za-z0-9._:-]*$\" });\nconst listSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tdirectoryRef: Type.Optional(refSchema),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: 256 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst readSchema = Type.Object(\n\t{\n\t\tfileRef: refSchema,\n\t\tmaxBytes: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_READ_BYTES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst findSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tquery: Type.String({ minLength: 1, maxLength: WORKSPACE_FILES_MAX_QUERY_CHARS_V1 }),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_MATCHES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\n\ntype Result = WorkspaceFilesListResultV1 | WorkspaceFilesReadResultV1 | WorkspaceFilesFindResultV1;\n\nfunction input(\n\tfirst: unknown,\n\tsecond: unknown,\n): { readonly request: Record<string, unknown>; readonly operationId: string } {\n\t// Shape-based dual-convention read (aligned with subagent-delegate): the\n\t// runtime invoke face passes the input object first and the host\n\t// CapabilityToolContext second; the agent tool face passes the tool call\n\t// id (a string) first and the params object second.\n\tconst value = first !== null && typeof first === \"object\" && !Array.isArray(first) ? first : second;\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value))\n\t\tthrow new Error(\"workspace input must be an object\");\n\tconst operationId =\n\t\ttypeof first === \"string\" && first.trim() !== \"\" && first.length <= WORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1\n\t\t\t? first\n\t\t\t: \"profile-runtime-tool-call\";\n\tconst outer = value as Record<string, unknown>;\n\tif (outer.request === null || typeof outer.request !== \"object\" || Array.isArray(outer.request))\n\t\tthrow new Error(\"workspace request must be an object\");\n\treturn { request: outer.request as Record<string, unknown>, operationId };\n}\n\nfunction signalFrom(value: unknown): AbortSignal | undefined {\n\treturn value instanceof AbortSignal ? value : undefined;\n}\n\nconst NON_SUCCESS_STATUSES = new Set([\"failed\", \"cancelled\", \"needs_user\", \"unsupported\"]);\n\nfunction nonSuccessError(value: unknown): WorkspaceFilesListResultV1[\"error\"] | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst error = value as Record<string, unknown>;\n\tif (\n\t\terror.version !== 1 ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!/^[a-z][a-z0-9_]{0,127}$/u.test(error.code) ||\n\t\ttypeof error.message !== \"string\" ||\n\t\terror.message.trim() === \"\" ||\n\t\terror.message.length > 512\n\t)\n\t\treturn undefined;\n\treturn { version: 1, code: error.code, message: sanitizeWorkspaceFilesTextV1(error.message, 512) };\n}\n\nfunction projectNonSuccess(value: unknown, operationId: string, kind: \"list\" | \"read\" | \"find\"): Result | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst result = value as Record<string, unknown>;\n\tif (result.version !== 1 || result.operationId !== operationId || typeof result.status !== \"string\")\n\t\treturn undefined;\n\tif (!NON_SUCCESS_STATUSES.has(result.status)) return undefined;\n\tconst error = nonSuccessError(result.error);\n\tif (error === undefined) return undefined;\n\tif (kind === \"list\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"entries\", \"entriesTruncated\", \"error\"].includes(key),\n\t\t\t) ||\n\t\t\t!Array.isArray(result.entries) ||\n\t\t\tresult.entries.length !== 0 ||\n\t\t\tresult.entriesTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesListResultV1[\"status\"],\n\t\t\tentries: [],\n\t\t\tentriesTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (kind === \"read\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) =>\n\t\t\t\t\t![\n\t\t\t\t\t\t\"version\",\n\t\t\t\t\t\t\"operationId\",\n\t\t\t\t\t\t\"status\",\n\t\t\t\t\t\t\"contentPreview\",\n\t\t\t\t\t\t\"contentBytes\",\n\t\t\t\t\t\t\"contentTruncated\",\n\t\t\t\t\t\t\"artifactRef\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t].includes(key),\n\t\t\t) ||\n\t\t\tresult.contentPreview !== \"\" ||\n\t\t\tresult.contentBytes !== 0 ||\n\t\t\tresult.contentTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesReadResultV1[\"status\"],\n\t\t\tcontentPreview: \"\",\n\t\t\tcontentBytes: 0,\n\t\t\tcontentTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (\n\t\tObject.keys(result).some(\n\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"matches\", \"matchesTruncated\", \"error\"].includes(key),\n\t\t) ||\n\t\t!Array.isArray(result.matches) ||\n\t\tresult.matches.length !== 0 ||\n\t\tresult.matchesTruncated !== false\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus: result.status as WorkspaceFilesFindResultV1[\"status\"],\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror,\n\t};\n}\n\nfunction projectListResult(value: unknown, operationId: string): WorkspaceFilesListResultV1 | undefined {\n\treturn (\n\t\tprojectList(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"list\") as WorkspaceFilesListResultV1 | undefined)\n\t);\n}\n\nfunction projectReadResult(value: unknown, operationId: string): WorkspaceFilesReadResultV1 | undefined {\n\treturn (\n\t\tprojectRead(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"read\") as WorkspaceFilesReadResultV1 | undefined)\n\t);\n}\n\nfunction projectFindResult(value: unknown, operationId: string): WorkspaceFilesFindResultV1 | undefined {\n\treturn (\n\t\tprojectFind(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"find\") as WorkspaceFilesFindResultV1 | undefined)\n\t);\n}\n\nfunction errorFor(status: \"failed\" | \"cancelled\") {\n\tconst error = {\n\t\tversion: 1 as const,\n\t\tcode: status === \"cancelled\" ? \"cancelled\" : \"adapter_failed\",\n\t\tmessage: status === \"cancelled\" ? \"Workspace operation was cancelled\" : \"Workspace file adapter failed\",\n\t};\n\treturn error;\n}\n\nfunction listFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesListResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tentries: [],\n\t\tentriesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction readFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesReadResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tcontentPreview: \"\",\n\t\tcontentBytes: 0,\n\t\tcontentTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction findFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesFindResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nasync function execute<T extends Result>(\n\toperationId: string,\n\tsignal: AbortSignal | undefined,\n\trun: () => Promise<T>,\n\tproject: (value: unknown, operationId: string) => T | undefined,\n\tfallbackResult: (status: \"failed\" | \"cancelled\") => T,\n): Promise<T> {\n\tif (signal?.aborted) return fallbackResult(\"cancelled\");\n\ttry {\n\t\tconst result = await run();\n\t\treturn project(result, operationId) ?? fallbackResult(\"failed\");\n\t} catch {\n\t\treturn fallbackResult(\"failed\");\n\t}\n}\n\n/** Registers bounded workspace reads using only opaque host-owned references. */\nexport function createWorkspaceFilesCapabilityFactoryV1(runtime: WorkspaceFilesAdapterV1): CapabilityPluginSyncFactory {\n\treturn (api) => {\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_list\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"List workspace files\",\n\t\t\tdescription: \"List bounded workspace entries through host-owned opaque references\",\n\t\t\tparameters: Type.Object({ request: listSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.list(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\t...(request.directoryRef === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { directoryRef: request.directoryRef as string }),\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectListResult(value, id),\n\t\t\t\t\t\t(status) => listFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn listFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_read\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"Read workspace file\",\n\t\t\tdescription: \"Read a bounded preview from a host-owned workspace file reference\",\n\t\t\tparameters: Type.Object({ request: readSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.read(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tfileRef: request.fileRef as string,\n\t\t\t\t\t\t\t\t\t...(request.maxBytes === undefined ? {} : { maxBytes: request.maxBytes as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectReadResult(value, id),\n\t\t\t\t\t\t(status) => readFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn readFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_find\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"Find in workspace\",\n\t\t\tdescription: \"Return bounded workspace matches without injecting the full file contents\",\n\t\t\tparameters: Type.Object({ request: findSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.find(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\tquery: request.query as string,\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectFindResult(value, id),\n\t\t\t\t\t\t(status) => findFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn findFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t};\n}\n"]}
|
package/dist/capability.js
CHANGED
|
@@ -180,6 +180,7 @@ export function createWorkspaceFilesCapabilityFactoryV1(runtime) {
|
|
|
180
180
|
return (api) => {
|
|
181
181
|
api.registerTool({
|
|
182
182
|
name: "workspace_list",
|
|
183
|
+
readonlySafe: true,
|
|
183
184
|
label: "List workspace files",
|
|
184
185
|
description: "List bounded workspace entries through host-owned opaque references",
|
|
185
186
|
parameters: Type.Object({ request: listSchema }, { additionalProperties: false }),
|
|
@@ -204,6 +205,7 @@ export function createWorkspaceFilesCapabilityFactoryV1(runtime) {
|
|
|
204
205
|
});
|
|
205
206
|
api.registerTool({
|
|
206
207
|
name: "workspace_read",
|
|
208
|
+
readonlySafe: true,
|
|
207
209
|
label: "Read workspace file",
|
|
208
210
|
description: "Read a bounded preview from a host-owned workspace file reference",
|
|
209
211
|
parameters: Type.Object({ request: readSchema }, { additionalProperties: false }),
|
|
@@ -225,6 +227,7 @@ export function createWorkspaceFilesCapabilityFactoryV1(runtime) {
|
|
|
225
227
|
});
|
|
226
228
|
api.registerTool({
|
|
227
229
|
name: "workspace_find",
|
|
230
|
+
readonlySafe: true,
|
|
228
231
|
label: "Find in workspace",
|
|
229
232
|
description: "Return bounded workspace matches without injecting the full file contents",
|
|
230
233
|
parameters: Type.Object({ request: findSchema }, { additionalProperties: false }),
|
package/dist/capability.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CapabilityPluginSyncFactory } from \"@agent-forge/plugin-sdk\";\nimport { Type } from \"typebox\";\nimport {\n\tprojectFind,\n\tprojectList,\n\tprojectRead,\n\tsanitizeWorkspaceFilesTextV1,\n\tWORKSPACE_FILES_MAX_MATCHES_V1,\n\tWORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1,\n\tWORKSPACE_FILES_MAX_QUERY_CHARS_V1,\n\tWORKSPACE_FILES_MAX_READ_BYTES_V1,\n} from \"./node-adapter.ts\";\nimport type {\n\tWorkspaceFilesAdapterV1,\n\tWorkspaceFilesFindResultV1,\n\tWorkspaceFilesListResultV1,\n\tWorkspaceFilesReadResultV1,\n} from \"./types.ts\";\n\nconst refSchema = Type.String({ minLength: 1, maxLength: 256, pattern: \"^[A-Za-z0-9][A-Za-z0-9._:-]*$\" });\nconst listSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tdirectoryRef: Type.Optional(refSchema),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: 256 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst readSchema = Type.Object(\n\t{\n\t\tfileRef: refSchema,\n\t\tmaxBytes: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_READ_BYTES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst findSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tquery: Type.String({ minLength: 1, maxLength: WORKSPACE_FILES_MAX_QUERY_CHARS_V1 }),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_MATCHES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\n\ntype Result = WorkspaceFilesListResultV1 | WorkspaceFilesReadResultV1 | WorkspaceFilesFindResultV1;\n\nfunction input(\n\tfirst: unknown,\n\tsecond: unknown,\n): { readonly request: Record<string, unknown>; readonly operationId: string } {\n\t// Shape-based dual-convention read (aligned with subagent-delegate): the\n\t// runtime invoke face passes the input object first and the host\n\t// CapabilityToolContext second; the agent tool face passes the tool call\n\t// id (a string) first and the params object second.\n\tconst value = first !== null && typeof first === \"object\" && !Array.isArray(first) ? first : second;\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value))\n\t\tthrow new Error(\"workspace input must be an object\");\n\tconst operationId =\n\t\ttypeof first === \"string\" && first.trim() !== \"\" && first.length <= WORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1\n\t\t\t? first\n\t\t\t: \"profile-runtime-tool-call\";\n\tconst outer = value as Record<string, unknown>;\n\tif (outer.request === null || typeof outer.request !== \"object\" || Array.isArray(outer.request))\n\t\tthrow new Error(\"workspace request must be an object\");\n\treturn { request: outer.request as Record<string, unknown>, operationId };\n}\n\nfunction signalFrom(value: unknown): AbortSignal | undefined {\n\treturn value instanceof AbortSignal ? value : undefined;\n}\n\nconst NON_SUCCESS_STATUSES = new Set([\"failed\", \"cancelled\", \"needs_user\", \"unsupported\"]);\n\nfunction nonSuccessError(value: unknown): WorkspaceFilesListResultV1[\"error\"] | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst error = value as Record<string, unknown>;\n\tif (\n\t\terror.version !== 1 ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!/^[a-z][a-z0-9_]{0,127}$/u.test(error.code) ||\n\t\ttypeof error.message !== \"string\" ||\n\t\terror.message.trim() === \"\" ||\n\t\terror.message.length > 512\n\t)\n\t\treturn undefined;\n\treturn { version: 1, code: error.code, message: sanitizeWorkspaceFilesTextV1(error.message, 512) };\n}\n\nfunction projectNonSuccess(value: unknown, operationId: string, kind: \"list\" | \"read\" | \"find\"): Result | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst result = value as Record<string, unknown>;\n\tif (result.version !== 1 || result.operationId !== operationId || typeof result.status !== \"string\")\n\t\treturn undefined;\n\tif (!NON_SUCCESS_STATUSES.has(result.status)) return undefined;\n\tconst error = nonSuccessError(result.error);\n\tif (error === undefined) return undefined;\n\tif (kind === \"list\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"entries\", \"entriesTruncated\", \"error\"].includes(key),\n\t\t\t) ||\n\t\t\t!Array.isArray(result.entries) ||\n\t\t\tresult.entries.length !== 0 ||\n\t\t\tresult.entriesTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesListResultV1[\"status\"],\n\t\t\tentries: [],\n\t\t\tentriesTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (kind === \"read\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) =>\n\t\t\t\t\t![\n\t\t\t\t\t\t\"version\",\n\t\t\t\t\t\t\"operationId\",\n\t\t\t\t\t\t\"status\",\n\t\t\t\t\t\t\"contentPreview\",\n\t\t\t\t\t\t\"contentBytes\",\n\t\t\t\t\t\t\"contentTruncated\",\n\t\t\t\t\t\t\"artifactRef\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t].includes(key),\n\t\t\t) ||\n\t\t\tresult.contentPreview !== \"\" ||\n\t\t\tresult.contentBytes !== 0 ||\n\t\t\tresult.contentTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesReadResultV1[\"status\"],\n\t\t\tcontentPreview: \"\",\n\t\t\tcontentBytes: 0,\n\t\t\tcontentTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (\n\t\tObject.keys(result).some(\n\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"matches\", \"matchesTruncated\", \"error\"].includes(key),\n\t\t) ||\n\t\t!Array.isArray(result.matches) ||\n\t\tresult.matches.length !== 0 ||\n\t\tresult.matchesTruncated !== false\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus: result.status as WorkspaceFilesFindResultV1[\"status\"],\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror,\n\t};\n}\n\nfunction projectListResult(value: unknown, operationId: string): WorkspaceFilesListResultV1 | undefined {\n\treturn (\n\t\tprojectList(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"list\") as WorkspaceFilesListResultV1 | undefined)\n\t);\n}\n\nfunction projectReadResult(value: unknown, operationId: string): WorkspaceFilesReadResultV1 | undefined {\n\treturn (\n\t\tprojectRead(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"read\") as WorkspaceFilesReadResultV1 | undefined)\n\t);\n}\n\nfunction projectFindResult(value: unknown, operationId: string): WorkspaceFilesFindResultV1 | undefined {\n\treturn (\n\t\tprojectFind(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"find\") as WorkspaceFilesFindResultV1 | undefined)\n\t);\n}\n\nfunction errorFor(status: \"failed\" | \"cancelled\") {\n\tconst error = {\n\t\tversion: 1 as const,\n\t\tcode: status === \"cancelled\" ? \"cancelled\" : \"adapter_failed\",\n\t\tmessage: status === \"cancelled\" ? \"Workspace operation was cancelled\" : \"Workspace file adapter failed\",\n\t};\n\treturn error;\n}\n\nfunction listFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesListResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tentries: [],\n\t\tentriesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction readFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesReadResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tcontentPreview: \"\",\n\t\tcontentBytes: 0,\n\t\tcontentTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction findFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesFindResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nasync function execute<T extends Result>(\n\toperationId: string,\n\tsignal: AbortSignal | undefined,\n\trun: () => Promise<T>,\n\tproject: (value: unknown, operationId: string) => T | undefined,\n\tfallbackResult: (status: \"failed\" | \"cancelled\") => T,\n): Promise<T> {\n\tif (signal?.aborted) return fallbackResult(\"cancelled\");\n\ttry {\n\t\tconst result = await run();\n\t\treturn project(result, operationId) ?? fallbackResult(\"failed\");\n\t} catch {\n\t\treturn fallbackResult(\"failed\");\n\t}\n}\n\n/** Registers bounded workspace reads using only opaque host-owned references. */\nexport function createWorkspaceFilesCapabilityFactoryV1(runtime: WorkspaceFilesAdapterV1): CapabilityPluginSyncFactory {\n\treturn (api) => {\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_list\",\n\t\t\tlabel: \"List workspace files\",\n\t\t\tdescription: \"List bounded workspace entries through host-owned opaque references\",\n\t\t\tparameters: Type.Object({ request: listSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.list(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\t...(request.directoryRef === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { directoryRef: request.directoryRef as string }),\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectListResult(value, id),\n\t\t\t\t\t\t(status) => listFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn listFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_read\",\n\t\t\tlabel: \"Read workspace file\",\n\t\t\tdescription: \"Read a bounded preview from a host-owned workspace file reference\",\n\t\t\tparameters: Type.Object({ request: readSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.read(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tfileRef: request.fileRef as string,\n\t\t\t\t\t\t\t\t\t...(request.maxBytes === undefined ? {} : { maxBytes: request.maxBytes as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectReadResult(value, id),\n\t\t\t\t\t\t(status) => readFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn readFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_find\",\n\t\t\tlabel: \"Find in workspace\",\n\t\t\tdescription: \"Return bounded workspace matches without injecting the full file contents\",\n\t\t\tparameters: Type.Object({ request: findSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.find(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\tquery: request.query as string,\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectFindResult(value, id),\n\t\t\t\t\t\t(status) => findFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn findFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CapabilityPluginSyncFactory } from \"@agent-forge/plugin-sdk\";\nimport { Type } from \"typebox\";\nimport {\n\tprojectFind,\n\tprojectList,\n\tprojectRead,\n\tsanitizeWorkspaceFilesTextV1,\n\tWORKSPACE_FILES_MAX_MATCHES_V1,\n\tWORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1,\n\tWORKSPACE_FILES_MAX_QUERY_CHARS_V1,\n\tWORKSPACE_FILES_MAX_READ_BYTES_V1,\n} from \"./node-adapter.ts\";\nimport type {\n\tWorkspaceFilesAdapterV1,\n\tWorkspaceFilesFindResultV1,\n\tWorkspaceFilesListResultV1,\n\tWorkspaceFilesReadResultV1,\n} from \"./types.ts\";\n\nconst refSchema = Type.String({ minLength: 1, maxLength: 256, pattern: \"^[A-Za-z0-9][A-Za-z0-9._:-]*$\" });\nconst listSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tdirectoryRef: Type.Optional(refSchema),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: 256 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst readSchema = Type.Object(\n\t{\n\t\tfileRef: refSchema,\n\t\tmaxBytes: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_READ_BYTES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\nconst findSchema = Type.Object(\n\t{\n\t\tworkspaceRef: refSchema,\n\t\tquery: Type.String({ minLength: 1, maxLength: WORKSPACE_FILES_MAX_QUERY_CHARS_V1 }),\n\t\tlimit: Type.Optional(Type.Integer({ minimum: 1, maximum: WORKSPACE_FILES_MAX_MATCHES_V1 })),\n\t},\n\t{ additionalProperties: false },\n);\n\ntype Result = WorkspaceFilesListResultV1 | WorkspaceFilesReadResultV1 | WorkspaceFilesFindResultV1;\n\nfunction input(\n\tfirst: unknown,\n\tsecond: unknown,\n): { readonly request: Record<string, unknown>; readonly operationId: string } {\n\t// Shape-based dual-convention read (aligned with subagent-delegate): the\n\t// runtime invoke face passes the input object first and the host\n\t// CapabilityToolContext second; the agent tool face passes the tool call\n\t// id (a string) first and the params object second.\n\tconst value = first !== null && typeof first === \"object\" && !Array.isArray(first) ? first : second;\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value))\n\t\tthrow new Error(\"workspace input must be an object\");\n\tconst operationId =\n\t\ttypeof first === \"string\" && first.trim() !== \"\" && first.length <= WORKSPACE_FILES_MAX_OPERATION_ID_CHARS_V1\n\t\t\t? first\n\t\t\t: \"profile-runtime-tool-call\";\n\tconst outer = value as Record<string, unknown>;\n\tif (outer.request === null || typeof outer.request !== \"object\" || Array.isArray(outer.request))\n\t\tthrow new Error(\"workspace request must be an object\");\n\treturn { request: outer.request as Record<string, unknown>, operationId };\n}\n\nfunction signalFrom(value: unknown): AbortSignal | undefined {\n\treturn value instanceof AbortSignal ? value : undefined;\n}\n\nconst NON_SUCCESS_STATUSES = new Set([\"failed\", \"cancelled\", \"needs_user\", \"unsupported\"]);\n\nfunction nonSuccessError(value: unknown): WorkspaceFilesListResultV1[\"error\"] | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst error = value as Record<string, unknown>;\n\tif (\n\t\terror.version !== 1 ||\n\t\ttypeof error.code !== \"string\" ||\n\t\t!/^[a-z][a-z0-9_]{0,127}$/u.test(error.code) ||\n\t\ttypeof error.message !== \"string\" ||\n\t\terror.message.trim() === \"\" ||\n\t\terror.message.length > 512\n\t)\n\t\treturn undefined;\n\treturn { version: 1, code: error.code, message: sanitizeWorkspaceFilesTextV1(error.message, 512) };\n}\n\nfunction projectNonSuccess(value: unknown, operationId: string, kind: \"list\" | \"read\" | \"find\"): Result | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n\tconst result = value as Record<string, unknown>;\n\tif (result.version !== 1 || result.operationId !== operationId || typeof result.status !== \"string\")\n\t\treturn undefined;\n\tif (!NON_SUCCESS_STATUSES.has(result.status)) return undefined;\n\tconst error = nonSuccessError(result.error);\n\tif (error === undefined) return undefined;\n\tif (kind === \"list\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"entries\", \"entriesTruncated\", \"error\"].includes(key),\n\t\t\t) ||\n\t\t\t!Array.isArray(result.entries) ||\n\t\t\tresult.entries.length !== 0 ||\n\t\t\tresult.entriesTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesListResultV1[\"status\"],\n\t\t\tentries: [],\n\t\t\tentriesTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (kind === \"read\") {\n\t\tif (\n\t\t\tObject.keys(result).some(\n\t\t\t\t(key) =>\n\t\t\t\t\t![\n\t\t\t\t\t\t\"version\",\n\t\t\t\t\t\t\"operationId\",\n\t\t\t\t\t\t\"status\",\n\t\t\t\t\t\t\"contentPreview\",\n\t\t\t\t\t\t\"contentBytes\",\n\t\t\t\t\t\t\"contentTruncated\",\n\t\t\t\t\t\t\"artifactRef\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t].includes(key),\n\t\t\t) ||\n\t\t\tresult.contentPreview !== \"\" ||\n\t\t\tresult.contentBytes !== 0 ||\n\t\t\tresult.contentTruncated !== false\n\t\t)\n\t\t\treturn undefined;\n\t\treturn {\n\t\t\tversion: 1,\n\t\t\toperationId,\n\t\t\tstatus: result.status as WorkspaceFilesReadResultV1[\"status\"],\n\t\t\tcontentPreview: \"\",\n\t\t\tcontentBytes: 0,\n\t\t\tcontentTruncated: false,\n\t\t\terror,\n\t\t};\n\t}\n\tif (\n\t\tObject.keys(result).some(\n\t\t\t(key) => ![\"version\", \"operationId\", \"status\", \"matches\", \"matchesTruncated\", \"error\"].includes(key),\n\t\t) ||\n\t\t!Array.isArray(result.matches) ||\n\t\tresult.matches.length !== 0 ||\n\t\tresult.matchesTruncated !== false\n\t)\n\t\treturn undefined;\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus: result.status as WorkspaceFilesFindResultV1[\"status\"],\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror,\n\t};\n}\n\nfunction projectListResult(value: unknown, operationId: string): WorkspaceFilesListResultV1 | undefined {\n\treturn (\n\t\tprojectList(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"list\") as WorkspaceFilesListResultV1 | undefined)\n\t);\n}\n\nfunction projectReadResult(value: unknown, operationId: string): WorkspaceFilesReadResultV1 | undefined {\n\treturn (\n\t\tprojectRead(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"read\") as WorkspaceFilesReadResultV1 | undefined)\n\t);\n}\n\nfunction projectFindResult(value: unknown, operationId: string): WorkspaceFilesFindResultV1 | undefined {\n\treturn (\n\t\tprojectFind(value, operationId) ??\n\t\t(projectNonSuccess(value, operationId, \"find\") as WorkspaceFilesFindResultV1 | undefined)\n\t);\n}\n\nfunction errorFor(status: \"failed\" | \"cancelled\") {\n\tconst error = {\n\t\tversion: 1 as const,\n\t\tcode: status === \"cancelled\" ? \"cancelled\" : \"adapter_failed\",\n\t\tmessage: status === \"cancelled\" ? \"Workspace operation was cancelled\" : \"Workspace file adapter failed\",\n\t};\n\treturn error;\n}\n\nfunction listFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesListResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tentries: [],\n\t\tentriesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction readFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesReadResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tcontentPreview: \"\",\n\t\tcontentBytes: 0,\n\t\tcontentTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nfunction findFallback(operationId: string, status: \"failed\" | \"cancelled\"): WorkspaceFilesFindResultV1 {\n\treturn {\n\t\tversion: 1,\n\t\toperationId,\n\t\tstatus,\n\t\tmatches: [],\n\t\tmatchesTruncated: false,\n\t\terror: errorFor(status),\n\t};\n}\n\nasync function execute<T extends Result>(\n\toperationId: string,\n\tsignal: AbortSignal | undefined,\n\trun: () => Promise<T>,\n\tproject: (value: unknown, operationId: string) => T | undefined,\n\tfallbackResult: (status: \"failed\" | \"cancelled\") => T,\n): Promise<T> {\n\tif (signal?.aborted) return fallbackResult(\"cancelled\");\n\ttry {\n\t\tconst result = await run();\n\t\treturn project(result, operationId) ?? fallbackResult(\"failed\");\n\t} catch {\n\t\treturn fallbackResult(\"failed\");\n\t}\n}\n\n/** Registers bounded workspace reads using only opaque host-owned references. */\nexport function createWorkspaceFilesCapabilityFactoryV1(runtime: WorkspaceFilesAdapterV1): CapabilityPluginSyncFactory {\n\treturn (api) => {\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_list\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"List workspace files\",\n\t\t\tdescription: \"List bounded workspace entries through host-owned opaque references\",\n\t\t\tparameters: Type.Object({ request: listSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.list(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\t...(request.directoryRef === undefined\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { directoryRef: request.directoryRef as string }),\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectListResult(value, id),\n\t\t\t\t\t\t(status) => listFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn listFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_read\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"Read workspace file\",\n\t\t\tdescription: \"Read a bounded preview from a host-owned workspace file reference\",\n\t\t\tparameters: Type.Object({ request: readSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.read(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tfileRef: request.fileRef as string,\n\t\t\t\t\t\t\t\t\t...(request.maxBytes === undefined ? {} : { maxBytes: request.maxBytes as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectReadResult(value, id),\n\t\t\t\t\t\t(status) => readFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn readFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\tapi.registerTool({\n\t\t\tname: \"workspace_find\",\n\t\t\treadonlySafe: true,\n\t\t\tlabel: \"Find in workspace\",\n\t\t\tdescription: \"Return bounded workspace matches without injecting the full file contents\",\n\t\t\tparameters: Type.Object({ request: findSchema }, { additionalProperties: false }),\n\t\t\texecute: async (first: unknown, second?: unknown, third?: unknown) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { request, operationId } = input(first, second);\n\t\t\t\t\tconst signal = signalFrom(third);\n\t\t\t\t\treturn execute(\n\t\t\t\t\t\toperationId,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\truntime.find(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\toperationId,\n\t\t\t\t\t\t\t\t\tworkspaceRef: request.workspaceRef as string,\n\t\t\t\t\t\t\t\t\tquery: request.query as string,\n\t\t\t\t\t\t\t\t\t...(request.limit === undefined ? {} : { limit: request.limit as number }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(value, id) => projectFindResult(value, id),\n\t\t\t\t\t\t(status) => findFallback(operationId, status),\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\treturn findFallback(\"profile-runtime-tool-call\", \"failed\");\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-agent-forge/plugin-workspace-files",
|
|
3
|
-
"version": "0.88.
|
|
3
|
+
"version": "0.88.13",
|
|
4
4
|
"description": "Workspace files capability plugin for Agent Forge (read-only workspace_list/workspace_read/workspace_find tools)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"clean": "shx rm -rf dist",
|
|
22
22
|
"build": "tsgo -p tsconfig.build.json",
|
|
23
23
|
"test": "vitest --run",
|
|
24
|
-
"prepublishOnly": "npm run clean && npm run build"
|
|
24
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
25
|
+
"test:coverage": "vitest --run --coverage"
|
|
25
26
|
},
|
|
26
27
|
"keywords": [
|
|
27
28
|
"agent-forge",
|
|
@@ -45,10 +46,10 @@
|
|
|
45
46
|
},
|
|
46
47
|
"dependencies": {
|
|
47
48
|
"typebox": "1.3.27",
|
|
48
|
-
"@ai-agent-forge/plugin-sdk": "^0.88.
|
|
49
|
+
"@ai-agent-forge/plugin-sdk": "^0.88.13"
|
|
49
50
|
},
|
|
50
51
|
"devDependencies": {
|
|
51
|
-
"shx": "0.4
|
|
52
|
+
"shx": "0.3.4",
|
|
52
53
|
"vitest": "4.1.11"
|
|
53
54
|
}
|
|
54
55
|
}
|