agentfootprint 9.9.0 → 9.10.0

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 (77) hide show
  1. package/dist/core/Agent.js +13 -4
  2. package/dist/core/Agent.js.map +1 -1
  3. package/dist/core/agent/stages/seed.js +38 -6
  4. package/dist/core/agent/stages/seed.js.map +1 -1
  5. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  6. package/dist/core/tools.js.map +1 -1
  7. package/dist/esm/core/Agent.d.ts +13 -4
  8. package/dist/esm/core/Agent.js +13 -4
  9. package/dist/esm/core/Agent.js.map +1 -1
  10. package/dist/esm/core/agent/stages/seed.d.ts +11 -0
  11. package/dist/esm/core/agent/stages/seed.js +38 -6
  12. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  13. package/dist/esm/core/agent/stages/toolCalls.d.ts +3 -2
  14. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  15. package/dist/esm/core/agent/types.d.ts +35 -4
  16. package/dist/esm/core/tools.d.ts +5 -2
  17. package/dist/esm/core/tools.js.map +1 -1
  18. package/dist/esm/hosting/browserSession.d.ts +97 -0
  19. package/dist/esm/hosting/browserSession.js +171 -0
  20. package/dist/esm/hosting/browserSession.js.map +1 -0
  21. package/dist/esm/hosting/httpHost.d.ts +14 -0
  22. package/dist/esm/hosting/httpHost.js +34 -6
  23. package/dist/esm/hosting/httpHost.js.map +1 -1
  24. package/dist/esm/hosting/index.d.ts +9 -3
  25. package/dist/esm/hosting/index.js +13 -1
  26. package/dist/esm/hosting/index.js.map +1 -1
  27. package/dist/esm/hosting/nodeHost.d.ts +73 -2
  28. package/dist/esm/hosting/nodeHost.js +110 -35
  29. package/dist/esm/hosting/nodeHost.js.map +1 -1
  30. package/dist/esm/hosting/standingAgent.d.ts +58 -14
  31. package/dist/esm/hosting/standingAgent.js +361 -88
  32. package/dist/esm/hosting/standingAgent.js.map +1 -1
  33. package/dist/esm/hosting/types.d.ts +112 -9
  34. package/dist/esm/hosting/types.js +3 -1
  35. package/dist/esm/hosting/types.js.map +1 -1
  36. package/dist/esm/index.d.ts +1 -0
  37. package/dist/esm/index.js +6 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/hosting/browserSession.js +175 -0
  40. package/dist/hosting/browserSession.js.map +1 -0
  41. package/dist/hosting/httpHost.js +34 -6
  42. package/dist/hosting/httpHost.js.map +1 -1
  43. package/dist/hosting/index.js +16 -1
  44. package/dist/hosting/index.js.map +1 -1
  45. package/dist/hosting/nodeHost.js +112 -36
  46. package/dist/hosting/nodeHost.js.map +1 -1
  47. package/dist/hosting/standingAgent.js +361 -88
  48. package/dist/hosting/standingAgent.js.map +1 -1
  49. package/dist/hosting/types.js +4 -0
  50. package/dist/hosting/types.js.map +1 -1
  51. package/dist/index.js +10 -2
  52. package/dist/index.js.map +1 -1
  53. package/dist/types/core/Agent.d.ts +13 -4
  54. package/dist/types/core/Agent.d.ts.map +1 -1
  55. package/dist/types/core/agent/stages/seed.d.ts +11 -0
  56. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  57. package/dist/types/core/agent/stages/toolCalls.d.ts +3 -2
  58. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  59. package/dist/types/core/agent/types.d.ts +35 -4
  60. package/dist/types/core/agent/types.d.ts.map +1 -1
  61. package/dist/types/core/tools.d.ts +5 -2
  62. package/dist/types/core/tools.d.ts.map +1 -1
  63. package/dist/types/hosting/browserSession.d.ts +98 -0
  64. package/dist/types/hosting/browserSession.d.ts.map +1 -0
  65. package/dist/types/hosting/httpHost.d.ts +14 -0
  66. package/dist/types/hosting/httpHost.d.ts.map +1 -1
  67. package/dist/types/hosting/index.d.ts +9 -3
  68. package/dist/types/hosting/index.d.ts.map +1 -1
  69. package/dist/types/hosting/nodeHost.d.ts +73 -2
  70. package/dist/types/hosting/nodeHost.d.ts.map +1 -1
  71. package/dist/types/hosting/standingAgent.d.ts +58 -14
  72. package/dist/types/hosting/standingAgent.d.ts.map +1 -1
  73. package/dist/types/hosting/types.d.ts +112 -9
  74. package/dist/types/hosting/types.d.ts.map +1 -1
  75. package/dist/types/index.d.ts +1 -0
  76. package/dist/types/index.d.ts.map +1 -1
  77. package/package.json +1 -1
