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.
- package/dist/core/Agent.js +13 -4
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/stages/seed.js +38 -6
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +13 -4
- package/dist/esm/core/Agent.js +13 -4
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.d.ts +11 -0
- package/dist/esm/core/agent/stages/seed.js +38 -6
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.d.ts +3 -2
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +35 -4
- package/dist/esm/core/tools.d.ts +5 -2
- package/dist/esm/core/tools.js.map +1 -1
- package/dist/esm/hosting/browserSession.d.ts +97 -0
- package/dist/esm/hosting/browserSession.js +171 -0
- package/dist/esm/hosting/browserSession.js.map +1 -0
- package/dist/esm/hosting/httpHost.d.ts +14 -0
- package/dist/esm/hosting/httpHost.js +34 -6
- package/dist/esm/hosting/httpHost.js.map +1 -1
- package/dist/esm/hosting/index.d.ts +9 -3
- package/dist/esm/hosting/index.js +13 -1
- package/dist/esm/hosting/index.js.map +1 -1
- package/dist/esm/hosting/nodeHost.d.ts +73 -2
- package/dist/esm/hosting/nodeHost.js +110 -35
- package/dist/esm/hosting/nodeHost.js.map +1 -1
- package/dist/esm/hosting/standingAgent.d.ts +58 -14
- package/dist/esm/hosting/standingAgent.js +361 -88
- package/dist/esm/hosting/standingAgent.js.map +1 -1
- package/dist/esm/hosting/types.d.ts +112 -9
- package/dist/esm/hosting/types.js +3 -1
- package/dist/esm/hosting/types.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/hosting/browserSession.js +175 -0
- package/dist/hosting/browserSession.js.map +1 -0
- package/dist/hosting/httpHost.js +34 -6
- package/dist/hosting/httpHost.js.map +1 -1
- package/dist/hosting/index.js +16 -1
- package/dist/hosting/index.js.map +1 -1
- package/dist/hosting/nodeHost.js +112 -36
- package/dist/hosting/nodeHost.js.map +1 -1
- package/dist/hosting/standingAgent.js +361 -88
- package/dist/hosting/standingAgent.js.map +1 -1
- package/dist/hosting/types.js +4 -0
- package/dist/hosting/types.js.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/types/core/Agent.d.ts +13 -4
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts +11 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts +3 -2
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +35 -4
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/tools.d.ts +5 -2
- package/dist/types/core/tools.d.ts.map +1 -1
- package/dist/types/hosting/browserSession.d.ts +98 -0
- package/dist/types/hosting/browserSession.d.ts.map +1 -0
- package/dist/types/hosting/httpHost.d.ts +14 -0
- package/dist/types/hosting/httpHost.d.ts.map +1 -1
- package/dist/types/hosting/index.d.ts +9 -3
- package/dist/types/hosting/index.d.ts.map +1 -1
- package/dist/types/hosting/nodeHost.d.ts +73 -2
- package/dist/types/hosting/nodeHost.d.ts.map +1 -1
- package/dist/types/hosting/standingAgent.d.ts +58 -14
- package/dist/types/hosting/standingAgent.d.ts.map +1 -1
- package/dist/types/hosting/types.d.ts +112 -9
- package/dist/types/hosting/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/hosting/nodeHost.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
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":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;;;AAEH,+CAMuB;
|
|
1
|
+
{"version":3,"file":"nodeHost.js","sourceRoot":"","sources":["../../src/hosting/nodeHost.ts"],"names":[],"mappings":"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"}
|