@nxisai/agent-harness 0.3.0 → 0.4.1
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/README.md +1 -0
- package/dist/harness/harness.d.ts +20 -0
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/harness.js +54 -2
- package/dist/harness/harness.js.map +1 -1
- package/dist/harness/tools/open-page.d.ts +72 -0
- package/dist/harness/tools/open-page.d.ts.map +1 -0
- package/dist/harness/tools/open-page.js +168 -0
- package/dist/harness/tools/open-page.js.map +1 -0
- package/dist/harness/tools/pending-action.d.ts +44 -0
- package/dist/harness/tools/pending-action.d.ts.map +1 -1
- package/dist/harness/tools/pending-action.js +83 -1
- package/dist/harness/tools/pending-action.js.map +1 -1
- package/dist/harness/tools/site-actions.d.ts +12 -0
- package/dist/harness/tools/site-actions.d.ts.map +1 -1
- package/dist/harness/tools/site-actions.js +11 -7
- package/dist/harness/tools/site-actions.js.map +1 -1
- package/dist/harness/tools/site-pages.d.ts +96 -0
- package/dist/harness/tools/site-pages.d.ts.map +1 -0
- package/dist/harness/tools/site-pages.js +222 -0
- package/dist/harness/tools/site-pages.js.map +1 -0
- package/dist/harness/tools/source.d.ts +20 -2
- package/dist/harness/tools/source.d.ts.map +1 -1
- package/dist/harness/tools/source.js +37 -3
- package/dist/harness/tools/source.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/ui/agent-fullscreen.d.ts.map +1 -1
- package/dist/ui/agent-fullscreen.js +71 -3
- package/dist/ui/agent-fullscreen.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,8 @@ import { connectMcp } from './client.js';
|
|
|
18
18
|
import { discoverMcpServer } from './discovery.js';
|
|
19
19
|
import { loadSiteActions } from './site-actions.js';
|
|
20
20
|
import { registerSiteActionTools } from './action-tools.js';
|
|
21
|
+
import { loadSitePages, mergePages, pagesFromActions } from './site-pages.js';
|
|
22
|
+
import { registerOpenPageTool, OPEN_PAGE_TOOL } from './open-page.js';
|
|
21
23
|
const READY_TIMEOUT_MS = 20000;
|
|
22
24
|
const POLL_INTERVAL_MS = 200;
|
|
23
25
|
/** The page's model context, from either of the two places it may appear. */
|
|
@@ -79,6 +81,7 @@ export async function connectTools(apiKey, opts = {}) {
|
|
|
79
81
|
remoteTools: [],
|
|
80
82
|
siteActions: [],
|
|
81
83
|
siteTools: [],
|
|
84
|
+
sitePages: [],
|
|
82
85
|
warning: 'WebMCP (document.modelContext) unavailable — no tools registered.',
|
|
83
86
|
};
|
|
84
87
|
}
|
|
@@ -106,17 +109,19 @@ async function connectRegistry(mc, apiKey, opts) {
|
|
|
106
109
|
remoteTools: [],
|
|
107
110
|
siteActions: [],
|
|
108
111
|
siteTools: [],
|
|
112
|
+
sitePages: [],
|
|
109
113
|
warning: `remote tool bootstrap failed — on-page tools still work: ${errorText(err)}`,
|
|
110
114
|
};
|
|
111
115
|
}
|
|
112
116
|
if (opts.siteActions === false) {
|
|
113
|
-
return { modelContext: mc, remoteTools, siteActions: [], siteTools: [] };
|
|
117
|
+
return { modelContext: mc, remoteTools, siteActions: [], siteTools: [], sitePages: [] };
|
|
114
118
|
}
|
|
115
119
|
try {
|
|
116
120
|
const siteOpts = typeof opts.siteActions === 'object' ? opts.siteActions : {};
|
|
117
121
|
const siteActions = await loadSiteActions(client, info, siteOpts);
|
|
118
122
|
const siteTools = await registerSiteActionTools(mc, siteActions);
|
|
119
|
-
|
|
123
|
+
const sitePages = await connectPages(mc, client, info, siteActions, siteOpts, opts.openPage);
|
|
124
|
+
return { modelContext: mc, remoteTools, siteActions, siteTools, sitePages };
|
|
120
125
|
}
|
|
121
126
|
catch (err) {
|
|
122
127
|
return {
|
|
@@ -124,15 +129,44 @@ async function connectRegistry(mc, apiKey, opts) {
|
|
|
124
129
|
remoteTools,
|
|
125
130
|
siteActions: [],
|
|
126
131
|
siteTools: [],
|
|
132
|
+
sitePages: [],
|
|
127
133
|
warning: `site actions unavailable — this page's own actions still work: ${errorText(err)}`,
|
|
128
134
|
};
|
|
129
135
|
}
|
|
130
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* The site's pages, and the tool that opens them.
|
|
139
|
+
*
|
|
140
|
+
* A failed page query is not worth a warning of its own: the pages the
|
|
141
|
+
* actions live on still make a usable list.
|
|
142
|
+
*/
|
|
143
|
+
async function connectPages(mc, client, info, actions, siteOpts, openPage) {
|
|
144
|
+
const origin = siteOpts.origin ?? location.origin;
|
|
145
|
+
let records = [];
|
|
146
|
+
try {
|
|
147
|
+
records = await loadSitePages(client, info, siteOpts);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
console.warn(`[nxis-mcp] page records unavailable, using action pages only: ${errorText(err)}`);
|
|
151
|
+
}
|
|
152
|
+
const pages = mergePages(records, pagesFromActions(actions, origin));
|
|
153
|
+
if (openPage !== false) {
|
|
154
|
+
const registered = await registerOpenPageTool(mc, pages, {
|
|
155
|
+
origin,
|
|
156
|
+
...(typeof openPage === 'object' ? openPage : {}),
|
|
157
|
+
});
|
|
158
|
+
if (registered)
|
|
159
|
+
console.info(`[nxis-mcp] ${OPEN_PAGE_TOOL}: ${pages.length} page(s)`);
|
|
160
|
+
}
|
|
161
|
+
return pages;
|
|
162
|
+
}
|
|
131
163
|
const errorText = (err) => String(err?.message || err);
|
|
132
164
|
export { discoverMcpServer, connectMcp, registerRemoteTools, loadSiteActions };
|
|
133
165
|
export { registerSiteActionTools, buildSiteActionTools, withoutShadowedTools, handoffFor, findPageTool, awaitPageTool, pageToolRef, siteToolName, selectSiteTools, } from './action-tools.js';
|
|
134
166
|
export { resumePendingAction } from './resume.js';
|
|
135
|
-
export {
|
|
167
|
+
export { loadSitePages, parsePage, pagesFromActions, mergePages, pageForEntity, findPage, } from './site-pages.js';
|
|
168
|
+
export { buildOpenPageTool, registerOpenPageTool, resolveDestination, visitFor, OPEN_PAGE_TOOL } from './open-page.js';
|
|
169
|
+
export { savePendingAction, takePendingAction, clearPendingAction, savePendingVisit, takePendingVisit, setConversationSource, } from './pending-action.js';
|
|
136
170
|
export { parseAction, samePage, sameActionPage } from './site-actions.js';
|
|
137
171
|
export { ensureModelContext, LocalModelContext } from './local-context.js';
|
|
138
172
|
//# sourceMappingURL=source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/harness/tools/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,eAAe,EAA2B,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/harness/tools/source.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,9 +51,13 @@ export { beginJourney, currentJourney, journeySteps, onJourneyChange, recordStep
|
|
|
51
51
|
export type { AgentStep, AgentStepId, AgentStepStatus } from './harness/steps.js';
|
|
52
52
|
export { resumePendingAction } from './harness/tools/resume.js';
|
|
53
53
|
export type { ResumeOutcome, ResumeOptions } from './harness/tools/resume.js';
|
|
54
|
+
export { loadSitePages, parsePage, pagesFromActions, mergePages, pageForEntity, findPage, } from './harness/tools/site-pages.js';
|
|
55
|
+
export type { SitePage, SitePagesOptions } from './harness/tools/site-pages.js';
|
|
56
|
+
export { buildOpenPageTool, registerOpenPageTool, resolveDestination, visitFor, OPEN_PAGE_TOOL } from './harness/tools/open-page.js';
|
|
57
|
+
export type { OpenPageOptions, Destination } from './harness/tools/open-page.js';
|
|
54
58
|
export type { SiteActionTool, Handoff, PageToolRef } from './harness/tools/action-tools.js';
|
|
55
|
-
export { savePendingAction, takePendingAction, clearPendingAction, PENDING_TTL_MS, } from './harness/tools/pending-action.js';
|
|
56
|
-
export type { PendingAction } from './harness/tools/pending-action.js';
|
|
59
|
+
export { savePendingAction, takePendingAction, clearPendingAction, PENDING_TTL_MS, savePendingVisit, takePendingVisit, setConversationSource, } from './harness/tools/pending-action.js';
|
|
60
|
+
export type { PendingAction, PendingVisit } from './harness/tools/pending-action.js';
|
|
57
61
|
export { loadSiteActions, parseAction } from './harness/tools/site-actions.js';
|
|
58
62
|
export type { ConnectResult, ConnectOptions, SiteActionsOptions } from './harness/tools/source.js';
|
|
59
63
|
export type { BridgeOptions } from './harness/tools/bridge.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -40,6 +40,8 @@ export { connectTools, waitForModelContext } from './harness/tools/source.js';
|
|
|
40
40
|
export { buildSiteActionTools, registerSiteActionTools, withoutShadowedTools, handoffFor, findPageTool, awaitPageTool, pageToolRef, siteToolName, sanitizeToolName, selectSiteTools, DEFAULT_SITE_TOOL_LIMIT, } from './harness/tools/action-tools.js';
|
|
41
41
|
export { beginJourney, currentJourney, journeySteps, onJourneyChange, recordStep, restoreJourney, } from './harness/steps.js';
|
|
42
42
|
export { resumePendingAction } from './harness/tools/resume.js';
|
|
43
|
-
export {
|
|
43
|
+
export { loadSitePages, parsePage, pagesFromActions, mergePages, pageForEntity, findPage, } from './harness/tools/site-pages.js';
|
|
44
|
+
export { buildOpenPageTool, registerOpenPageTool, resolveDestination, visitFor, OPEN_PAGE_TOOL } from './harness/tools/open-page.js';
|
|
45
|
+
export { savePendingAction, takePendingAction, clearPendingAction, PENDING_TTL_MS, savePendingVisit, takePendingVisit, setConversationSource, } from './harness/tools/pending-action.js';
|
|
44
46
|
export { loadSiteActions, parseAction } from './harness/tools/site-actions.js';
|
|
45
47
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,gFAAgF;AAChF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAS5F,gFAAgF;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAWvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,aAAa,CAAC;AAWrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,gFAAgF;AAChF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAS5F,gFAAgF;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAWvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,eAAe,GAChB,MAAM,aAAa,CAAC;AAWrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,UAAU,EACV,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EACL,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGrI,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-fullscreen.d.ts","sourceRoot":"","sources":["../../src/ui/agent-fullscreen.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-fullscreen.d.ts","sourceRoot":"","sources":["../../src/ui/agent-fullscreen.ts"],"names":[],"mappings":"AAyFA,OAAO,KAAK,EAAc,oBAAoB,EAA4B,MAAM,aAAa,CAAC;AA2K9F;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,sEAAsE;IACtE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1C,qCAAqC;IACrC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+CAA+C;IAC/C,IAAI,IAAI,MAAM,EAAE,CAAC;IACjB,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;CAClB;AA4ED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -36,7 +36,10 @@ import { extractResult, missingRequired, toolSchema, } from '../harness/tools/sc
|
|
|
36
36
|
import { connectTools } from '../harness/tools/source.js';
|
|
37
37
|
import { handoffFor, isSiteTool, withoutSiteSuffix, HANDOFF_RESULT, } from '../harness/tools/action-tools.js';
|
|
38
38
|
import { resumePendingAction } from '../harness/tools/resume.js';
|
|
39
|
-
import {
|
|
39
|
+
import { savePendingVisit, setConversationSource, takePendingVisit } from '../harness/tools/pending-action.js';
|
|
40
|
+
import { pageForEntity } from '../harness/tools/site-pages.js';
|
|
41
|
+
import { OPEN_PAGE_TOOL } from '../harness/tools/open-page.js';
|
|
42
|
+
import { onJourneyChange, recordStep, restoreJourney } from '../harness/steps.js';
|
|
40
43
|
import { viewJourney } from './journey.js';
|
|
41
44
|
import { AgentCoordinator } from '../harness/router/coordinator.js';
|
|
42
45
|
import { LocalGemmaProvider, humanize, escapeHtml, NXIS_LOGO_SVG, NXIS_SITE_URL, ICON_CHECK, ICON_WARN, ICON_ARROW, ICON_PLUS, ICON_MENU, ICON_TRASH, ICON_STOP, ICON_COPY, ICON_PENCIL, ICON_REDO, ICON_CHECK_MARK, } from '../engine.js';
|
|
@@ -231,6 +234,8 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
231
234
|
this._stage = '';
|
|
232
235
|
/** The one discovery run, kicked off on first open and awaited before a turn. */
|
|
233
236
|
this._connect = null;
|
|
237
|
+
/** The site's pages, for linking results to where they came from. */
|
|
238
|
+
this._sitePages = [];
|
|
234
239
|
this._loadPct = 0;
|
|
235
240
|
/**
|
|
236
241
|
* Which mode the empty state is currently drawn in, or null when a
|
|
@@ -346,9 +351,13 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
346
351
|
const cards = this._els.thread.querySelectorAll('.journey.is-running');
|
|
347
352
|
cards[cards.length - 1]?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
|
|
348
353
|
});
|
|
354
|
+
// Whoever builds the tools, a call that leaves this page reports back to
|
|
355
|
+
// the thread it was made in.
|
|
356
|
+
setConversationSource(() => this._activeId ?? undefined);
|
|
349
357
|
// A form confirmed on another page submits here, now that the page it
|
|
350
358
|
// belongs to is the one open.
|
|
351
359
|
void this._resumePendingAction();
|
|
360
|
+
this._resumePendingVisit();
|
|
352
361
|
this._els.launcher.addEventListener('click', () => this._open());
|
|
353
362
|
this._els.close.addEventListener('click', () => {
|
|
354
363
|
this._els.overlay.classList.remove('show');
|
|
@@ -1818,7 +1827,9 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
1818
1827
|
}
|
|
1819
1828
|
}
|
|
1820
1829
|
const id = entity['@id'] != null ? str(entity['@id']) : undefined;
|
|
1821
|
-
|
|
1830
|
+
const found = pageForEntity(entity, this._sitePages, location.origin);
|
|
1831
|
+
const page = found ? { url: found.url, label: found.name } : undefined;
|
|
1832
|
+
return { title, type, rating, emergency, sub, rows, id, ...(page ? { page } : {}) };
|
|
1822
1833
|
}
|
|
1823
1834
|
_buildResultsItem(tool, res) {
|
|
1824
1835
|
const items = this._extractItems(res);
|
|
@@ -1915,10 +1926,22 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
1915
1926
|
${c.sub ? `<div class="rc-sub" title="${escapeHtml(c.sub)}">${escapeHtml(c.sub)}</div>` : ''}
|
|
1916
1927
|
${rows ? `<dl class="rc-list">${rows}</dl>` : ''}
|
|
1917
1928
|
${c.id ? `<div class="rc-id"><code>${escapeHtml(c.id)}</code></div>` : ''}
|
|
1929
|
+
${c.page
|
|
1930
|
+
? `<a class="rc-open" href="${escapeHtml(c.page.url)}" data-label="${escapeHtml(c.page.label)}" ` +
|
|
1931
|
+
`title="${escapeHtml(c.page.url)}">Open page<span aria-hidden="true">→</span></a>`
|
|
1932
|
+
: ''}
|
|
1918
1933
|
</div>`;
|
|
1919
1934
|
})
|
|
1920
1935
|
.join('');
|
|
1921
1936
|
wrap.innerHTML = `<div class="rc-head">${escapeHtml(item.note)}</div><div class="rc-cards">${cardsHtml}</div>`;
|
|
1937
|
+
// An ordinary link, so it opens in a new tab when asked to. Followed in
|
|
1938
|
+
// this one, the conversation goes with it.
|
|
1939
|
+
wrap.addEventListener('click', (e) => {
|
|
1940
|
+
const link = e.target.closest('a.rc-open');
|
|
1941
|
+
if (!link || e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
|
|
1942
|
+
return;
|
|
1943
|
+
savePendingVisit({ pageUrl: link.href, label: link.dataset.label ?? '', conversationId: this._activeId ?? undefined });
|
|
1944
|
+
});
|
|
1922
1945
|
return wrap;
|
|
1923
1946
|
}
|
|
1924
1947
|
// ── Metrics panel (real Gemma tokenizer counts vs a RAG estimate) ──────────
|
|
@@ -2333,6 +2356,45 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
2333
2356
|
*
|
|
2334
2357
|
* Nothing waiting is the ordinary case, and costs a single storage read.
|
|
2335
2358
|
*/
|
|
2359
|
+
/**
|
|
2360
|
+
* Continue the conversation that opened this page, and say it is open.
|
|
2361
|
+
*
|
|
2362
|
+
* Reached when the agent opened it or a result card's link was followed.
|
|
2363
|
+
* The thread is the one the visitor was in: by id, or failing that the one
|
|
2364
|
+
* holding the journey that left, so a visit saved without an id still
|
|
2365
|
+
* lands where it started rather than in whichever thread loaded first.
|
|
2366
|
+
*/
|
|
2367
|
+
_resumePendingVisit() {
|
|
2368
|
+
const visit = takePendingVisit();
|
|
2369
|
+
if (!visit)
|
|
2370
|
+
return;
|
|
2371
|
+
const journey = visit.steps?.find((s) => s.journey)?.journey;
|
|
2372
|
+
const conv = this._conversations.find((c) => c.id === visit.conversationId) ??
|
|
2373
|
+
(journey
|
|
2374
|
+
? this._conversations.find((c) => c.items.some((it) => it.kind === 'journey' && it.id === journey))
|
|
2375
|
+
: undefined) ??
|
|
2376
|
+
this._active();
|
|
2377
|
+
if (!conv)
|
|
2378
|
+
return;
|
|
2379
|
+
this._activeId = conv.id;
|
|
2380
|
+
this._renderHistory();
|
|
2381
|
+
this._renderThread();
|
|
2382
|
+
// Finished before the line below, so the card reads done above it.
|
|
2383
|
+
if (visit.steps?.length) {
|
|
2384
|
+
restoreJourney(visit.steps);
|
|
2385
|
+
recordStep({ id: 'navigate', label: `Opened ${visit.label}`, status: 'done' });
|
|
2386
|
+
recordStep({ id: 'submit', label: 'Arrived', status: 'done' });
|
|
2387
|
+
}
|
|
2388
|
+
const label = visit.label || 'the page';
|
|
2389
|
+
this._appendMsg('assistant', `You're on ${label} now.`);
|
|
2390
|
+
// What the model needs to know to answer "what is on this page".
|
|
2391
|
+
conv.messages.push({ role: 'user', content: `[${OPEN_PAGE_TOOL} opened ${label}: ${visit.pageUrl}]` });
|
|
2392
|
+
this._saveConversations();
|
|
2393
|
+
this._scroll();
|
|
2394
|
+
// Covering the page just opened would hide what was asked for.
|
|
2395
|
+
if (this.mode !== 'fullscreen')
|
|
2396
|
+
this._open();
|
|
2397
|
+
}
|
|
2336
2398
|
async _resumePendingAction() {
|
|
2337
2399
|
const outcome = await resumePendingAction({
|
|
2338
2400
|
onStart: (pending) => {
|
|
@@ -2418,7 +2480,8 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
2418
2480
|
timeout: 4000,
|
|
2419
2481
|
siteActions: this.getAttribute('site-actions') !== 'false',
|
|
2420
2482
|
})
|
|
2421
|
-
.then(({ remoteTools, siteActions, siteTools, warning }) => {
|
|
2483
|
+
.then(({ remoteTools, siteActions, siteTools, sitePages, warning }) => {
|
|
2484
|
+
this._sitePages = sitePages;
|
|
2422
2485
|
if (warning)
|
|
2423
2486
|
console.warn('[nxis-agent]', warning);
|
|
2424
2487
|
if (remoteTools.length) {
|
|
@@ -3455,6 +3518,11 @@ class NxisAgentFullscreen extends HTMLElement {
|
|
|
3455
3518
|
.resultcard:hover .rc-title, .resultcard:focus-within .rc-title { white-space: normal; overflow: visible; }
|
|
3456
3519
|
.resultcard:hover .rc-sub, .resultcard:focus-within .rc-sub { -webkit-line-clamp: unset; overflow: visible; }
|
|
3457
3520
|
.rc-id { margin-top: 10px; min-width: 0; }
|
|
3521
|
+
.rc-open { display: inline-flex; align-items: center; gap: 6px; margin-top: 10px; font-size: 13px; font-weight: 600; color: var(--blue-strong); text-decoration: none; }
|
|
3522
|
+
.rc-open span { transition: transform 120ms ease; }
|
|
3523
|
+
.rc-open:hover { text-decoration: underline; }
|
|
3524
|
+
.rc-open:hover span { transform: translateX(2px); }
|
|
3525
|
+
.rc-open:focus-visible { outline: 2px solid var(--blue-strong); outline-offset: 2px; border-radius: 4px; }
|
|
3458
3526
|
.rc-id code { display: block; font-family: var(--mono); font-size: 10px; color: var(--blue-strong); background: var(--inline-bg); border: 1px solid var(--border); border-radius: 6px; padding: 3px 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
3459
3527
|
.rc-row dd a { color: var(--blue-strong); text-decoration: none; }
|
|
3460
3528
|
.rc-row dd a:hover { text-decoration: underline; }
|