@native-knowledge/knowledge-sdk 0.0.0-stage → 0.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +29 -0
  3. package/README.md +34 -2
  4. package/dist/agent-entry.d.ts +291 -0
  5. package/dist/agent-entry.js +153 -0
  6. package/dist/agent-guidance-error.d.ts +15 -0
  7. package/dist/agent-guidance-error.js +46 -0
  8. package/dist/auth.d.ts +124 -0
  9. package/dist/auth.js +165 -0
  10. package/dist/index.d.ts +290 -0
  11. package/dist/index.js +166 -0
  12. package/dist/internal/contracts/artifact.d.ts +120 -0
  13. package/dist/internal/contracts/artifact.js +103 -0
  14. package/dist/internal/contracts/collection-control.d.ts +160 -0
  15. package/dist/internal/contracts/collection-control.js +69 -0
  16. package/dist/internal/contracts/collection.d.ts +263 -0
  17. package/dist/internal/contracts/collection.js +174 -0
  18. package/dist/internal/contracts/common.d.ts +17 -0
  19. package/dist/internal/contracts/common.js +16 -0
  20. package/dist/internal/contracts/currentness.d.ts +477 -0
  21. package/dist/internal/contracts/currentness.js +221 -0
  22. package/dist/internal/contracts/event.d.ts +60 -0
  23. package/dist/internal/contracts/event.js +35 -0
  24. package/dist/internal/contracts/evidence.d.ts +202 -0
  25. package/dist/internal/contracts/evidence.js +171 -0
  26. package/dist/internal/contracts/index.d.ts +54 -0
  27. package/dist/internal/contracts/index.js +54 -0
  28. package/dist/internal/contracts/material-capability.d.ts +88 -0
  29. package/dist/internal/contracts/material-capability.js +8 -0
  30. package/dist/internal/contracts/material-carrier.d.ts +104 -0
  31. package/dist/internal/contracts/material-carrier.js +15 -0
  32. package/dist/internal/contracts/material-context.d.ts +28 -0
  33. package/dist/internal/contracts/material-context.js +9 -0
  34. package/dist/internal/contracts/material-read.d.ts +152 -0
  35. package/dist/internal/contracts/material-read.js +12 -0
  36. package/dist/internal/contracts/observation.d.ts +75 -0
  37. package/dist/internal/contracts/observation.js +39 -0
  38. package/dist/internal/contracts/persistence.d.ts +370 -0
  39. package/dist/internal/contracts/persistence.js +239 -0
  40. package/dist/internal/contracts/project-intent.d.ts +218 -0
  41. package/dist/internal/contracts/project-intent.js +121 -0
  42. package/dist/internal/contracts/projection.d.ts +380 -0
  43. package/dist/internal/contracts/projection.js +194 -0
  44. package/dist/internal/contracts/public-reference.d.ts +237 -0
  45. package/dist/internal/contracts/public-reference.js +87 -0
  46. package/dist/internal/contracts/reference-record.d.ts +124 -0
  47. package/dist/internal/contracts/reference-record.js +55 -0
  48. package/dist/internal/contracts/remote-file.d.ts +128 -0
  49. package/dist/internal/contracts/remote-file.js +159 -0
  50. package/dist/internal/contracts/resource-scope.d.ts +40 -0
  51. package/dist/internal/contracts/resource-scope.js +38 -0
  52. package/dist/internal/contracts/review-packet.d.ts +274 -0
  53. package/dist/internal/contracts/review-packet.js +61 -0
  54. package/dist/internal/contracts/review-plane.d.ts +90 -0
  55. package/dist/internal/contracts/review-plane.js +89 -0
  56. package/dist/internal/contracts/rich-document.d.ts +641 -0
  57. package/dist/internal/contracts/rich-document.js +184 -0
  58. package/dist/internal/contracts/runtime-compatibility.d.ts +22 -0
  59. package/dist/internal/contracts/runtime-compatibility.js +55 -0
  60. package/dist/internal/contracts/runtime.d.ts +59 -0
  61. package/dist/internal/contracts/runtime.js +68 -0
  62. package/dist/internal/contracts/scheduler.d.ts +348 -0
  63. package/dist/internal/contracts/scheduler.js +256 -0
  64. package/dist/internal/contracts/signal.d.ts +113 -0
  65. package/dist/internal/contracts/signal.js +77 -0
  66. package/dist/internal/contracts/source-governance.d.ts +375 -0
  67. package/dist/internal/contracts/source-governance.js +194 -0
  68. package/dist/internal/contracts/source.d.ts +62 -0
  69. package/dist/internal/contracts/source.js +32 -0
  70. package/dist/internal/contracts/tenant-budget.d.ts +59 -0
  71. package/dist/internal/contracts/tenant-budget.js +34 -0
  72. package/dist/internal/contracts/tenant-collection-request.d.ts +209 -0
  73. package/dist/internal/contracts/tenant-collection-request.js +58 -0
  74. package/dist/internal/contracts/tenant-collection.d.ts +199 -0
  75. package/dist/internal/contracts/tenant-collection.js +66 -0
  76. package/dist/internal/contracts/tenant-currentness.d.ts +117 -0
  77. package/dist/internal/contracts/tenant-currentness.js +26 -0
  78. package/dist/internal/contracts/tenant-management.d.ts +286 -0
  79. package/dist/internal/contracts/tenant-management.js +27 -0
  80. package/dist/internal/contracts/tenant-material-api.d.ts +584 -0
  81. package/dist/internal/contracts/tenant-material-api.js +46 -0
  82. package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
  83. package/dist/internal/contracts/tenant-pdf-text.d.ts +27 -0
  84. package/dist/internal/contracts/tenant-pdf-text.js +13 -0
  85. package/dist/internal/contracts/tenant-project-control.d.ts +94 -0
  86. package/dist/internal/contracts/tenant-project-control.js +19 -0
  87. package/dist/internal/contracts/tenant-public-reference.d.ts +179 -0
  88. package/dist/internal/contracts/tenant-public-reference.js +26 -0
  89. package/dist/internal/contracts/tenant-resource-api.d.ts +738 -0
  90. package/dist/internal/contracts/tenant-resource-api.js +70 -0
  91. package/dist/internal/contracts/tenant-resource.d.ts +298 -0
  92. package/dist/internal/contracts/tenant-resource.js +118 -0
  93. package/dist/internal/contracts/tenant-rich-document.d.ts +317 -0
  94. package/dist/internal/contracts/tenant-rich-document.js +17 -0
  95. package/dist/internal/contracts/tenant-source-binding.d.ts +44 -0
  96. package/dist/internal/contracts/tenant-source-binding.js +33 -0
  97. package/dist/internal/contracts/tenant-source-bridge.d.ts +70 -0
  98. package/dist/internal/contracts/tenant-source-bridge.js +9 -0
  99. package/dist/internal/contracts/tenant-source-cutover.d.ts +226 -0
  100. package/dist/internal/contracts/tenant-source-cutover.js +26 -0
  101. package/dist/internal/contracts/tenant-source-document.d.ts +163 -0
  102. package/dist/internal/contracts/tenant-source-document.js +38 -0
  103. package/dist/internal/contracts/tenant-source-lease.d.ts +1 -0
  104. package/dist/internal/contracts/tenant-source-lease.js +5 -0
  105. package/dist/internal/contracts/tenant-source.d.ts +223 -0
  106. package/dist/internal/contracts/tenant-source.js +83 -0
  107. package/dist/internal/contracts/tenant-web-collection.d.ts +287 -0
  108. package/dist/internal/contracts/tenant-web-collection.js +118 -0
  109. package/dist/internal/contracts/tenant-web-content-plan.d.ts +86 -0
  110. package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
  111. package/dist/internal/contracts/tenant-web-content-result.d.ts +63 -0
  112. package/dist/internal/contracts/tenant-web-content-result.js +15 -0
  113. package/dist/internal/contracts/tenant-web-content.d.ts +383 -0
  114. package/dist/internal/contracts/tenant-web-content.js +16 -0
  115. package/dist/internal/contracts/tenant-web-crawl.d.ts +310 -0
  116. package/dist/internal/contracts/tenant-web-crawl.js +55 -0
  117. package/dist/internal/contracts/tenant-web-dynamic.d.ts +698 -0
  118. package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
  119. package/dist/internal/contracts/tenant-web-results.d.ts +66 -0
  120. package/dist/internal/contracts/tenant-web-results.js +41 -0
  121. package/dist/internal/contracts/tenant-web-workflow.d.ts +494 -0
  122. package/dist/internal/contracts/tenant-web-workflow.js +29 -0
  123. package/dist/internal/serving-contracts/agent-catalog.d.ts +70 -0
  124. package/dist/internal/serving-contracts/agent-catalog.js +56 -0
  125. package/dist/internal/serving-contracts/agent-entry.d.ts +13148 -0
  126. package/dist/internal/serving-contracts/agent-entry.js +57 -0
  127. package/dist/internal/serving-contracts/agent-guidance-shapes.d.ts +263 -0
  128. package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
  129. package/dist/internal/serving-contracts/agent-input-hints.d.ts +24 -0
  130. package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
  131. package/dist/internal/serving-contracts/body-search.d.ts +231 -0
  132. package/dist/internal/serving-contracts/body-search.js +16 -0
  133. package/dist/internal/serving-contracts/consumer.d.ts +989 -0
  134. package/dist/internal/serving-contracts/consumer.js +45 -0
  135. package/dist/internal/serving-contracts/core.d.ts +333 -0
  136. package/dist/internal/serving-contracts/core.js +76 -0
  137. package/dist/internal/serving-contracts/http.d.ts +2874 -0
  138. package/dist/internal/serving-contracts/http.js +64 -0
  139. package/dist/internal/serving-contracts/index.d.ts +24 -0
  140. package/dist/internal/serving-contracts/index.js +25 -0
  141. package/dist/internal/serving-contracts/management.d.ts +424 -0
  142. package/dist/internal/serving-contracts/management.js +15 -0
  143. package/dist/internal/serving-contracts/material-capabilities.d.ts +508 -0
  144. package/dist/internal/serving-contracts/material-capabilities.js +14 -0
  145. package/dist/internal/serving-contracts/material-index-status.d.ts +55 -0
  146. package/dist/internal/serving-contracts/material-index-status.js +5 -0
  147. package/dist/internal/serving-contracts/mcp.d.ts +2218 -0
  148. package/dist/internal/serving-contracts/mcp.js +140 -0
  149. package/dist/internal/serving-contracts/tenant-governance.d.ts +236 -0
  150. package/dist/internal/serving-contracts/tenant-governance.js +13 -0
  151. package/dist/internal/serving-contracts/tenant-management.d.ts +6276 -0
  152. package/dist/internal/serving-contracts/tenant-management.js +89 -0
  153. package/dist/internal/serving-contracts/tenant-project.d.ts +7550 -0
  154. package/dist/internal/serving-contracts/tenant-project.js +39 -0
  155. package/dist/internal/serving-contracts/tenant-runtime.d.ts +9674 -0
  156. package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
  157. package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
  158. package/dist/internal/serving-contracts/tenant-session.js +8 -0
  159. package/dist/internal/serving-contracts/tenant-web-content.d.ts +4606 -0
  160. package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
  161. package/dist/internal/serving-contracts/tenant-web-crawl.d.ts +2958 -0
  162. package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
  163. package/dist/internal/serving-contracts/tenant-web-dynamic.d.ts +3902 -0
  164. package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
  165. package/dist/internal/serving-contracts/tenant-web-workflow.d.ts +5750 -0
  166. package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
  167. package/dist/internal/serving-contracts/tenant-web.d.ts +6418 -0
  168. package/dist/internal/serving-contracts/tenant-web.js +53 -0
  169. package/dist/internal/serving-contracts/tenant-workspace.d.ts +6451 -0
  170. package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
  171. package/dist/internal/serving-contracts/workflow.d.ts +439 -0
  172. package/dist/internal/serving-contracts/workflow.js +37 -0
  173. package/dist/material-stream.d.ts +18 -0
  174. package/dist/material-stream.js +29 -0
  175. package/dist/oauth.d.ts +268 -0
  176. package/dist/oauth.js +539 -0
  177. package/dist/resource.d.ts +88 -0
  178. package/dist/resource.js +123 -0
  179. package/dist/session.d.ts +4 -0
  180. package/dist/session.js +3 -0
  181. package/dist/tenant-client.d.ts +169 -0
  182. package/dist/tenant-client.js +58 -0
  183. package/dist/tenant-management.d.ts +240 -0
  184. package/dist/tenant-management.js +149 -0
  185. package/dist/tenant-project.d.ts +57 -0
  186. package/dist/tenant-project.js +63 -0
  187. package/dist/tenant-runtime.d.ts +174 -0
  188. package/dist/tenant-runtime.js +17 -0
  189. package/dist/tenant-web-content.d.ts +44 -0
  190. package/dist/tenant-web-content.js +70 -0
  191. package/dist/tenant-web-crawl.d.ts +42 -0
  192. package/dist/tenant-web-crawl.js +39 -0
  193. package/dist/tenant-web-dynamic.d.ts +42 -0
  194. package/dist/tenant-web-dynamic.js +39 -0
  195. package/dist/tenant-web-workflow.d.ts +43 -0
  196. package/dist/tenant-web-workflow.js +63 -0
  197. package/dist/tenant-web.d.ts +42 -0
  198. package/dist/tenant-web.js +39 -0
  199. package/dist/tenant-workspace.d.ts +36 -0
  200. package/dist/tenant-workspace.js +21 -0
  201. package/dist/token-provider.d.ts +14 -0
  202. package/dist/token-provider.js +21 -0
  203. package/package.json +45 -3