@@ -48,49 +48,117 @@
48
48
  * throws does. `types.ts` knows none of it either way.
49
49
  */
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.nodeHost = exports.jsonWire = void 0;
51
+ exports.nodeHost = exports.jsonWire = exports.jsonWireWith = exports.DEFAULT_SESSION_HEADER = void 0;
52
52
  const httpHost_js_1 = require("./httpHost.js");
53
53
  const HOST_NAME = 'nodeHost';
54
+ /** The header this dialect reads a session id from when nobody says otherwise. */
55
+ exports.DEFAULT_SESSION_HEADER = 'x-session-id';
54
56
  /**
55
- * This adapter's own JSON dialect: `{ input, sessionId? }` in, `{ output }`
56
- * out, `{ status: 'ok', uptimeMs }` on the health path.
57
+ * Build this adapter's JSON dialect: `{ input, sessionId? }` in, `{ output }`
58
+ * out, `{ status: 'ok', uptimeMs }` on the health path — with the session
59
+ * plumbing a deployment gets to re-decide.
57
60
  *
58
61
  * Exported by name so a deployment that has to keep these exact bodies while
59
62
  * changing something else about the host reuses them rather than retyping them
60
63
  * and getting one field subtly wrong.
61
64
  */
62
- exports.jsonWire = {
63
- readRequest(facts) {
64
- const input = typeof facts.body.input === 'string' ? facts.body.input : '';
65
- // sessionId is caller data whichever way it arrives; the body wins so a
66
- // caller that sets both is not surprised by which one the server preferred.
67
- const fromBody = typeof facts.body.sessionId === 'string' ? facts.body.sessionId : undefined;
68
- const sessionId = fromBody ?? facts.headers['x-session-id'];
69
- // Read as-is and never coerced: `decision` is a person's answer to whatever
70
- // a tool asked, and this dialect does not get to decide what that looks
71
- // like. Its PRESENCE is the whole signal.
72
- const decision = facts.body.decision;
73
- return {
74
- input,
75
- ...(sessionId !== undefined && { sessionId }),
76
- ...(decision !== undefined && { decision }),
77
- };
78
- },
79
- health: (uptimeMs) => ({ status: 'ok', uptimeMs }),
80
- output: (output) => ({ output }),
81
- failure: (error, code) => ({ error, ...(code !== undefined && { code }) }),
82
- chunk: (text) => ({ text }),
83
- awaiting: (pending) => ({ awaiting: pending }),
84
- readConversation(facts) {
85
- // A handshake has no body, so this dialect names the two places a session
86
- // id can be: the header a server-side caller sets, and the query a BROWSER
87
- // has to use because the WebSocket API gives it no way to set a header.
88
- // Header wins, so a caller that sets both is not surprised by which one the
89
- // server preferred — the same rule the request dialect uses for body-vs-header.
90
- const sessionId = (0, httpHost_js_1.headerValue)(facts, 'x-session-id') ?? facts.query.get('sessionId') ?? undefined;
91
- return { ...(sessionId !== undefined && sessionId.length > 0 && { sessionId }) };
92
- },
93
- };
65
+ function jsonWireWith(options = {}) {
66
+ const sessionHeader = options.sessionHeader ?? exports.DEFAULT_SESSION_HEADER;
67
+ const sessionCookie = options.sessionCookie;
68
+ return {
69
+ readRequest(facts) {
70
+ const input = typeof facts.body.input === 'string' ? facts.body.input : '';
71
+ // sessionId is caller data whichever way it arrives; the body wins so a
72
+ // caller that sets both is not surprised by which one the server preferred.
73
+ // The cookie is last, because a caller that named a session explicitly
74
+ // meant that one — the cookie is what the BROWSER remembered, and the
75
+ // explicit value is what this request said.
76
+ const fromBody = typeof facts.body.sessionId === 'string' ? facts.body.sessionId : undefined;
77
+ const fromHeader = (0, httpHost_js_1.headerValue)(facts, sessionHeader);
78
+ const fromCookie = sessionCookie !== undefined ? cookieValue(facts.headers.cookie, sessionCookie) : undefined;
79
+ const carried = fromBody ?? fromHeader ?? fromCookie;
80
+ // Issued ONLY in cookie mode, and only when this request carried no
81
+ // session at all. A caller holding a session already has a conversation;
82
+ // handing it a second handle would split it in two.
83
+ const minted = sessionCookie !== undefined && carried === undefined ? mintSessionId() : undefined;
84
+ const sessionId = carried ?? minted;
85
+ // Read as-is and never coerced: `decision` is a person's answer to whatever
86
+ // a tool asked, and this dialect does not get to decide what that looks
87
+ // like. Its PRESENCE is the whole signal.
88
+ const decision = facts.body.decision;
89
+ return {
90
+ input,
91
+ ...(sessionId !== undefined && { sessionId }),
92
+ ...(decision !== undefined && { decision }),
93
+ ...(minted !== undefined &&
94
+ sessionCookie !== undefined && {
95
+ responseHeaders: { 'set-cookie': sessionCookieHeader(sessionCookie, minted) },
96
+ }),
97
+ };
98
+ },
99
+ health: (uptimeMs) => ({ status: 'ok', uptimeMs }),
100
+ output: (output) => ({ output }),
101
+ failure: (error, code) => ({ error, ...(code !== undefined && { code }) }),
102
+ chunk: (text) => ({ text }),
103
+ awaiting: (pending) => ({ awaiting: pending }),
104
+ readConversation(facts) {
105
+ // A handshake has no body, so this dialect names the three places a
106
+ // session id can be: the header a server-side caller sets, the cookie the
107
+ // browser sends on its own (when cookie mode is on), and the query a
108
+ // BROWSER has to use because the WebSocket API gives it no way to set a
109
+ // header. Header wins, so a caller that sets both is not surprised by
110
+ // which one the server preferred — the same rule the request dialect uses
111
+ // for body-vs-header.
112
+ //
113
+ // Nothing is MINTED here, in either mode: the 101 this door writes is not
114
+ // a reply a wire composes, so a session issued on a handshake could never
115
+ // reach the client and would be a conversation nobody could resume.
116
+ const sessionId = (0, httpHost_js_1.headerValue)(facts, sessionHeader) ??
117
+ (sessionCookie !== undefined
118
+ ? cookieValue(facts.headers.cookie, sessionCookie)
119
+ : undefined) ??
120
+ facts.query.get('sessionId') ??
121
+ undefined;
122
+ return { ...(sessionId !== undefined && sessionId.length > 0 && { sessionId }) };
123
+ },
124
+ };
125
+ }
126
+ exports.jsonWireWith = jsonWireWith;
127
+ /**
128
+ * This adapter's own JSON dialect with its defaults: the session on
129
+ * `x-session-id`, no cookie.
130
+ */
131
+ exports.jsonWire = jsonWireWith();
132
+ /**
133
+ * One cookie's value out of a `Cookie` header, or `undefined`.
134
+ *
135
+ * Deliberately small: it splits on `;`, takes the first `=`, and trims. It does
136
+ * not decode, because a session id this library minted is URL-safe and a value
137
+ * somebody else's system minted is theirs to interpret — guessing at an
138
+ * encoding is how a session id silently becomes a different string.
139
+ */
140
+ function cookieValue(header, name) {
141
+ if (header === undefined || header.length === 0)
142
+ return undefined;
143
+ for (const pair of header.split(';')) {
144
+ const at = pair.indexOf('=');
145
+ if (at < 0)
146
+ continue;
147
+ if (pair.slice(0, at).trim() !== name)
148
+ continue;
149
+ const value = pair.slice(at + 1).trim();
150
+ return value.length > 0 ? value : undefined;
151
+ }
152
+ return undefined;
153
+ }
154
+ /** The `Set-Cookie` this dialect issues. See {@link JsonWireOptions.sessionCookie}. */
155
+ function sessionCookieHeader(name, value) {
156
+ return `${name}=${value}; Path=/; HttpOnly; SameSite=Lax`;
157
+ }
158
+ /** A session id for a caller that carried none. Node 20+ has global `crypto`. */
159
+ function mintSessionId() {
160
+ return globalThis.crypto.randomUUID();
161
+ }
94
162
  /**
95
163
  * An HTTP host for one handler.
96
164
  *
@@ -104,9 +172,17 @@ exports.jsonWire = {
104
172
  * await handle.close();
105
173
  */
106
174
  function nodeHost(options = {}) {
175
+ // The shared default instance when nothing about sessions was re-decided, so
176
+ // a host built with no options is the same object graph it always was.
177
+ const wire = options.sessionHeader === undefined && options.sessionCookie === undefined
178
+ ? exports.jsonWire
179
+ : jsonWireWith({
180
+ ...(options.sessionHeader !== undefined && { sessionHeader: options.sessionHeader }),
181
+ ...(options.sessionCookie !== undefined && { sessionCookie: options.sessionCookie }),
182
+ });
107
183
  return (0, httpHost_js_1.httpHost)({
108
184
  name: HOST_NAME,
109
- wire: exports.jsonWire,
185
+ wire,
110
186
  // Chosen, not inherited — see the test in this folder that greps for one
111
187
  // particular runtime's container-contract path literal.
112
188
  invokePath: options.invokePath ?? '/invoke',
@@ -1 +1 @@
1
- {"version":3,"file":"nodeHost.js","sourceRoot":"","sources":["../../src/hosting/nodeHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodeHost.js","sourceRoot":"","sources":["../../src/hosting/nodeHost.ts"],"names":[],"mappings":"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"}