@xrkseek/harness 0.5.19 → 0.5.21

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 (176) hide show
  1. package/node_modules/@xrkseek/core-agent/dist/index.d.ts +5 -0
  2. package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
  3. package/node_modules/@xrkseek/core-agent/dist/index.js +3 -0
  4. package/node_modules/@xrkseek/core-agent/dist/index.js.map +1 -1
  5. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +6 -0
  6. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
  7. package/node_modules/@xrkseek/core-agent-loop/dist/index.js +7 -1
  8. package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
  9. package/node_modules/@xrkseek/core-session/dist/search-text.d.ts.map +1 -1
  10. package/node_modules/@xrkseek/core-session/dist/search-text.js +5 -3
  11. package/node_modules/@xrkseek/core-session/dist/search-text.js.map +1 -1
  12. package/node_modules/@xrkseek/core-tools/dist/definition.d.ts +12 -0
  13. package/node_modules/@xrkseek/core-tools/dist/definition.d.ts.map +1 -1
  14. package/node_modules/@xrkseek/core-tools/dist/definition.js.map +1 -1
  15. package/node_modules/@xrkseek/core-tools/dist/index.d.ts +3 -1
  16. package/node_modules/@xrkseek/core-tools/dist/index.d.ts.map +1 -1
  17. package/node_modules/@xrkseek/core-tools/dist/index.js +2 -0
  18. package/node_modules/@xrkseek/core-tools/dist/index.js.map +1 -1
  19. package/node_modules/@xrkseek/core-tools/dist/materialize.d.ts +6 -0
  20. package/node_modules/@xrkseek/core-tools/dist/materialize.d.ts.map +1 -1
  21. package/node_modules/@xrkseek/core-tools/dist/materialize.js +7 -1
  22. package/node_modules/@xrkseek/core-tools/dist/materialize.js.map +1 -1
  23. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.d.ts.map +1 -1
  24. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js +3 -1
  25. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js.map +1 -1
  26. package/node_modules/@xrkseek/core-tools/dist/tool-exposure.d.ts +33 -0
  27. package/node_modules/@xrkseek/core-tools/dist/tool-exposure.d.ts.map +1 -0
  28. package/node_modules/@xrkseek/core-tools/dist/tool-exposure.js +145 -0
  29. package/node_modules/@xrkseek/core-tools/dist/tool-exposure.js.map +1 -0
  30. package/node_modules/@xrkseek/core-tools/dist/tool-search.d.ts +20 -0
  31. package/node_modules/@xrkseek/core-tools/dist/tool-search.d.ts.map +1 -0
  32. package/node_modules/@xrkseek/core-tools/dist/tool-search.js +78 -0
  33. package/node_modules/@xrkseek/core-tools/dist/tool-search.js.map +1 -0
  34. package/node_modules/@xrkseek/exec-computer-use/dist/format.d.ts +3 -3
  35. package/node_modules/@xrkseek/exec-computer-use/dist/format.d.ts.map +1 -1
  36. package/node_modules/@xrkseek/exec-computer-use/dist/format.js +6 -17
  37. package/node_modules/@xrkseek/exec-computer-use/dist/format.js.map +1 -1
  38. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts +15 -1
  39. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts.map +1 -1
  40. package/node_modules/@xrkseek/exec-fs/dist/index.js +27 -11
  41. package/node_modules/@xrkseek/exec-fs/dist/index.js.map +1 -1
  42. package/node_modules/@xrkseek/exec-fs/dist/path-overreach-pre.d.ts +23 -0
  43. package/node_modules/@xrkseek/exec-fs/dist/path-overreach-pre.d.ts.map +1 -0
  44. package/node_modules/@xrkseek/exec-fs/dist/path-overreach-pre.js +142 -0
  45. package/node_modules/@xrkseek/exec-fs/dist/path-overreach-pre.js.map +1 -0
  46. package/node_modules/@xrkseek/exec-fs/dist/paths.d.ts +9 -6
  47. package/node_modules/@xrkseek/exec-fs/dist/paths.d.ts.map +1 -1
  48. package/node_modules/@xrkseek/exec-fs/dist/paths.js +14 -6
  49. package/node_modules/@xrkseek/exec-fs/dist/paths.js.map +1 -1
  50. package/node_modules/@xrkseek/exec-web/dist/fetch-http.d.ts +2 -2
  51. package/node_modules/@xrkseek/exec-web/dist/fetch-http.d.ts.map +1 -1
  52. package/node_modules/@xrkseek/exec-web/dist/fetch-http.js +146 -56
  53. package/node_modules/@xrkseek/exec-web/dist/fetch-http.js.map +1 -1
  54. package/node_modules/@xrkseek/exec-web/dist/format.d.ts +15 -7
  55. package/node_modules/@xrkseek/exec-web/dist/format.d.ts.map +1 -1
  56. package/node_modules/@xrkseek/exec-web/dist/format.js +58 -21
  57. package/node_modules/@xrkseek/exec-web/dist/format.js.map +1 -1
  58. package/node_modules/@xrkseek/exec-web/dist/index.d.ts +1 -1
  59. package/node_modules/@xrkseek/exec-web/dist/index.d.ts.map +1 -1
  60. package/node_modules/@xrkseek/exec-web/dist/index.js +1 -1
  61. package/node_modules/@xrkseek/exec-web/dist/index.js.map +1 -1
  62. package/node_modules/@xrkseek/exec-web/dist/tools.d.ts.map +1 -1
  63. package/node_modules/@xrkseek/exec-web/dist/tools.js +13 -3
  64. package/node_modules/@xrkseek/exec-web/dist/tools.js.map +1 -1
  65. package/node_modules/@xrkseek/exec-web/dist/types.d.ts +13 -0
  66. package/node_modules/@xrkseek/exec-web/dist/types.d.ts.map +1 -1
  67. package/node_modules/@xrkseek/exec-web/package.json +2 -1
  68. package/node_modules/@xrkseek/mcp/dist/register.d.ts.map +1 -1
  69. package/node_modules/@xrkseek/mcp/dist/register.js +2 -0
  70. package/node_modules/@xrkseek/mcp/dist/register.js.map +1 -1
  71. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +19 -1
  72. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  73. package/node_modules/@xrkseek/preset-harness/dist/preset.js +115 -5
  74. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  75. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  76. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  77. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
  78. package/node_modules/@xrkseek/preset-server/dist/preset.js +7 -1
  79. package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
  80. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  81. package/node_modules/@xrkseek/protocol/dist/content.d.ts +31 -0
  82. package/node_modules/@xrkseek/protocol/dist/content.d.ts.map +1 -1
  83. package/node_modules/@xrkseek/protocol/dist/content.js +55 -1
  84. package/node_modules/@xrkseek/protocol/dist/content.js.map +1 -1
  85. package/node_modules/@xrkseek/protocol/dist/index.d.ts +3 -3
  86. package/node_modules/@xrkseek/protocol/dist/index.d.ts.map +1 -1
  87. package/node_modules/@xrkseek/protocol/dist/index.js +2 -2
  88. package/node_modules/@xrkseek/protocol/dist/index.js.map +1 -1
  89. package/node_modules/@xrkseek/protocol/dist/json-schema.d.ts +12 -0
  90. package/node_modules/@xrkseek/protocol/dist/json-schema.d.ts.map +1 -1
  91. package/node_modules/@xrkseek/protocol/dist/json-schema.js +15 -1
  92. package/node_modules/@xrkseek/protocol/dist/json-schema.js.map +1 -1
  93. package/node_modules/@xrkseek/protocol/dist/permission-knobs.d.ts +9 -0
  94. package/node_modules/@xrkseek/protocol/dist/permission-knobs.d.ts.map +1 -1
  95. package/node_modules/@xrkseek/protocol/dist/permission-knobs.js +6 -0
  96. package/node_modules/@xrkseek/protocol/dist/permission-knobs.js.map +1 -1
  97. package/node_modules/@xrkseek/protocol/dist/plan-mode.d.ts +5 -2
  98. package/node_modules/@xrkseek/protocol/dist/plan-mode.d.ts.map +1 -1
  99. package/node_modules/@xrkseek/protocol/dist/plan-mode.js +11 -2
  100. package/node_modules/@xrkseek/protocol/dist/plan-mode.js.map +1 -1
  101. package/node_modules/@xrkseek/protocol/dist/session-events.d.ts +12 -4
  102. package/node_modules/@xrkseek/protocol/dist/session-events.d.ts.map +1 -1
  103. package/node_modules/@xrkseek/protocol/dist/session-events.js +1 -0
  104. package/node_modules/@xrkseek/protocol/dist/session-events.js.map +1 -1
  105. package/node_modules/@xrkseek/protocol/dist/validate.d.ts.map +1 -1
  106. package/node_modules/@xrkseek/protocol/dist/validate.js +9 -1
  107. package/node_modules/@xrkseek/protocol/dist/validate.js.map +1 -1
  108. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts +1 -0
  109. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts.map +1 -1
  110. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js +2 -0
  111. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js.map +1 -1
  112. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts +2 -0
  113. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts.map +1 -1
  114. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js +18 -4
  115. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js.map +1 -1
  116. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.d.ts +9 -0
  117. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.d.ts.map +1 -1
  118. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.js +38 -2
  119. package/node_modules/@xrkseek/server-face/dist/agent-team-roles.js.map +1 -1
  120. package/node_modules/@xrkseek/server-face/dist/approval-category.d.ts +1 -1
  121. package/node_modules/@xrkseek/server-face/dist/approval-category.d.ts.map +1 -1
  122. package/node_modules/@xrkseek/server-face/dist/approval-category.js +3 -0
  123. package/node_modules/@xrkseek/server-face/dist/approval-category.js.map +1 -1
  124. package/node_modules/@xrkseek/server-face/dist/approvals.d.ts +11 -3
  125. package/node_modules/@xrkseek/server-face/dist/approvals.d.ts.map +1 -1
  126. package/node_modules/@xrkseek/server-face/dist/approvals.js +45 -3
  127. package/node_modules/@xrkseek/server-face/dist/approvals.js.map +1 -1
  128. package/node_modules/@xrkseek/server-face/dist/collab-board.js +2 -2
  129. package/node_modules/@xrkseek/server-face/dist/collab-board.js.map +1 -1
  130. package/node_modules/@xrkseek/server-face/dist/context.d.ts +24 -0
  131. package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
  132. package/node_modules/@xrkseek/server-face/dist/durable-prompt.d.ts.map +1 -1
  133. package/node_modules/@xrkseek/server-face/dist/durable-prompt.js +3 -9
  134. package/node_modules/@xrkseek/server-face/dist/durable-prompt.js.map +1 -1
  135. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  136. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +11 -3
  137. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  138. package/node_modules/@xrkseek/server-face/dist/handlers/team.d.ts.map +1 -1
  139. package/node_modules/@xrkseek/server-face/dist/handlers/team.js +10 -1
  140. package/node_modules/@xrkseek/server-face/dist/handlers/team.js.map +1 -1
  141. package/node_modules/@xrkseek/server-face/dist/index.d.ts +6 -3
  142. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  143. package/node_modules/@xrkseek/server-face/dist/index.js +6 -3
  144. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  145. package/node_modules/@xrkseek/server-face/dist/path-allowlist.d.ts +29 -0
  146. package/node_modules/@xrkseek/server-face/dist/path-allowlist.d.ts.map +1 -0
  147. package/node_modules/@xrkseek/server-face/dist/path-allowlist.js +96 -0
  148. package/node_modules/@xrkseek/server-face/dist/path-allowlist.js.map +1 -0
  149. package/node_modules/@xrkseek/server-face/dist/permissions.d.ts +7 -0
  150. package/node_modules/@xrkseek/server-face/dist/permissions.d.ts.map +1 -1
  151. package/node_modules/@xrkseek/server-face/dist/permissions.js +59 -4
  152. package/node_modules/@xrkseek/server-face/dist/permissions.js.map +1 -1
  153. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  154. package/node_modules/@xrkseek/server-face/dist/runtime.js +83 -36
  155. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  156. package/node_modules/@xrkseek/server-face/dist/session-capability.d.ts +23 -0
  157. package/node_modules/@xrkseek/server-face/dist/session-capability.d.ts.map +1 -0
  158. package/node_modules/@xrkseek/server-face/dist/session-capability.js +78 -0
  159. package/node_modules/@xrkseek/server-face/dist/session-capability.js.map +1 -0
  160. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
  161. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +13 -0
  162. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
  163. package/node_modules/@xrkseek/server-face/dist/tool-disclosure.d.ts +16 -0
  164. package/node_modules/@xrkseek/server-face/dist/tool-disclosure.d.ts.map +1 -0
  165. package/node_modules/@xrkseek/server-face/dist/tool-disclosure.js +35 -0
  166. package/node_modules/@xrkseek/server-face/dist/tool-disclosure.js.map +1 -0
  167. package/node_modules/@xrkseek/server-face/dist/types.d.ts +3 -3
  168. package/node_modules/@xrkseek/server-face/dist/types.d.ts.map +1 -1
  169. package/node_modules/@xrkseek/server-host/dist/index.d.ts +19 -6
  170. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  171. package/node_modules/@xrkseek/server-host/dist/index.js +45 -7
  172. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  173. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.d.ts.map +1 -1
  174. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js +2 -0
  175. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js.map +1 -1
  176. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Workspace-write / read-only path overreach → pipeline `ask`
