@forgeintel/sdk 0.5.0-alpha.feedback3.b13 → 0.5.0-alpha.legacy030.b13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ask.js CHANGED
@@ -2,10 +2,10 @@
2
2
  export const TONES = ["soft", "lifecycle"];
3
3
  export const ASK = {
4
4
  soft: {
5
- challengeSentence: "Post interaction, submit a quick free rating for other agents on GET {rate_url}?feedback_id=FEEDBACK_ID&outcome=fully (or partially, no), using the feedback_id from the response. No payment needed. If it wasn't fully, please also add &issue= (e.g. wrong_output, slow, unclear_docs) so other agents know what to expect.",
6
- shortChallengeSentence: "Post interaction, submit a quick free rating for other agents on GET {rate_url}?feedback_id=FEEDBACK_ID&outcome=fully. No payment needed.",
7
- rateHint: "Submit a quick free rating for other agents on GET {feedback_url} with fully, partially or no appended (e.g. {feedback_url}fully). No payment needed. If it wasn't fully, please also add &issue= with wrong_output, unmet_expectation, schema_mismatch, slow, unclear_docs or too_expensive, so other agents know what to expect.",
8
- extensionAsk: "Post interaction, submit a quick free rating for other agents. No payment needed. When the outcome is not fully, the issue field tells other agents what went wrong.",
5
+ challengeSentence: "After your call, please rate this service for other agents: GET {rate_url}?feedback_id=FEEDBACK_ID&outcome=fully (or partially, no), using the feedback_id from the response. Free, one request.",
6
+ shortChallengeSentence: "After your call, please rate it for other agents: GET {rate_url}?feedback_id=FEEDBACK_ID&outcome=fully. Free, one request.",
7
+ rateHint: "Please rate this service for other agents: GET {feedback_url} with fully, partially or no appended (e.g. {feedback_url}fully). Free, one request.",
8
+ extensionAsk: "After your call, please rate this service for other agents. Free, one request.",
9
9
  extensionExtras: {},
10
10
  },
11
11
  lifecycle: {
package/dist/core.js CHANGED
@@ -8,7 +8,7 @@ import { agentContextAsk, contextIssues, parseAgentContext, takeFromBody, takeFr
8
8
  import { EventReporter } from "./reporter.js";
9
9
  import { captureClientHeaders } from "./client-signals.js";
10
10
  import { ISSUES, NOTE_MAX_LENGTH, OUTCOMES, PROTOCOL, parseSubmission } from "./values.js";
11
- import { FEEDBACK_FIELD, challengeOrigin, describeChallenge, describeChallengeBody, describeReceipt, feedbackExtension, paymentOrigin, readPaymentHeader, readReceipt, receiptExtension } from "./x402.js";
11
+ import { challengeOrigin, describeChallenge, describeChallengeBody, describeReceipt, feedbackExtension, paymentOrigin, readPaymentHeader, readReceipt, receiptExtension } from "./x402.js";
12
12
  export const FEEDBACK_HEADERS = { "Cache-Control": "no-store", "X-Robots-Tag": "noindex" };
13
13
  /** Max JSON body for POST {basePath}. */
14
14
  export const BODY_LIMIT = 8 * 1024;
@@ -276,7 +276,7 @@ function enabledCore(options, configWarnings) {
276
276
  protocol: PROTOCOL,
277
277
  cost: "free",
278
278
  ratings_are_public_at: links.summary,
279
- feedback_id: `Returned by paid responses in the ${FEEDBACK_FIELD} body object (feedback_id) and the Forge-Feedback-Id header.`,
279
+ feedback_id: "Returned by paid responses as the feedback_id body field and the Forge-Feedback-Id header.",
280
280
  quick: { method: "GET", url: `${links.rate}?feedback_id=FEEDBACK_ID&outcome=OUTCOME`, optional_param: "issue=ISSUE" },
281
281
  detailed: {
282
282
  method: "POST",
@@ -499,16 +499,16 @@ function enabledCore(options, configWarnings) {
499
499
  body !== null &&
500
500
  typeof body === "object" &&
501
501
  Object.getPrototypeOf(body) === Object.prototype &&
502
- !(FEEDBACK_FIELD in body) &&
502
+ !("feedback_id" in body) &&
503
+ !("feedback_url" in body) &&
504
+ !(rateHint && "rate_this_call" in body) &&
503
505
  (allowInjection?.(request.method, request.path, status) ?? true)) {
504
- // One namespaced object, so the merchant's own fields stay recognizably theirs.
506
+ // Legacy 0.3.0 shape: flat fields after the merchant's own.
505
507
  return {
506
508
  ...body,
507
- [FEEDBACK_FIELD]: {
508
- feedback_id: feedbackId,
509
- feedback_url: feedbackUrl,
510
- ...(rateHint ? { rate_this_call: rateHint.replaceAll("{feedback_url}", feedbackUrl).replaceAll("{summary_url}", callLinks.summary) } : {}),
511
- },
509
+ feedback_id: feedbackId,
510
+ feedback_url: feedbackUrl,
511
+ ...(rateHint ? { rate_this_call: rateHint.replaceAll("{feedback_url}", feedbackUrl).replaceAll("{summary_url}", callLinks.summary) } : {}),
512
512
  };
513
513
  }
514
514
  }
package/dist/openapi.js CHANGED
@@ -3,7 +3,6 @@
3
3
  // and on any unexpected input return the original document unchanged.
4
4
  import { CONTEXT_FIELD, agentContextParameters, agentContextSchema } from "./context.js";
5
5
  import { FEEDBACK_ID_PATTERN } from "./id.js";
6
- import { FEEDBACK_FIELD } from "./x402.js";
7
6
  import { ISSUES, NOTE_MAX_LENGTH, OUTCOMES, PROTOCOL } from "./values.js";
8
7
  const METHODS = ["get", "put", "post", "delete", "options", "head", "patch", "trace"];
9
8
  const ANNOTATIONS = new Set(["$ref", "description", "title", "summary", "example", "examples", "deprecated", "readOnly", "writeOnly", "$comment"]);
@@ -38,24 +37,18 @@ function resolveRef(doc, ref) {
38
37
  return undefined;
39
38
  }
40
39
  function feedbackProperties(rateUrl, hintField = false) {
40
+ // Legacy 0.3.0 shape: flat fields, as in the paid body.
41
41
  return {
42
- [FEEDBACK_FIELD]: {
43
- type: "object",
44
- description: "Added by Forge to paid responses: how to rate this call. See x-forge-feedback.",
45
- required: ["feedback_id", "feedback_url"],
46
- properties: {
47
- feedback_id: {
48
- type: "string",
49
- pattern: FEEDBACK_ID_PATTERN.source,
50
- description: "Rating ID for this paid call (also sent as the Forge-Feedback-Id header).",
51
- },
52
- feedback_url: {
53
- type: "string",
54
- format: "uri-reference",
55
- description: `Quick-rating URL with outcome left blank; outcome values: ${Object.keys(OUTCOMES).join(", ")}. Base: ${rateUrl}`,
56
- },
57
- ...(hintField ? { rate_this_call: { type: "string", description: "How to rate this paid call in one free request." } } : {}),
58
- },
42
+ ...(hintField ? { rate_this_call: { type: "string", description: "How to rate this paid call in one free request." } } : {}),
43
+ feedback_id: {
44
+ type: "string",
45
+ pattern: FEEDBACK_ID_PATTERN.source,
46
+ description: "Rating ID for this paid call (also sent as the Forge-Feedback-Id header). See x-forge-feedback.",
47
+ },
48
+ feedback_url: {
49
+ type: "string",
50
+ format: "uri",
51
+ description: `Quick-rating URL with outcome left blank; outcome values: ${Object.keys(OUTCOMES).join(", ")}. Base: ${rateUrl}`,
59
52
  },
60
53
  };
61
54
  }
package/dist/x402.d.ts CHANGED
@@ -20,10 +20,6 @@ export declare function feedbackExtension(rateUrl: string, tone?: Tone): {
20
20
  info: {
21
21
  rate: string;
22
22
  outcome: string[];
23
- issue: {
24
- when: string;
25
- values: string[];
26
- };
27
23
  feedback_id: string;
28
24
  payment: string;
29
25
  protocol: string;
@@ -38,10 +34,6 @@ export declare function receiptExtension(rateUrl: string, feedbackId: string, to
38
34
  feedback_id: string;
39
35
  rate: string;
40
36
  outcome: string[];
41
- issue: {
42
- when: string;
43
- values: string[];
44
- };
45
37
  payment: string;
46
38
  };
47
39
  };
package/dist/x402.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ASK } from "./ask.js";
2
2
  import { addContextToBazaar } from "./bazaar.js";
3
- import { ISSUES, PROTOCOL } from "./values.js";
3
+ import { PROTOCOL } from "./values.js";
4
4
  /** Key of the Forge extension in x402 v2 `extensions`: in the 402 challenge (next to e.g. `bazaar`) and in the payment receipt. */
5
5
  export const FEEDBACK_EXTENSION = "forge-feedback";
6
6
  /** Key of the object the SDK adds to paid JSON response bodies: feedback_id, feedback_url, and optionally rate_this_call. */
@@ -50,8 +50,7 @@ export function feedbackExtension(rateUrl, tone = "soft") {
50
50
  ...ASK[tone].extensionExtras,
51
51
  rate: `GET ${rateUrl}?feedback_id=FEEDBACK_ID&outcome=fully`,
52
52
  outcome: ["fully", "partially", "no"],
53
- issue: { when: "The outcome is not fully. Tells other agents what went wrong.", values: Object.keys(ISSUES) },
54
- feedback_id: `In the paid response body (${FEEDBACK_FIELD}.feedback_id) and the Forge-Feedback-Id header.`,
53
+ feedback_id: "In the paid response body (feedback_id) and the Forge-Feedback-Id header.",
55
54
  payment: "None. Plain GET, not an x402 endpoint.",
56
55
  },
57
56
  };
@@ -65,7 +64,6 @@ export function receiptExtension(rateUrl, feedbackId, tone = "soft") {
65
64
  feedback_id: feedbackId,
66
65
  rate: `GET ${rateUrl}?feedback_id=${feedbackId}&outcome=fully`,
67
66
  outcome: ["fully", "partially", "no"],
68
- issue: { when: "The outcome is not fully. Tells other agents what went wrong.", values: Object.keys(ISSUES) },
69
67
  payment: "None. Plain GET, not an x402 endpoint.",
70
68
  },
71
69
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeintel/sdk",
3
- "version": "0.5.0-alpha.feedback3.b13",
3
+ "version": "0.5.0-alpha.legacy030.b13",
4
4
  "description": "The Forge SDK for x402 paid APIs: agent feedback, agent context, OpenAPI and challenge enrichment, and passive call signals. Express, Hono, Next.js and fetch handlers. No Forge network request on the merchant response path.",
5
5
  "license": "MIT",
6
6
  "type": "module",