@@ -0,0 +1,57 @@
1
+ /** Task-first presentation over existing contracts; discovery never grants authority. */
2
+ import { z } from 'zod';
3
+ import { materialTenantIdSchema, resourceToolSchemas, resourceDataSchemas, resourceEnvelopeSchema } from '../contracts/index.js';
4
+ import { tenantWebWorkflowWorkspaceToolSchemas, tenantWebWorkflowDataSchemas, tenantWebWorkflowToolSchemas, tenantWebWorkflowEnvelopeSchema, tenantWebWorkflowErrorSchema } from './tenant-web-workflow.js';
5
+ import { tenantRuntimeWorkspaceDataSchemas, tenantRuntimeEnvelopeSchema } from './tenant-runtime.js';
6
+ import { tenantManagementProviderBaseSchema } from './tenant-management.js';
7
+ import { bodySearchToolSchemas, bodySearchDataSchemas, bodySearchEnvelopeSchema } from './body-search.js';
8
+ import { agentGuidanceActionSchema, agentTaskInputSchema, agentTaskPlanSchema, agentInputHintSchema, agentGuidedFailureSchema } from './agent-guidance-shapes.js';
9
+ const { tenant_workflow_guide: legacyGuide, ...management } = tenantWebWorkflowWorkspaceToolSchemas;
10
+ export const agentCapabilitySchemas = { ...resourceToolSchemas, ...bodySearchToolSchemas, ...management };
11
+ export const agentCapabilityDataSchemas = { ...resourceDataSchemas, ...bodySearchDataSchemas, ...tenantRuntimeWorkspaceDataSchemas, ...tenantWebWorkflowDataSchemas };
12
+ // Keep the registry out of the entry schemas as well as tools/list. The predicate
13
+ // narrows only to registered names; JSON Schema advertises a bounded identifier.
14
+ export const agentCapabilityNameSchema = z.string().min(1).max(128).regex(/^(?:tenant_|knowledge_resource_)[a-z_]+$/).refine(name => Object.hasOwn(agentCapabilitySchemas, name), 'Discover an authorized capability first');
15
+ export const agentCategorySchema = z.enum(['materials', 'sources', 'collection', 'governance', 'sharing', 'projects', 'runtime']);
16
+ const args = z.record(z.string(), z.json()), cursor = z.string().min(1).max(4096);
17
+ export const agentEntryToolSchemas = {
18
+ knowledge_discover: z.object({ query: z.string().trim().min(1).max(500).optional(), category: agentCategorySchema.optional(), tool: agentCapabilityNameSchema.optional(), after: cursor.optional(), limit: z.number().int().min(1).max(8).default(5) }).strict().refine(v => !v.tool || !v.query && !v.category && !v.after),
19
+ knowledge_execute: z.object({ tool: agentCapabilityNameSchema, arguments: args.default({}) }).strict(),
20
+ };
21
+ export const agentNextActionSchema = agentGuidanceActionSchema;
22
+ const card = z.object({ name: agentCapabilityNameSchema, category: agentCategorySchema, title: z.string().max(256), description: z.string().max(1000), readOnly: z.boolean(), scopeAlternatives: z.array(z.array(z.string())).max(4) }).strict();
23
+ export const agentEntryDataSchemas = {
24
+ knowledge_discover: z.object({ mode: z.enum(['HOME', 'SEARCH', 'DETAIL']), categories: z.array(z.object({ id: agentCategorySchema, title: z.string(), count: z.number().int().nonnegative() }).strict()).max(7), items: z.array(card).max(8), detail: z.object({ name: agentCapabilityNameSchema, inputSchema: z.json(), outputSchema: z.json() }).strict().nullable(), nextAfter: cursor.nullable(), nextActions: z.array(agentNextActionSchema).max(16), guidance: z.string().max(1000) }).strict(),
25
+ knowledge_execute: z.object({ capability: agentCapabilityNameSchema, status: z.enum(['COMPLETED', 'NEEDS_INPUT']), result: z.json().nullable(), missingFields: z.array(z.string().max(256)).max(32), nextActions: z.array(agentNextActionSchema).max(16) }).strict(),
26
+ };
27
+ export function agentEntryEnvelopeSchema(tool) { return z.object({ schemaVersion: z.literal(2), tenantId: materialTenantIdSchema, tool: z.literal(tool), data: agentEntryDataSchemas[tool] }).strict(); }
28
+ // Preserve the original opt-in input schema for already installed v1 clients.
29
+ export const agentGuidedV1ToolSchemas = {
30
+ knowledge_discover: agentEntryToolSchemas.knowledge_discover.safeExtend({ arguments: args.optional(), task: agentTaskInputSchema.optional() }).refine(v => (!v.arguments || Boolean(v.tool)) && (!v.task || !v.query && !v.category && !v.tool && !v.after && !v.arguments)),
31
+ knowledge_execute: agentEntryToolSchemas.knowledge_execute,
32
+ };
33
+ export const agentGuidedV1InputJsonSchemas = Object.fromEntries(Object.entries(agentGuidedV1ToolSchemas).map(([n, s]) => [n, z.toJSONSchema(s, { target: 'draft-07' })]));
34
+ export const agentGuidedToolSchemas = {
35
+ knowledge_discover: agentEntryToolSchemas.knowledge_discover.safeExtend({ arguments: args.optional(), resupplyFields: z.array(z.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/)).max(32).optional(), task: agentTaskInputSchema.optional() }).refine(v => (!v.arguments || Boolean(v.tool)) && (!v.resupplyFields || Boolean(v.tool) && v.resupplyFields.every(field => Object.hasOwn(agentCapabilitySchemas[v.tool].shape, field))) && (!v.task || !v.query && !v.category && !v.tool && !v.after && !v.arguments && !v.resupplyFields)),
36
+ knowledge_execute: agentEntryToolSchemas.knowledge_execute,
37
+ };
38
+ export const agentGuidedDataSchemas = {
39
+ knowledge_discover: agentEntryDataSchemas.knowledge_discover.omit({ mode: true }).extend({ mode: z.enum(['HOME', 'SEARCH', 'DETAIL', 'TASK']), inputHints: z.array(agentInputHintSchema).max(32), taskPlan: agentTaskPlanSchema.nullable() }).strict(),
40
+ knowledge_execute: agentEntryDataSchemas.knowledge_execute.extend({ inputHints: z.array(agentInputHintSchema).max(32) }).strict(),
41
+ };
42
+ export function agentGuidedEnvelopeSchema(tool) { return z.object({ schemaVersion: z.literal(2), tenantId: materialTenantIdSchema, tool: z.literal(tool), data: agentGuidedDataSchemas[tool] }).strict(); }
43
+ export const agentGuidedInputJsonSchemas = Object.fromEntries(Object.entries(agentGuidedToolSchemas).map(([n, s]) => [n, z.toJSONSchema(s, { target: 'draft-07' })]));
44
+ export const agentGuidedOutputJsonSchemas = Object.fromEntries(Object.keys(agentGuidedToolSchemas).map(n => [n, { type: 'object', oneOf: [z.toJSONSchema(agentGuidedEnvelopeSchema(n), { target: 'draft-07' }), z.toJSONSchema(agentGuidedFailureSchema, { target: 'draft-07' })] }]));
45
+ export function agentCapabilityEnvelopeSchema(name) {
46
+ if (Object.hasOwn(bodySearchToolSchemas, name))
47
+ return bodySearchEnvelopeSchema(name);
48
+ if (Object.hasOwn(resourceToolSchemas, name))
49
+ return resourceEnvelopeSchema.safeExtend({ data: resourceDataSchemas[name] });
50
+ if (Object.hasOwn(tenantWebWorkflowToolSchemas, name))
51
+ return tenantWebWorkflowEnvelopeSchema(name);
52
+ return tenantRuntimeEnvelopeSchema(name);
53
+ }
54
+ export const agentEntryInputJsonSchemas = Object.fromEntries(Object.entries(agentEntryToolSchemas).map(([n, s]) => [n, z.toJSONSchema(s, { target: 'draft-07' })]));
55
+ export function agentCapabilityDefinition(name) { return { name, inputSchema: z.toJSONSchema(agentCapabilitySchemas[name], { target: 'draft-07' }), outputSchema: z.toJSONSchema(agentCapabilityEnvelopeSchema(name), { target: 'draft-07' }) }; }
56
+ export const agentEntryOutputJsonSchemas = Object.fromEntries(Object.keys(agentEntryToolSchemas).map(n => [n, { type: 'object', oneOf: [z.toJSONSchema(agentEntryEnvelopeSchema(n), { target: 'draft-07' }), z.toJSONSchema(tenantWebWorkflowErrorSchema, { target: 'draft-07' })] }]));
57
+ export const agentEntryProviderSchema = tenantManagementProviderBaseSchema.extend({ schemaVersion: z.literal(26), collectionMode: z.literal('EXPLICIT_HOST_WITH_OPT_IN_DUE'), tools: z.tuple([z.literal('knowledge_discover'), z.literal('knowledge_execute')]), capabilities: z.tuple([z.literal('AGENT_TASK_DISCOVERY_V1')]) }).strict();
@@ -0,0 +1,263 @@
1
+ /** Optional presentation extension. No new execution authority or automatic actions. */
2
+ import { z } from 'zod';
3
+ export declare const agentGuidanceHeader = "x-knowledge-agent-guidance", agentGuidanceFeature = "task-guidance-v1", agentResupplyGuidanceFeature = "task-guidance-v2";
4
+ export declare const agentGuidanceActionSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ title: z.ZodString;
7
+ tool: z.ZodEnum<{
8
+ knowledge_discover: "knowledge_discover";
9
+ knowledge_execute: "knowledge_execute";
10
+ }>;
11
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
12
+ canExecute: z.ZodBoolean;
13
+ automatic: z.ZodLiteral<false>;
14
+ missingFields: z.ZodArray<z.ZodString>;
15
+ reasonCode: z.ZodString;
16
+ }, z.core.$strict>;
17
+ export declare const agentInputHintSchema: z.ZodObject<{
18
+ path: z.ZodString;
19
+ kind: z.ZodEnum<{
20
+ MISSING: "MISSING";
21
+ INVALID: "INVALID";
22
+ UNSUPPORTED: "UNSUPPORTED";
23
+ CONFLICT: "CONFLICT";
24
+ }>;
25
+ expected: z.ZodString;
26
+ prompt: z.ZodString;
27
+ source: z.ZodEnum<{
28
+ USER_INPUT: "USER_INPUT";
29
+ CURRENT_STATE: "CURRENT_STATE";
30
+ PRIOR_RESULT: "PRIOR_RESULT";
31
+ INDEPENDENT_REVIEW: "INDEPENDENT_REVIEW";
32
+ }>;
33
+ choices: z.ZodArray<z.ZodJSONSchema>;
34
+ constraints: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
35
+ }, z.core.$strict>;
36
+ export declare const agentTaskContextSchema: z.ZodObject<{
37
+ query: z.ZodOptional<z.ZodString>;
38
+ ref: z.ZodOptional<z.ZodString>;
39
+ jobRef: z.ZodOptional<z.ZodString>;
40
+ projectRef: z.ZodOptional<z.ZodString>;
41
+ projectKey: z.ZodOptional<z.ZodString>;
42
+ sourceId: z.ZodOptional<z.ZodString>;
43
+ requestId: z.ZodOptional<z.ZodString>;
44
+ recipientTenantId: z.ZodOptional<z.ZodString>;
45
+ sourceRefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
+ spec: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
47
+ extraction: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
48
+ citation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
49
+ }, z.core.$strict>;
50
+ export declare const agentTaskInputSchema: z.ZodObject<{
51
+ goal: z.ZodString;
52
+ context: z.ZodDefault<z.ZodObject<{
53
+ query: z.ZodOptional<z.ZodString>;
54
+ ref: z.ZodOptional<z.ZodString>;
55
+ jobRef: z.ZodOptional<z.ZodString>;
56
+ projectRef: z.ZodOptional<z.ZodString>;
57
+ projectKey: z.ZodOptional<z.ZodString>;
58
+ sourceId: z.ZodOptional<z.ZodString>;
59
+ requestId: z.ZodOptional<z.ZodString>;
60
+ recipientTenantId: z.ZodOptional<z.ZodString>;
61
+ sourceRefs: z.ZodOptional<z.ZodArray<z.ZodString>>;
62
+ spec: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
63
+ extraction: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
64
+ citation: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
65
+ }, z.core.$strict>>;
66
+ inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodJSONSchema>>>;
67
+ }, z.core.$strict>;
68
+ export type AgentTaskInput = z.input<typeof agentTaskInputSchema>;
69
+ export declare const agentTaskPlanSchema: z.ZodObject<{
70
+ template: z.ZodEnum<{
71
+ RESEARCH_EXISTING: "RESEARCH_EXISTING";
72
+ COLLECT_WEBSITE: "COLLECT_WEBSITE";
73
+ INSPECT_COLLECTION: "INSPECT_COLLECTION";
74
+ VERIFY_CITATION: "VERIFY_CITATION";
75
+ PROJECT_RESEARCH: "PROJECT_RESEARCH";
76
+ SHARE_MATERIAL: "SHARE_MATERIAL";
77
+ GOVERNANCE: "GOVERNANCE";
78
+ UNRECOGNIZED: "UNRECOGNIZED";
79
+ }>;
80
+ status: z.ZodLiteral<"SUGGESTED_NOT_EXECUTED">;
81
+ steps: z.ZodArray<z.ZodObject<{
82
+ id: z.ZodString;
83
+ title: z.ZodString;
84
+ dependsOn: z.ZodArray<z.ZodString>;
85
+ capability: z.ZodNullable<z.ZodString>;
86
+ state: z.ZodEnum<{
87
+ READY: "READY";
88
+ NOT_AUTHORIZED: "NOT_AUTHORIZED";
89
+ NEEDS_INPUT: "NEEDS_INPUT";
90
+ NEEDS_PRIOR_RESULT: "NEEDS_PRIOR_RESULT";
91
+ }>;
92
+ action: z.ZodNullable<z.ZodObject<{
93
+ id: z.ZodString;
94
+ title: z.ZodString;
95
+ tool: z.ZodEnum<{
96
+ knowledge_discover: "knowledge_discover";
97
+ knowledge_execute: "knowledge_execute";
98
+ }>;
99
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
100
+ canExecute: z.ZodBoolean;
101
+ automatic: z.ZodLiteral<false>;
102
+ missingFields: z.ZodArray<z.ZodString>;
103
+ reasonCode: z.ZodString;
104
+ }, z.core.$strict>>;
105
+ inputHints: z.ZodArray<z.ZodObject<{
106
+ path: z.ZodString;
107
+ kind: z.ZodEnum<{
108
+ MISSING: "MISSING";
109
+ INVALID: "INVALID";
110
+ UNSUPPORTED: "UNSUPPORTED";
111
+ CONFLICT: "CONFLICT";
112
+ }>;
113
+ expected: z.ZodString;
114
+ prompt: z.ZodString;
115
+ source: z.ZodEnum<{
116
+ USER_INPUT: "USER_INPUT";
117
+ CURRENT_STATE: "CURRENT_STATE";
118
+ PRIOR_RESULT: "PRIOR_RESULT";
119
+ INDEPENDENT_REVIEW: "INDEPENDENT_REVIEW";
120
+ }>;
121
+ choices: z.ZodArray<z.ZodJSONSchema>;
122
+ constraints: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
123
+ }, z.core.$strict>>;
124
+ }, z.core.$strict>>;
125
+ guidance: z.ZodString;
126
+ }, z.core.$strict>;
127
+ export declare const agentRecoverySchema: z.ZodObject<{
128
+ reasonCode: z.ZodEnum<{
129
+ INPUT_REQUIRED: "INPUT_REQUIRED";
130
+ CURSOR_RESTART_REQUIRED: "CURSOR_RESTART_REQUIRED";
131
+ STATE_CHANGED: "STATE_CHANGED";
132
+ INSPECT_PERSISTED_RESULT: "INSPECT_PERSISTED_RESULT";
133
+ SEMANTIC_PLAN_REQUIRED: "SEMANTIC_PLAN_REQUIRED";
134
+ AUTHORITY_REQUIRED: "AUTHORITY_REQUIRED";
135
+ ACCESS_BLOCKED: "ACCESS_BLOCKED";
136
+ OUTCOME_UNKNOWN: "OUTCOME_UNKNOWN";
137
+ INSPECT_INPUT: "INSPECT_INPUT";
138
+ }>;
139
+ summary: z.ZodString;
140
+ inputHints: z.ZodArray<z.ZodObject<{
141
+ path: z.ZodString;
142
+ kind: z.ZodEnum<{
143
+ MISSING: "MISSING";
144
+ INVALID: "INVALID";
145
+ UNSUPPORTED: "UNSUPPORTED";
146
+ CONFLICT: "CONFLICT";
147
+ }>;
148
+ expected: z.ZodString;
149
+ prompt: z.ZodString;
150
+ source: z.ZodEnum<{
151
+ USER_INPUT: "USER_INPUT";
152
+ CURRENT_STATE: "CURRENT_STATE";
153
+ PRIOR_RESULT: "PRIOR_RESULT";
154
+ INDEPENDENT_REVIEW: "INDEPENDENT_REVIEW";
155
+ }>;
156
+ choices: z.ZodArray<z.ZodJSONSchema>;
157
+ constraints: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
158
+ }, z.core.$strict>>;
159
+ nextActions: z.ZodArray<z.ZodObject<{
160
+ id: z.ZodString;
161
+ title: z.ZodString;
162
+ tool: z.ZodEnum<{
163
+ knowledge_discover: "knowledge_discover";
164
+ knowledge_execute: "knowledge_execute";
165
+ }>;
166
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
167
+ canExecute: z.ZodBoolean;
168
+ automatic: z.ZodLiteral<false>;
169
+ missingFields: z.ZodArray<z.ZodString>;
170
+ reasonCode: z.ZodString;
171
+ }, z.core.$strict>>;
172
+ }, z.core.$strict>;
173
+ export type AgentRecovery = z.infer<typeof agentRecoverySchema>;
174
+ export declare const agentGuidedFailureSchema: z.ZodObject<{
175
+ ref: z.ZodOptional<z.ZodString>;
176
+ completedPhase: z.ZodOptional<z.ZodEnum<{
177
+ REGISTERED: "REGISTERED";
178
+ ROUTE_COMMITTED: "ROUTE_COMMITTED";
179
+ CURRENTNESS_NOTIFIED: "CURRENTNESS_NOTIFIED";
180
+ SOURCE_REGISTERED: "SOURCE_REGISTERED";
181
+ BATCH_PERSISTED: "BATCH_PERSISTED";
182
+ VALIDATED: "VALIDATED";
183
+ PERSISTED: "PERSISTED";
184
+ CATALOG_PROJECTED: "CATALOG_PROJECTED";
185
+ DECLARATION_PERSISTED: "DECLARATION_PERSISTED";
186
+ CURRENTNESS_RECORDED: "CURRENTNESS_RECORDED";
187
+ SOURCE_PERSISTED: "SOURCE_PERSISTED";
188
+ REQUEST_PERSISTED: "REQUEST_PERSISTED";
189
+ PROJECT_CONTROL_COMMITTED: "PROJECT_CONTROL_COMMITTED";
190
+ WEB_INTENT_PERSISTED: "WEB_INTENT_PERSISTED";
191
+ WEB_CONTROL_COMMITTED: "WEB_CONTROL_COMMITTED";
192
+ }>>;
193
+ errorCode: z.ZodEnum<{
194
+ TENANT_MANAGEMENT_INVALID_INPUT: "TENANT_MANAGEMENT_INVALID_INPUT";
195
+ TENANT_MANAGEMENT_FORBIDDEN: "TENANT_MANAGEMENT_FORBIDDEN";
196
+ TENANT_MANAGEMENT_AUTHORITY_CHANGED: "TENANT_MANAGEMENT_AUTHORITY_CHANGED";
197
+ TENANT_MANAGEMENT_RUNTIME_OWNER_REQUIRED: "TENANT_MANAGEMENT_RUNTIME_OWNER_REQUIRED";
198
+ TENANT_MANAGEMENT_IDEMPOTENCY_CONFLICT: "TENANT_MANAGEMENT_IDEMPOTENCY_CONFLICT";
199
+ TENANT_MANAGEMENT_VERSION_CONFLICT: "TENANT_MANAGEMENT_VERSION_CONFLICT";
200
+ TENANT_MANAGEMENT_SOURCE_FORBIDDEN: "TENANT_MANAGEMENT_SOURCE_FORBIDDEN";
201
+ TENANT_MANAGEMENT_REVIEW_REQUIRED: "TENANT_MANAGEMENT_REVIEW_REQUIRED";
202
+ TENANT_MANAGEMENT_POLICY_BLOCKED: "TENANT_MANAGEMENT_POLICY_BLOCKED";
203
+ TENANT_MANAGEMENT_UNAVAILABLE: "TENANT_MANAGEMENT_UNAVAILABLE";
204
+ TENANT_MANAGEMENT_INCOMPLETE: "TENANT_MANAGEMENT_INCOMPLETE";
205
+ TENANT_MANAGEMENT_INPUT_BUDGET: "TENANT_MANAGEMENT_INPUT_BUDGET";
206
+ TENANT_MANAGEMENT_NOT_FOUND: "TENANT_MANAGEMENT_NOT_FOUND";
207
+ TENANT_WEB_SEMANTIC_COMPILER_UNAVAILABLE: "TENANT_WEB_SEMANTIC_COMPILER_UNAVAILABLE";
208
+ TENANT_WEB_CONTENT_FIELD_PLAN_REQUIRED: "TENANT_WEB_CONTENT_FIELD_PLAN_REQUIRED";
209
+ TENANT_WEB_RETAINED_SCOPE_FORBIDDEN: "TENANT_WEB_RETAINED_SCOPE_FORBIDDEN";
210
+ TENANT_WEB_RESULT_NOT_FOUND: "TENANT_WEB_RESULT_NOT_FOUND";
211
+ TENANT_WEB_CONTROL_CONFLICT: "TENANT_WEB_CONTROL_CONFLICT";
212
+ TENANT_WEB_CANCELLED: "TENANT_WEB_CANCELLED";
213
+ TENANT_WEB_PAUSED: "TENANT_WEB_PAUSED";
214
+ TENANT_WEB_CYCLE_PENDING: "TENANT_WEB_CYCLE_PENDING";
215
+ TENANT_WEB_RUNTIME_OR_DELEGATION_UNAVAILABLE: "TENANT_WEB_RUNTIME_OR_DELEGATION_UNAVAILABLE";
216
+ }>;
217
+ guidance: z.ZodObject<{
218
+ reasonCode: z.ZodEnum<{
219
+ INPUT_REQUIRED: "INPUT_REQUIRED";
220
+ CURSOR_RESTART_REQUIRED: "CURSOR_RESTART_REQUIRED";
221
+ STATE_CHANGED: "STATE_CHANGED";
222
+ INSPECT_PERSISTED_RESULT: "INSPECT_PERSISTED_RESULT";
223
+ SEMANTIC_PLAN_REQUIRED: "SEMANTIC_PLAN_REQUIRED";
224
+ AUTHORITY_REQUIRED: "AUTHORITY_REQUIRED";
225
+ ACCESS_BLOCKED: "ACCESS_BLOCKED";
226
+ OUTCOME_UNKNOWN: "OUTCOME_UNKNOWN";
227
+ INSPECT_INPUT: "INSPECT_INPUT";
228
+ }>;
229
+ summary: z.ZodString;
230
+ inputHints: z.ZodArray<z.ZodObject<{
231
+ path: z.ZodString;
232
+ kind: z.ZodEnum<{
233
+ MISSING: "MISSING";
234
+ INVALID: "INVALID";
235
+ UNSUPPORTED: "UNSUPPORTED";
236
+ CONFLICT: "CONFLICT";
237
+ }>;
238
+ expected: z.ZodString;
239
+ prompt: z.ZodString;
240
+ source: z.ZodEnum<{
241
+ USER_INPUT: "USER_INPUT";
242
+ CURRENT_STATE: "CURRENT_STATE";
243
+ PRIOR_RESULT: "PRIOR_RESULT";
244
+ INDEPENDENT_REVIEW: "INDEPENDENT_REVIEW";
245
+ }>;
246
+ choices: z.ZodArray<z.ZodJSONSchema>;
247
+ constraints: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
248
+ }, z.core.$strict>>;
249
+ nextActions: z.ZodArray<z.ZodObject<{
250
+ id: z.ZodString;
251
+ title: z.ZodString;
252
+ tool: z.ZodEnum<{
253
+ knowledge_discover: "knowledge_discover";
254
+ knowledge_execute: "knowledge_execute";
255
+ }>;
256
+ arguments: z.ZodRecord<z.ZodString, z.ZodJSONSchema>;
257
+ canExecute: z.ZodBoolean;
258
+ automatic: z.ZodLiteral<false>;
259
+ missingFields: z.ZodArray<z.ZodString>;
260
+ reasonCode: z.ZodString;
261
+ }, z.core.$strict>>;
262
+ }, z.core.$strict>;
263
+ }, z.core.$strict>;
@@ -0,0 +1,12 @@
1
+ /** Optional presentation extension. No new execution authority or automatic actions. */
2
+ import { z } from 'zod';
3
+ import { stableUriSchema, projectKeySchema } from '../contracts/index.js';
4
+ import { tenantWebWorkflowErrorSchema } from './tenant-web-workflow.js';
5
+ export const agentGuidanceHeader = 'x-knowledge-agent-guidance', agentGuidanceFeature = 'task-guidance-v1', agentResupplyGuidanceFeature = 'task-guidance-v2';
6
+ export const agentGuidanceActionSchema = z.object({ id: z.string().min(1).max(128), title: z.string().min(1).max(256), tool: z.enum(['knowledge_discover', 'knowledge_execute']), arguments: z.record(z.string(), z.json()), canExecute: z.boolean(), automatic: z.literal(false), missingFields: z.array(z.string().max(256)).max(32), reasonCode: z.string().max(128) }).strict();
7
+ export const agentInputHintSchema = z.object({ path: z.string().min(1).max(256), kind: z.enum(['MISSING', 'INVALID', 'UNSUPPORTED', 'CONFLICT']), expected: z.string().max(256), prompt: z.string().max(600), source: z.enum(['USER_INPUT', 'CURRENT_STATE', 'PRIOR_RESULT', 'INDEPENDENT_REVIEW']), choices: z.array(z.json()).max(16), constraints: z.record(z.string(), z.json()) }).strict();
8
+ export const agentTaskContextSchema = z.object({ query: z.string().min(2).max(200).optional(), ref: stableUriSchema.optional(), jobRef: stableUriSchema.optional(), projectRef: stableUriSchema.optional(), projectKey: projectKeySchema.optional(), sourceId: z.string().min(1).max(128).optional(), requestId: z.string().min(1).max(128).optional(), recipientTenantId: z.string().min(1).max(256).optional(), sourceRefs: z.array(stableUriSchema).max(32).optional(), spec: z.record(z.string(), z.json()).optional(), extraction: z.record(z.string(), z.json()).optional(), citation: z.record(z.string(), z.json()).optional() }).strict();
9
+ export const agentTaskInputSchema = z.object({ goal: z.string().trim().min(1).max(1000), context: agentTaskContextSchema.default({}), inputs: z.record(z.string().regex(/^step-[1-6]$/), z.record(z.string(), z.json())).default({}) }).strict();
10
+ export const agentTaskPlanSchema = z.object({ template: z.enum(['RESEARCH_EXISTING', 'COLLECT_WEBSITE', 'INSPECT_COLLECTION', 'VERIFY_CITATION', 'PROJECT_RESEARCH', 'SHARE_MATERIAL', 'GOVERNANCE', 'UNRECOGNIZED']), status: z.literal('SUGGESTED_NOT_EXECUTED'), steps: z.array(z.object({ id: z.string().max(32), title: z.string().max(256), dependsOn: z.array(z.string().max(32)).max(6), capability: z.string().max(128).nullable(), state: z.enum(['READY', 'NEEDS_INPUT', 'NEEDS_PRIOR_RESULT', 'NOT_AUTHORIZED']), action: agentGuidanceActionSchema.nullable(), inputHints: z.array(agentInputHintSchema).max(32) }).strict()).max(6), guidance: z.string().max(1000) }).strict();
11
+ export const agentRecoverySchema = z.object({ reasonCode: z.enum(['INPUT_REQUIRED', 'CURSOR_RESTART_REQUIRED', 'STATE_CHANGED', 'INSPECT_PERSISTED_RESULT', 'SEMANTIC_PLAN_REQUIRED', 'AUTHORITY_REQUIRED', 'ACCESS_BLOCKED', 'OUTCOME_UNKNOWN', 'INSPECT_INPUT']), summary: z.string().max(1000), inputHints: z.array(agentInputHintSchema).max(32), nextActions: z.array(agentGuidanceActionSchema).max(16) }).strict();
12
+ export const agentGuidedFailureSchema = tenantWebWorkflowErrorSchema.extend({ guidance: agentRecoverySchema }).strict();
@@ -0,0 +1,24 @@
1
+ /** Derive bounded hints from the actual capability schema, never from raw validator messages. */
2
+ import { type AgentCapabilityName } from './agent-entry.js';
3
+ export declare function agentInputHints(name: AgentCapabilityName, raw: unknown): {
4
+ path: string;
5
+ kind: "MISSING" | "INVALID" | "UNSUPPORTED" | "CONFLICT";
6
+ expected: string;
7
+ prompt: string;
8
+ source: "USER_INPUT" | "CURRENT_STATE" | "PRIOR_RESULT" | "INDEPENDENT_REVIEW";
9
+ choices: import("zod").JSONType[];
10
+ constraints: Record<string, import("zod").JSONType>;
11
+ }[];
12
+ export declare function agentResumeArguments(name: AgentCapabilityName, raw: unknown): Record<string, unknown>;
13
+ /** Explain invalid supplied fields and any payload fields intentionally omitted from suggestions. */
14
+ export declare function agentCompletionHints(name: AgentCapabilityName, raw: unknown, resupplyFields?: readonly string[]): {
15
+ path: string;
16
+ kind: "MISSING" | "INVALID" | "UNSUPPORTED" | "CONFLICT";
17
+ expected: string;
18
+ prompt: string;
19
+ source: "USER_INPUT" | "CURRENT_STATE" | "PRIOR_RESULT" | "INDEPENDENT_REVIEW";
20
+ choices: import("zod").JSONType[];
21
+ constraints: Record<string, import("zod").JSONType>;
22
+ }[];
23
+ /** Carry only declared field names, never omitted values, across inspection hops. */
24
+ export declare function agentResupplyFields(name: AgentCapabilityName, raw: unknown): string[];
@@ -0,0 +1,104 @@
1
+ /** Derive bounded hints from the actual capability schema, never from raw validator messages. */
2
+ import { agentCapabilitySchemas, agentCapabilityDefinition } from './agent-entry.js';
3
+ import { agentInputHintSchema } from './agent-guidance-shapes.js';
4
+ const object = (v) => v && typeof v === 'object' && !Array.isArray(v) ? v : {};
5
+ const source = (path, name) => (/decision|reviewedAt/.test(path) || /review/.test(name) && /summary/.test(path)) ? 'INDEPENDENT_REVIEW' : /expected|generation|epoch|revision/i.test(path) ? 'CURRENT_STATE' : /ref|sourceRefs|jobRef|citation/i.test(path) ? 'PRIOR_RESULT' : 'USER_INPUT';
6
+ function prompt(path, origin) {
7
+ if (origin === 'INDEPENDENT_REVIEW')
8
+ return '由具备独立审核权限的调用者明确提供结论和依据,不预填 PASS。 Supply an explicit independent review.';
9
+ if (origin === 'CURRENT_STATE')
10
+ return '先读取准确目标的当前状态,再提供期望版本;不要猜测或自动重放写入。 Read the current exact target state first.';
11
+ if (origin === 'PRIOR_RESULT')
12
+ return '使用前一步实际返回或用户明确给出的准确引用、游标或结果,不构造占位身份。 Use an exact retained result.';
13
+ if (/requestId/.test(path))
14
+ return '明确提供本次意图的幂等 requestId;检查已有回执后再决定重试或创建新意图。';
15
+ if (/contentBase64/.test(path))
16
+ return '提供真实原始字节的规范 base64,遵守提交大小限制;不在提示中回显内容。';
17
+ return '补充或修正该字段,遵守准确 schema 的类型、枚举和范围。 Supply or correct this field using the exact schema.';
18
+ }
19
+ function variants(node) { const list = node.anyOf ?? node.oneOf; return [node, ...(Array.isArray(list) ? list : []).map(object)]; }
20
+ function child(node, key) {
21
+ for (const v of variants(node)) {
22
+ const next = typeof key === 'number' ? object(v.items) : object(object(v.properties)[key]);
23
+ if (Object.keys(next).length)
24
+ return next;
25
+ }
26
+ return {};
27
+ }
28
+ function locate(root, path) { let node = root, label = ''; for (const key of path) {
29
+ if (typeof key === 'symbol')
30
+ break;
31
+ const next = child(node, key);
32
+ if (!Object.keys(next).length)
33
+ return { node: root, label: 'arguments' };
34
+ label += typeof key === 'number' ? '[]' : (label ? '.' : '') + key;
35
+ node = next;
36
+ } return { node, label: label || 'arguments' }; }
37
+ function valueAt(raw, path) { let value = raw; for (const k of path) {
38
+ if (typeof k === 'symbol' || !value || typeof value !== 'object' || !Object.hasOwn(value, k))
39
+ return undefined;
40
+ value = value[String(k)];
41
+ } return value; }
42
+ export function agentInputHints(name, raw) {
43
+ const parsed = agentCapabilitySchemas[name].safeParse(raw);
44
+ if (parsed.success)
45
+ return [];
46
+ const root = object(agentCapabilityDefinition(name).inputSchema), hints = [], seen = new Set();
47
+ const add = (node, path, missing, depth = 0) => {
48
+ if (hints.length >= 32 || seen.has(path) || path.length > 256)
49
+ return;
50
+ const required = Array.isArray(node.required) ? node.required.filter((k) => typeof k === 'string') : [];
51
+ if (missing && required.length && depth < 5) {
52
+ const before = hints.length;
53
+ for (const key of required) {
54
+ const c = child(node, key);
55
+ if (c.default === undefined)
56
+ add(c, path === 'arguments' ? key : path + '.' + key, true, depth + 1);
57
+ }
58
+ if (hints.length > before)
59
+ return;
60
+ }
61
+ const origin = source(path, name), choices = variants(node).flatMap(v => Array.isArray(v.enum) ? v.enum : Object.hasOwn(v, 'const') ? [v.const] : []).filter(v => v === null || ['string', 'number', 'boolean'].includes(typeof v)).slice(0, 16);
62
+ const constraints = Object.fromEntries(['minimum', 'maximum', 'minLength', 'maxLength', 'minItems', 'maxItems', 'pattern'].filter(k => typeof node[k] === 'string' || typeof node[k] === 'number').map(k => [k, node[k]]));
63
+ seen.add(path);
64
+ hints.push(agentInputHintSchema.parse({ path, kind: missing ? 'MISSING' : 'INVALID', expected: typeof node.type === 'string' ? node.type : Array.isArray(node.type) ? node.type.join('|') : choices.length ? 'enum' : 'exact schema', prompt: prompt(path, origin), source: origin, choices, constraints }));
65
+ };
66
+ for (const issue of parsed.error.issues) {
67
+ const path = name === 'tenant_web_collect_read' && issue.code === 'custom' && !issue.path.length ? ['stateIndex'] : issue.path;
68
+ const located = locate(root, path);
69
+ add(located.node, located.label, valueAt(raw, path) === undefined);
70
+ }
71
+ return hints;
72
+ }
73
+ /** Keep only individually valid, declared, small fields in a completion suggestion. Payload bodies are resupplied explicitly. */
74
+ function hasSensitiveField(value, depth = 0) { if (depth > 12)
75
+ return true; if (!value || typeof value !== 'object')
76
+ return false; return Object.entries(value).some(([key, item]) => /contentBase64|credential|token|secret|password|authorization/i.test(key) || hasSensitiveField(item, depth + 1)); }
77
+ export function agentResumeArguments(name, raw) {
78
+ const shape = agentCapabilitySchemas[name].shape, result = {};
79
+ for (const [key, value] of Object.entries(object(raw))) {
80
+ if (!shape || !Object.hasOwn(shape, key) || /contentBase64|composition|summary|instruction|credential|token|secret/i.test(key))
81
+ continue;
82
+ const parsed = shape[key].safeParse(value);
83
+ if (parsed.success && parsed.data !== undefined && !hasSensitiveField(parsed.data) && JSON.stringify(parsed.data).length <= 8192)
84
+ result[key] = parsed.data;
85
+ }
86
+ return JSON.parse(JSON.stringify(result));
87
+ }
88
+ /** Explain invalid supplied fields and any payload fields intentionally omitted from suggestions. */
89
+ export function agentCompletionHints(name, raw, resupplyFields = []) {
90
+ const retained = agentResumeArguments(name, raw), hints = new Map();
91
+ for (const hint of [...agentInputHints(name, raw), ...agentInputHints(name, retained)])
92
+ if (!hints.has(hint.path))
93
+ hints.set(hint.path, hint);
94
+ const properties = object(object(agentCapabilityDefinition(name).inputSchema).properties);
95
+ for (const key of new Set([...Object.keys(object(raw)), ...resupplyFields])) {
96
+ if (!resupplyFields.includes(key) && object(raw)[key] === undefined || !Object.hasOwn(properties, key) || Object.hasOwn(retained, key) || hints.has(key))
97
+ continue;
98
+ const node = object(properties[key]), origin = source(key, name);
99
+ hints.set(key, agentInputHintSchema.parse({ path: key, kind: 'MISSING', expected: typeof node.type === 'string' ? node.type : 'exact schema', prompt: '该字段未进入续作建议;如仍为原意图,请显式重新提供。 ' + prompt(key, origin), source: origin, choices: [], constraints: {} }));
100
+ }
101
+ return [...hints.values()].slice(0, 32);
102
+ }
103
+ /** Carry only declared field names, never omitted values, across inspection hops. */
104
+ export function agentResupplyFields(name, raw) { const retained = agentResumeArguments(name, raw), properties = object(object(agentCapabilityDefinition(name).inputSchema).properties); return Object.keys(object(raw)).filter(key => object(raw)[key] !== undefined && Object.hasOwn(properties, key) && !Object.hasOwn(retained, key)).slice(0, 32); }