3
+ * (`path-overreach:` reason). Face broker applies 5s fail-closed +
4
+ * Once / Whitelist / Deny.
5
+ */
6
+ import type { PreHandler } from "@xrkseek/core-tools";
7
+ import type { PathAccessMode } from "@xrkseek/protocol";
8
+ /** English audit prefix — Face classifyApproval keys off this. */
9
+ export declare const PATH_OVERREACH_REASON_PREFIX = "path-overreach:";
10
+ export interface PathOverreachPreOptions {
11
+ readonly root: () => string;
12
+ readonly pathAccessMode: () => PathAccessMode;
13
+ /** Settings + session permanent/once writable object paths. */
14
+ readonly listWritableAllowlist: () => readonly string[];
15
+ /** hostReadable ∪ writable ∪ session (reads). */
16
+ readonly listReadableAllowlist: () => readonly string[];
17
+ }
18
+ /**
19
+ * Soft floor: absolute paths outside workspace + object allowlist → ask.
20
+ * No-op when `pathAccessMode` is `open`. Relative paths stay under root.
21
+ */
22
+ export declare function createPathOverreachPre(options: PathOverreachPreOptions): PreHandler;
23
+ //# sourceMappingURL=path-overreach-pre.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-overreach-pre.d.ts","sourceRoot":"","sources":["../src/path-overreach-pre.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAoBxD,kEAAkE;AAClE,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,cAAc,CAAC;IAC9C,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACxD,iDAAiD;IACjD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;CACzD;AA8ED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,UAAU,CAwDZ"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Workspace-write / read-only path overreach → pipeline `ask`
3
+ * (`path-overreach:` reason). Face broker applies 5s fail-closed +
4
+ * Once / Whitelist / Deny.
5
+ */
6
+ import path from "node:path";
7
+ import { PathEscapeError, resolveUnderHostRoots, resolveWithinRoot, resolveWritablePath, } from "./paths.js";
8
+ const WRITE_TOOLS = new Map([
9
+ ["write_file", ["path", "file_path"]],
10
+ ["apply_edit", ["path", "file_path"]],
11
+ ["apply_patch", ["path", "file_path"]],
12
+ ]);
13
+ const READ_TOOLS = new Map([
14
+ ["read_file", ["path", "file_path"]],
15
+ ["glob", ["path", "target_directory", "root"]],
16
+ ["grep", ["path", "target_directory", "root"]],
17
+ ]);
18
+ /** English audit prefix — Face classifyApproval keys off this. */
19
+ export const PATH_OVERREACH_REASON_PREFIX = "path-overreach:";
20
+ function asObject(value) {
21
+ return typeof value === "object" && value !== null && !Array.isArray(value)
22
+ ? value
23
+ : undefined;
24
+ }
25
+ function firstPathArg(args, keys) {
26
+ const obj = asObject(args);
27
+ if (!obj)
28
+ return undefined;
29
+ for (const key of keys) {
30
+ const v = obj[key];
31
+ if (typeof v === "string" && v.trim())
32
+ return v.trim();
33
+ }
34
+ return undefined;
35
+ }
36
+ function bashCwd(args) {
37
+ const obj = asObject(args);
38
+ const cwd = obj?.cwd;
39
+ return typeof cwd === "string" && cwd.trim() ? cwd.trim() : undefined;
40
+ }
41
+ function displayReasonFor(absPath, access) {
42
+ const short = absPath;
43
+ if (access === "read") {
44
+ return {
45
+ en: `Allow reading outside the workspace?\n${short}`,
46
+ zh: `允许读取工作区外路径?\n${short}`,
47
+ };
48
+ }
49
+ return {
50
+ en: `Allow writing outside the workspace?\n${short}`,
51
+ zh: `允许写入工作区外路径?\n${short}`,
52
+ };
53
+ }
54
+ function escapesWritable(root, allowlist, userPath) {
55
+ try {
56
+ resolveWritablePath(root, allowlist, userPath);
57
+ return undefined;
58
+ }
59
+ catch (err) {
60
+ if (err instanceof PathEscapeError)
61
+ return path.resolve(userPath);
62
+ throw err;
63
+ }
64
+ }
65
+ function escapesReadable(root, allowlist, userPath) {
66
+ try {
67
+ resolveWithinRoot(root, userPath);
68
+ return undefined;
69
+ }
70
+ catch (err) {
71
+ if (!(err instanceof PathEscapeError) || !path.isAbsolute(userPath)) {
72
+ if (err instanceof PathEscapeError)
73
+ return path.resolve(root, userPath);
74
+ throw err;
75
+ }
76
+ if (allowlist.length === 0)
77
+ return path.resolve(userPath);
78
+ try {
79
+ resolveUnderHostRoots(allowlist, userPath);
80
+ return undefined;
81
+ }
82
+ catch {
83
+ return path.resolve(userPath);
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Soft floor: absolute paths outside workspace + object allowlist → ask.
89
+ * No-op when `pathAccessMode` is `open`. Relative paths stay under root.
90
+ */
91
+ export function createPathOverreachPre(options) {
92
+ return async (ctx) => {
93
+ if (options.pathAccessMode() === "open") {
94
+ return { action: "continue", args: ctx.args };
95
+ }
96
+ const name = ctx.call.name;
97
+ let access;
98
+ let userPath;
99
+ const writeKeys = WRITE_TOOLS.get(name);
100
+ if (writeKeys) {
101
+ access = "write";
102
+ userPath = firstPathArg(ctx.args, writeKeys);
103
+ }
104
+ else {
105
+ const readKeys = READ_TOOLS.get(name);
106
+ if (readKeys) {
107
+ access = "read";
108
+ userPath = firstPathArg(ctx.args, readKeys);
109
+ }
110
+ else if (name === "bash" || name === "pwsh") {
111
+ access = "write";
112
+ userPath = bashCwd(ctx.args);
113
+ }
114
+ }
115
+ if (!access || !userPath) {
116
+ return { action: "continue", args: ctx.args };
117
+ }
118
+ // Relative paths resolve under workspace — no overreach card.
119
+ if (!path.isAbsolute(userPath)) {
120
+ return { action: "continue", args: ctx.args };
121
+ }
122
+ const root = options.root();
123
+ const escaped = access === "write"
124
+ ? escapesWritable(root, options.listWritableAllowlist(), userPath)
125
+ : escapesReadable(root, options.listReadableAllowlist(), userPath);
126
+ if (!escaped) {
127
+ return { action: "continue", args: ctx.args };
128
+ }
129
+ const reason = `${PATH_OVERREACH_REASON_PREFIX} ${access} ${escaped}`;
130
+ return {
131
+ action: "ask",
132
+ reason,
133
+ displayReason: displayReasonFor(escaped, access),
134
+ error: {
135
+ name: "PathEscapeError",
136
+ code: "path-escape",
137
+ reason: `path escapes workspace root: ${userPath}`,
138
+ },
139
+ };
140
+ };
141
+ }
142
+ //# sourceMappingURL=path-overreach-pre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-overreach-pre.js","sourceRoot":"","sources":["../src/path-overreach-pre.ts"],"names":[],"mappings":"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"}
@@ -8,14 +8,17 @@ export declare function isLexicallyInside(root: string, candidate: string): bool
8
8
  * paths are allowed only when they still land inside the root (DSH / Codex).
9
9
  */
10
10
  export declare function resolveWithinRoot(root: string, userPath: string): string;
11
+ /**
12
+ * No path jail: absolute paths resolve as-is; relative paths join `root`.
13
+ * Used when permission is danger-full-access / auto (`pathAccessMode: open`).
14
+ */
15
+ export declare function resolveOpenPath(root: string, userPath: string): string;
11
16
  /**
12
17
  * Resolve a user path under `root`, plus `extraWritableRoots` when the caller
13
- * opted into a wider write surface (e.g. a "full access" preset with an
14
- * explicit allowlist). Relative paths always resolve under the primary root;
15
- * absolute paths that stay inside `root` win; otherwise they are allowed only
16
- * when they land inside one of the extra roots — lexically and after symlink
17
- * resolution (same containment posture as `resolveUnderHostRoots`, but for
18
- * WRITE-intent surfaces). `extraWritableRoots` empty behaves exactly like
18
+ * opted into a wider write surface. Relative paths always resolve under the
19
+ * primary root; absolute paths that stay inside `root` win; otherwise they are
20
+ * allowed only when they land inside one of the extra roots — lexically and
21
+ * after symlink resolution. `extraWritableRoots` empty behaves like
19
22
  * `resolveWithinRoot`.
20
23
  */
21
24
  export declare function resolveWritablePath(root: string, extraWritableRoots: readonly string[], userPath: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQ1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,MAAM,CA2BR;AA6BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,EAAE,MAAM,GACf,MAAM,CA+DR"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAGA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQ1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,MAAM,CA2BR;AA6BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,QAAQ,EAAE,MAAM,GACf,MAAM,CA+DR"}
@@ -28,14 +28,22 @@ export function resolveWithinRoot(root, userPath) {
28
28
  }
29
29
  return targetAbs;
30
30
  }
31
+ /**
32
+ * No path jail: absolute paths resolve as-is; relative paths join `root`.
33
+ * Used when permission is danger-full-access / auto (`pathAccessMode: open`).
34
+ */
35
+ export function resolveOpenPath(root, userPath) {
36
+ const rootAbs = path.resolve(root);
37
+ if (path.isAbsolute(userPath))
38
+ return path.resolve(userPath);
39
+ return path.resolve(rootAbs, userPath);
40
+ }
31
41
  /**
32
42
  * Resolve a user path under `root`, plus `extraWritableRoots` when the caller
33
- * opted into a wider write surface (e.g. a "full access" preset with an
34
- * explicit allowlist). Relative paths always resolve under the primary root;
35
- * absolute paths that stay inside `root` win; otherwise they are allowed only
36
- * when they land inside one of the extra roots — lexically and after symlink
37
- * resolution (same containment posture as `resolveUnderHostRoots`, but for
38
- * WRITE-intent surfaces). `extraWritableRoots` empty behaves exactly like
43
+ * opted into a wider write surface. Relative paths always resolve under the
44
+ * primary root; absolute paths that stay inside `root` win; otherwise they are
45
+ * allowed only when they land inside one of the extra roots — lexically and
46
+ * after symlink resolution. `extraWritableRoots` empty behaves like
39
47
  * `resolveWithinRoot`.
40
48
  */
41
49
  export function resolveWritablePath(root, extraWritableRoots, userPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ export interface HttpFetchLimits {
10
10
  }
11
11
  export declare const DEFAULT_HTTP_FETCH_LIMITS: HttpFetchLimits;
12
12
  export declare const LOCAL_FETCH_PROVIDER_ID = "http";
13
- export type FetchableKind = "html" | "text";
14
- /** `text/html` + xhtml → html; other text/* / json / xml → text; else unsupported. */
13
+ export type FetchableKind = "html" | "text" | "binary";
14
+ /** `text/html` + xhtml → html; other text/* / json / xml → text; common binaries → binary. */
15
15
  export declare function classifyContentType(contentType: string | null): FetchableKind | undefined;
16
16
  export declare function createHttpFetchProvider(options?: {
17
17
  readonly limits?: Partial<HttpFetchLimits>;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-http.d.ts","sourceRoot":"","sources":["../src/fetch-http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAIT,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,yBAAyB,EAAE,eAOvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,sFAAsF;AACtF,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,GAAG,SAAS,CAa3B;AA2FD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B,GACL,QAAQ,CA8GV"}
1
+ {"version":3,"file":"fetch-http.d.ts","sourceRoot":"","sources":["../src/fetch-http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAIT,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,yBAAyB,EAAE,eAOvC,CAAC;AAEF,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAKvD,8FAA8F;AAC9F,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,aAAa,GAAG,SAAS,CAyB3B;AA0JD,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B,GACL,QAAQ,CAmJV"}
@@ -11,7 +11,9 @@ export const DEFAULT_HTTP_FETCH_LIMITS = {
11
11
  userAgent: "xrk-harness/0.0.4 (+https://github.com/xrkseek)",
12
12
  };
13
13
  export const LOCAL_FETCH_PROVIDER_ID = "http";
14
- /** `text/html` + xhtml → html; other text/* / json / xml → text; else unsupported. */
14
+ /** Max bytes to probe when Content-Length is missing on a binary response. */
15
+ const BINARY_PROBE_BYTES = 65_536;
16
+ /** `text/html` + xhtml → html; other text/* / json / xml → text; common binaries → binary. */
15
17
  export function classifyContentType(contentType) {
16
18
  const mime = (contentType ?? "").replace(/;.*$/s, "").trim().toLowerCase();
17
19
  if (mime === "text/html" || mime === "application/xhtml+xml")
@@ -24,8 +26,32 @@ export function classifyContentType(contentType) {
24
26
  mime.endsWith("+xml")) {
25
27
  return "text";
26
28
  }
29
+ if (mime.startsWith("image/") ||
30
+ mime.startsWith("audio/") ||
31
+ mime.startsWith("video/") ||
32
+ mime === "application/pdf" ||
33
+ mime === "application/octet-stream" ||
34
+ mime === "application/zip" ||
35
+ mime === "application/gzip" ||
36
+ mime === "application/x-gzip") {
37
+ return "binary";
38
+ }
27
39
  return undefined;
28
40
  }
41
+ function formatBinaryBody(contentType, byteLength, probedAtLeast) {
42
+ const mime = contentType.replace(/;.*$/s, "").trim() || "application/octet-stream";
43
+ const sizeLine = byteLength === null
44
+ ? "length unknown"
45
+ : probedAtLeast
46
+ ? `≥${byteLength} bytes probed`
47
+ : `${byteLength} bytes`;
48
+ return {
49
+ kind: "binary",
50
+ contentType: mime,
51
+ byteLength,
52
+ content: `[binary ${mime}; ${sizeLine}; body omitted — downloadable]`,
53
+ };
54
+ }
29
55
  function charsetOf(contentType) {
30
56
  const match = /charset=([^;]+)/i.exec(contentType ?? "");
31
57
  const raw = match?.[1]?.trim().replace(/^["']|["']$/g, "");
@@ -100,6 +126,38 @@ function decodeBody(bytes, contentType, kind, maxChars, byteTruncated) {
100
126
  truncated: byteTruncated || capped.truncated,
101
127
  };
102
128
  }
129
+ async function resolveFetchFn(base, proxy) {
130
+ const trimmed = proxy?.trim() ?? "";
131
+ if (!trimmed)
132
+ return { fetch: base };
133
+ let proxyUrl;
134
+ try {
135
+ proxyUrl = new URL(trimmed);
136
+ }
137
+ catch {
138
+ throw new WebError("proxy is not a valid URL", "WEB_INVALID_URL");
139
+ }
140
+ if (proxyUrl.protocol !== "http:" && proxyUrl.protocol !== "https:") {
141
+ throw new WebError("proxy must be an http(s) URL (include host and port, e.g. http://127.0.0.1:7897)", "WEB_INVALID_URL");
142
+ }
143
+ try {
144
+ const undici = await import("undici");
145
+ const agent = new undici.ProxyAgent(proxyUrl.href);
146
+ // Dual undici / undici-types packages disagree on FormData + Dispatcher;
147
+ // opaque init keeps ProxyAgent attachable without RequestInit wars.
148
+ const proxiedFetch = undici.fetch;
149
+ const fetchFn = (input, init) => proxiedFetch(input, Object.assign({}, init ?? {}, { dispatcher: agent }));
150
+ return {
151
+ fetch: fetchFn,
152
+ close: () => {
153
+ void agent.close().catch(() => undefined);
154
+ },
155
+ };
156
+ }
157
+ catch (err) {
158
+ throw new WebError(`proxy fetch unavailable: ${err instanceof Error ? err.message : String(err)}`, "WEB_PROVIDER_ERROR");
159
+ }
160
+ }
103
161
  export function createHttpFetchProvider(options = {}) {
104
162
  const limits = { ...DEFAULT_HTTP_FETCH_LIMITS, ...options.limits };
105
163
  const fetchFn = options.fetch ?? globalThis.fetch;
@@ -114,68 +172,100 @@ export function createHttpFetchProvider(options = {}) {
114
172
  });
115
173
  const timed = AbortSignal.timeout(limits.timeoutMs);
116
174
  const combined = signal ? AbortSignal.any([signal, timed]) : timed;
175
+ const resolved = await resolveFetchFn(fetchFn, request.proxy);
117
176
  let hops = 0;
118
- for (;;) {
119
- let response;
120
- try {
121
- response = await fetchFn(current, {
122
- method: "GET",
123
- redirect: "manual",
124
- signal: combined,
125
- headers: {
126
- "user-agent": limits.userAgent,
127
- accept: "text/html,application/xhtml+xml,text/*;q=0.9,application/json;q=0.8",
128
- },
129
- });
130
- }
131
- catch (err) {
132
- if (timed.aborted && !signal?.aborted) {
133
- throw new WebError("web fetch timed out", "WEB_FETCH_TIMEOUT");
134
- }
135
- if (combined.aborted) {
136
- throw new WebError("web fetch aborted", "WEB_ABORTED");
137
- }
138
- throw new WebError(err instanceof Error ? err.message : String(err), "WEB_PROVIDER_ERROR");
139
- }
140
- if (isRedirect(response.status)) {
141
- await response.body?.cancel();
142
- if (hops >= limits.maxRedirects) {
143
- throw new WebError(`exceeded the maximum of ${limits.maxRedirects} redirects`, "WEB_REDIRECT_BLOCKED");
177
+ try {
178
+ for (;;) {
179
+ let response;
180
+ try {
181
+ response = await resolved.fetch(current, {
182
+ method: "GET",
183
+ redirect: "manual",
184
+ signal: combined,
185
+ headers: {
186
+ "user-agent": limits.userAgent,
187
+ accept: "text/html,application/xhtml+xml,text/*;q=0.9,application/json;q=0.8,image/*;q=0.7,*/*;q=0.5",
188
+ },
189
+ });
144
190
  }
145
- const location = response.headers.get("location");
146
- if (!location) {
147
- throw new WebError(`redirect response (HTTP ${response.status}) without a Location header`, "WEB_PROVIDER_ERROR");
191
+ catch (err) {
192
+ if (timed.aborted && !signal?.aborted) {
193
+ throw new WebError("web fetch timed out", "WEB_FETCH_TIMEOUT");
194
+ }
195
+ if (combined.aborted) {
196
+ throw new WebError("web fetch aborted", "WEB_ABORTED");
197
+ }
198
+ throw new WebError(err instanceof Error ? err.message : String(err), "WEB_PROVIDER_ERROR");
148
199
  }
149
- let next;
150
- try {
151
- next = new URL(location, current);
200
+ if (isRedirect(response.status)) {
201
+ await response.body?.cancel();
202
+ if (hops >= limits.maxRedirects) {
203
+ throw new WebError(`exceeded the maximum of ${limits.maxRedirects} redirects`, "WEB_REDIRECT_BLOCKED");
204
+ }
205
+ const location = response.headers.get("location");
206
+ if (!location) {
207
+ throw new WebError(`redirect response (HTTP ${response.status}) without a Location header`, "WEB_PROVIDER_ERROR");
208
+ }
209
+ let next;
210
+ try {
211
+ next = new URL(location, current);
212
+ }
213
+ catch {
214
+ throw new WebError("redirect Location is not a valid URL", "WEB_INVALID_URL");
215
+ }
216
+ const validated = assertHttpUrl(next.href, limits.maxUrlLength, {
217
+ allowlist,
218
+ });
219
+ if (!isSameOrigin(current, validated)) {
220
+ throw new WebError(`cross-origin redirect is not followed; call web_fetch on Location: ${validated.href}`, "WEB_REDIRECT_BLOCKED");
221
+ }
222
+ current = validated;
223
+ hops += 1;
224
+ continue;
152
225
  }
153
- catch {
154
- throw new WebError("redirect Location is not a valid URL", "WEB_INVALID_URL");
226
+ const contentType = response.headers.get("content-type");
227
+ const kind = classifyContentType(contentType);
228
+ if (kind === undefined) {
229
+ await response.body?.cancel();
230
+ throw new WebError(`unsupported content type "${contentType ?? "unknown"}"`, "WEB_UNSUPPORTED_CONTENT_TYPE");
155
231
  }
156
- const validated = assertHttpUrl(next.href, limits.maxUrlLength, {
157
- allowlist,
158
- });
159
- if (!isSameOrigin(current, validated)) {
160
- throw new WebError(`cross-origin redirect is not followed; call web_fetch on Location: ${validated.href}`, "WEB_REDIRECT_BLOCKED");
232
+ if (kind === "binary") {
233
+ const mime = (contentType ?? "application/octet-stream")
234
+ .replace(/;.*$/s, "")
235
+ .trim() || "application/octet-stream";
236
+ const declared = response.headers.get("content-length");
237
+ if (declared !== null) {
238
+ const length = Number(declared);
239
+ if (Number.isFinite(length) && length >= 0) {
240
+ await response.body?.cancel();
241
+ return {
242
+ url: current.href,
243
+ statusCode: response.status,
244
+ truncated: false,
245
+ body: formatBinaryBody(mime, length, false),
246
+ };
247
+ }
248
+ }
249
+ const read = await readLimited(response, BINARY_PROBE_BYTES);
250
+ return {
251
+ url: current.href,
252
+ statusCode: response.status,
253
+ truncated: false,
254
+ body: formatBinaryBody(mime, read.bytes.byteLength, read.truncated),
255
+ };
161
256
  }
162
- current = validated;
163
- hops += 1;
164
- continue;
257
+ const read = await readLimited(response, limits.maxResponseBytes);
258
+ const decoded = decodeBody(read.bytes, contentType, kind, limits.maxBodyChars, read.truncated);
259
+ return {
260
+ url: current.href,
261
+ statusCode: response.status,
262
+ truncated: decoded.truncated,
263
+ body: decoded.body,
264
+ };
165
265
  }
166
- const kind = classifyContentType(response.headers.get("content-type"));
167
- if (kind === undefined) {
168
- await response.body?.cancel();
169
- throw new WebError(`unsupported content type "${response.headers.get("content-type") ?? "unknown"}"`, "WEB_UNSUPPORTED_CONTENT_TYPE");
170
- }
171
- const read = await readLimited(response, limits.maxResponseBytes);
172
- const decoded = decodeBody(read.bytes, response.headers.get("content-type"), kind, limits.maxBodyChars, read.truncated);
173
- return {
174
- url: current.href,
175
- statusCode: response.status,
176
- truncated: decoded.truncated,
177
- body: decoded.body,
178
- };
266
+ }
267
+ finally {
268
+ resolved.close?.();
179
269
  }
180
270
  },
181
271
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-http.js","sourceRoot":"","sources":["../src/fetch-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-http.js","sourceRoot":"","sources":["../src/fetch-http.ts"],"names":[],"mappings":"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"}
@@ -34,21 +34,29 @@ export declare function presentFetchResult(args: {
34
34
  }, result: PresentableToolResult): WebFetchResultView | undefined;
35
35
  export type ToolNameSet = ReadonlySet<string> | Iterable<string>;
36
36
  /**
37
- * web_search guidance; empty when the tool is not available.
38
- * Mentions web_fetch only while that tool is also visible (DSH section gate).
37
+ * web_search-only guidance (orthogonal — no fetch/browser routing).
38
+ * Cross-tool priority lives in {@link formatWebFamilyGuidance}.
39
39
  */
40
40
  export declare function formatWebSearchGuidance(available: ToolNameSet): string;
41
41
  /**
42
- * web_fetch guidance; empty when the tool is not available.
43
- * Mentions web_search only while that tool is also visible.
42
+ * web_fetch-only guidance (orthogonal — binary/proxy/redirect are this tool's contracts).
43
+ * Cross-tool priority lives in {@link formatWebFamilyGuidance}.
44
44
  */
45
45
  export declare function formatWebFetchGuidance(available: ToolNameSet): string;
46
46
  /**
47
- * browser_* guidance; empty when browser_open is not available.
47
+ * browser_*-only guidance (orthogonal — no web_* / computer_use routing).
48
+ * Cross-tool priority lives in {@link formatWebFamilyGuidance}.
48
49
  */
49
50
  export declare function formatBrowserGuidance(available: ToolNameSet): string;
50
- /** Full-surface defaults (both web tools present). */
51
+ /**
52
+ * Single cross-tool web routing block (register once). Empty when no web tools.
53
+ * Sibling tool:* sections must not repeat this priority.
54
+ */
55
+ export declare function formatWebFamilyGuidance(available: ToolNameSet): string;
56
+ /** Full-surface defaults. */
51
57
  export declare const WEB_SEARCH_GUIDANCE: string;
52
- /** Full-surface defaults (both web tools present). */
58
+ /** Full-surface defaults. */
53
59
  export declare const WEB_FETCH_GUIDANCE: string;
60
+ /** Full-surface web-family routing. */
61
+ export declare const WEB_FAMILY_GUIDANCE: string;
54
62
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,8BAA8B,SAAU,CAAC;AACtD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAclD,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAShE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA6BlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAO1E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAeD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAa7E;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,qBAAqB,GAC5B,mBAAmB,GAAG,SAAS,CAYjC;AAsCD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,GACrB,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAOvE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAa3E;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACrB,MAAM,EAAE,qBAAqB,GAC5B,kBAAkB,GAAG,SAAS,CAYhC;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAOtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAOrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAYpE;AAED,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,QAG7B,CAAC"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,8BAA8B,SAAU,CAAC;AACtD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAclD,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAShE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA6BlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAO1E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAeD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAa7E;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,qBAAqB,GAC5B,mBAAmB,GAAG,SAAS,CAYjC;AA6CD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,GACrB,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAOvE;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAa3E;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACrB,MAAM,EAAE,qBAAqB,GAC5B,kBAAkB,GAAG,SAAS,CAYhC;AAED,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAOtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CASrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CASpE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAqBtE;AAED,6BAA6B;AAC7B,eAAO,MAAM,mBAAmB,QAG9B,CAAC;AAEH,6BAA6B;AAC7B,eAAO,MAAM,kBAAkB,QAG7B,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,mBAAmB,QAK9B,CAAC"}