@hyperdrive.bot/paseo-server 0.3.43 → 0.3.44
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/server/server/agent/agent-manager.d.ts +6 -0
- package/dist/server/server/agent/agent-manager.js +7 -1
- package/dist/server/server/agent/import-sessions.d.ts +6 -1
- package/dist/server/server/agent/import-sessions.js +27 -2
- package/dist/server/server/agent/providers/claude/agent.d.ts +16 -0
- package/dist/server/server/agent/providers/claude/agent.js +21 -2
- package/dist/server/server/agent/providers/claude/background-work-kinds.d.ts +20 -0
- package/dist/server/server/agent/providers/claude/background-work-kinds.js +14 -0
- package/dist/server/web-ui/_expo/static/js/web/{index-2ff48a7009ad2309c577d5a43b925f69.js → index-6a99048b3a9acca9bc30efd44300414e.js} +4 -4
- package/dist/server/web-ui/_expo/static/js/web/index-6a99048b3a9acca9bc30efd44300414e.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/{index-2ff48a7009ad2309c577d5a43b925f69.js.gz → index-6a99048b3a9acca9bc30efd44300414e.js.gz} +0 -0
- package/dist/server/web-ui/_expo/static/js/web/{index-2ff48a7009ad2309c577d5a43b925f69.js.map.br → index-6a99048b3a9acca9bc30efd44300414e.js.map.br} +0 -0
- package/dist/server/web-ui/_expo/static/js/web/{index-2ff48a7009ad2309c577d5a43b925f69.js.map.gz → index-6a99048b3a9acca9bc30efd44300414e.js.map.gz} +0 -0
- package/dist/server/web-ui/index.html +1 -1
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/package.json +6 -6
- package/dist/server/web-ui/_expo/static/js/web/index-2ff48a7009ad2309c577d5a43b925f69.js.br +0 -0
|
@@ -322,6 +322,12 @@ export declare class AgentManager {
|
|
|
322
322
|
cwd: string;
|
|
323
323
|
workspaceId: string;
|
|
324
324
|
labels?: Record<string, string>;
|
|
325
|
+
/**
|
|
326
|
+
* Config carried over from a previous agent record for the same provider
|
|
327
|
+
* session. Without it an import falls back to daemon defaults, which can
|
|
328
|
+
* demote a session to a smaller-context model and force a compaction.
|
|
329
|
+
*/
|
|
330
|
+
config?: Partial<AgentSessionConfig>;
|
|
325
331
|
}): Promise<ManagedAgent>;
|
|
326
332
|
/**
|
|
327
333
|
* Hot-swap a running agent's provider to a compatible alternative
|
|
@@ -614,6 +614,7 @@ export class AgentManager {
|
|
|
614
614
|
throw new Error(`Provider '${input.provider}' does not support importing sessions`);
|
|
615
615
|
}
|
|
616
616
|
const { storedConfig, launchConfig } = await this.prepareSessionConfig({
|
|
617
|
+
...input.config,
|
|
617
618
|
provider: input.provider,
|
|
618
619
|
cwd: input.cwd,
|
|
619
620
|
}, resolvedAgentId);
|
|
@@ -2827,7 +2828,12 @@ export class AgentManager {
|
|
|
2827
2828
|
const activeBackgroundTaskCount = this.getActiveBackgroundTaskCount(agent);
|
|
2828
2829
|
if (activeBackgroundTaskCount > 0) {
|
|
2829
2830
|
agent.suppressedAttentionCount = (agent.suppressedAttentionCount ?? 0) + 1;
|
|
2830
|
-
this
|
|
2831
|
+
// info, not debug: this is the ONLY production signal that the
|
|
2832
|
+
// suppression fired. The daemon logs at level 30 and emits zero debug
|
|
2833
|
+
// lines, so at debug this was unobservable — and an absent log then
|
|
2834
|
+
// looked identical to a working feature. Verify with:
|
|
2835
|
+
// journalctl -u paseo.service | grep "Suppressed finished-attention"
|
|
2836
|
+
this.logger.info({
|
|
2831
2837
|
agentId: agent.id,
|
|
2832
2838
|
activeBackgroundTaskCount,
|
|
2833
2839
|
suppressedAttentionCount: agent.suppressedAttentionCount,
|
|
@@ -2,7 +2,7 @@ import type { z } from "zod";
|
|
|
2
2
|
import type { Logger } from "pino";
|
|
3
3
|
import type { ProviderSnapshotManager } from "./provider-snapshot-manager.js";
|
|
4
4
|
import type { AgentManager, ManagedAgent } from "./agent-manager.js";
|
|
5
|
-
import type { AgentStorage } from "./agent-storage.js";
|
|
5
|
+
import type { AgentStorage, StoredAgentRecord } from "./agent-storage.js";
|
|
6
6
|
import type { AgentProvider } from "./agent-sdk-types.js";
|
|
7
7
|
import type { FetchRecentProviderSessionsRequestMessage, ImportAgentRequestMessageSchema, RecentProviderSessionDescriptorPayload } from "@hyperdrive.bot/paseo-protocol/messages";
|
|
8
8
|
type ImportAgentRequestMessage = z.infer<typeof ImportAgentRequestMessageSchema>;
|
|
@@ -43,5 +43,10 @@ export declare function normalizeImportAgentRequest(msg: ImportAgentRequestMessa
|
|
|
43
43
|
};
|
|
44
44
|
export declare function listImportableProviderSessions(input: ListImportableProviderSessionsInput): Promise<ListImportableProviderSessionsResult>;
|
|
45
45
|
export declare function importProviderSession(input: ImportProviderSessionInput): Promise<ImportProviderSessionResult>;
|
|
46
|
+
export declare function inheritedImportConfig(record: StoredAgentRecord | undefined): {
|
|
47
|
+
model?: string;
|
|
48
|
+
thinkingOptionId?: string;
|
|
49
|
+
modeId?: string;
|
|
50
|
+
} | undefined;
|
|
46
51
|
export {};
|
|
47
52
|
//# sourceMappingURL=import-sessions.d.ts.map
|
|
@@ -72,13 +72,18 @@ export async function importProviderSession(input) {
|
|
|
72
72
|
throw new Error("Import requires cwd from the selected provider session");
|
|
73
73
|
}
|
|
74
74
|
const handle = buildImportPersistenceHandle({ provider, providerHandleId, cwd });
|
|
75
|
-
await unarchiveAgentByHandle(input.agentStorage, input.agentManager, handle);
|
|
75
|
+
const priorRecord = await unarchiveAgentByHandle(input.agentStorage, input.agentManager, handle);
|
|
76
|
+
const inheritedConfig = inheritedImportConfig(priorRecord);
|
|
77
|
+
if (inheritedConfig) {
|
|
78
|
+
input.logger?.info?.({ providerHandleId, ...inheritedConfig }, "Import inheriting config from the session's previous agent record");
|
|
79
|
+
}
|
|
76
80
|
const snapshot = await input.agentManager.importProviderSession({
|
|
77
81
|
provider,
|
|
78
82
|
providerHandleId,
|
|
79
83
|
cwd,
|
|
80
84
|
workspaceId: input.workspaceId,
|
|
81
85
|
labels,
|
|
86
|
+
...(inheritedConfig ? { config: inheritedConfig } : {}),
|
|
82
87
|
});
|
|
83
88
|
await unarchiveAgentState(input.agentStorage, input.agentManager, snapshot.id);
|
|
84
89
|
return {
|
|
@@ -92,9 +97,29 @@ async function unarchiveAgentByHandle(agentStorage, agentManager, handle) {
|
|
|
92
97
|
(record.persistence.sessionId === handle.sessionId ||
|
|
93
98
|
record.persistence.nativeHandle === handle.nativeHandle));
|
|
94
99
|
if (!matched) {
|
|
95
|
-
return;
|
|
100
|
+
return undefined;
|
|
96
101
|
}
|
|
97
102
|
await unarchiveAgentState(agentStorage, agentManager, matched.id);
|
|
103
|
+
return matched;
|
|
104
|
+
}
|
|
105
|
+
// An import that lands on a session paseo has seen before must not silently
|
|
106
|
+
// downgrade it. The prior record already carries the model, thinking option and
|
|
107
|
+
// permission mode the session was running under; without this the imported agent
|
|
108
|
+
// falls back to daemon defaults, which has demoted a 1M-context session to the
|
|
109
|
+
// 200k model and auto-compacted its transcript on the first prompt.
|
|
110
|
+
export function inheritedImportConfig(record) {
|
|
111
|
+
if (!record) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const modeId = record.lastModeId ?? record.config?.modeId ?? undefined;
|
|
115
|
+
const inherited = {
|
|
116
|
+
...(record.config?.model ? { model: record.config.model } : {}),
|
|
117
|
+
...(record.config?.thinkingOptionId
|
|
118
|
+
? { thinkingOptionId: record.config.thinkingOptionId }
|
|
119
|
+
: {}),
|
|
120
|
+
...(modeId ? { modeId } : {}),
|
|
121
|
+
};
|
|
122
|
+
return Object.keys(inherited).length > 0 ? inherited : undefined;
|
|
98
123
|
}
|
|
99
124
|
function parseRecentProviderSessionsSince(since) {
|
|
100
125
|
if (!since) {
|
|
@@ -79,6 +79,22 @@ export declare class ClaudeAgentClient implements AgentClient {
|
|
|
79
79
|
}>;
|
|
80
80
|
private assertConfig;
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Tool names whose tool_result can ANNOUNCE background work that outlives the turn.
|
|
84
|
+
*
|
|
85
|
+
* This gate is the reason the tracker sees anything at all. It was previously
|
|
86
|
+
* `toolName !== "Bash"`, which made the monitor and cron start-patterns in
|
|
87
|
+
* `background-task-tracker.ts` unreachable: a `Monitor` tool_result returned
|
|
88
|
+
* here before `noteToolResultText` was ever called, so a monitor-only session
|
|
89
|
+
* reported zero background tasks, bucketed as "done", and kept lighting the
|
|
90
|
+
* unread chip on every tick.
|
|
91
|
+
*
|
|
92
|
+
* ⚠️ The parser having a pattern is NOT enough — the tool name must be in this
|
|
93
|
+
* set too. Any new kind of background work needs BOTH, and an integration test
|
|
94
|
+
* that drives `handleToolResult` (not the parser directly), or the same hole
|
|
95
|
+
* reopens silently. See `background-work-kinds.ts`.
|
|
96
|
+
*/
|
|
97
|
+
export declare const BACKGROUND_WORK_TOOL_NAMES: Set<string>;
|
|
82
98
|
export declare class ClaudeAgentSession implements AgentSession {
|
|
83
99
|
readonly provider: "claude";
|
|
84
100
|
readonly capabilities: AgentCapabilityFlags;
|
|
@@ -1514,6 +1514,22 @@ class ClaudeContextUsageState {
|
|
|
1514
1514
|
};
|
|
1515
1515
|
}
|
|
1516
1516
|
}
|
|
1517
|
+
/**
|
|
1518
|
+
* Tool names whose tool_result can ANNOUNCE background work that outlives the turn.
|
|
1519
|
+
*
|
|
1520
|
+
* This gate is the reason the tracker sees anything at all. It was previously
|
|
1521
|
+
* `toolName !== "Bash"`, which made the monitor and cron start-patterns in
|
|
1522
|
+
* `background-task-tracker.ts` unreachable: a `Monitor` tool_result returned
|
|
1523
|
+
* here before `noteToolResultText` was ever called, so a monitor-only session
|
|
1524
|
+
* reported zero background tasks, bucketed as "done", and kept lighting the
|
|
1525
|
+
* unread chip on every tick.
|
|
1526
|
+
*
|
|
1527
|
+
* ⚠️ The parser having a pattern is NOT enough — the tool name must be in this
|
|
1528
|
+
* set too. Any new kind of background work needs BOTH, and an integration test
|
|
1529
|
+
* that drives `handleToolResult` (not the parser directly), or the same hole
|
|
1530
|
+
* reopens silently. See `background-work-kinds.ts`.
|
|
1531
|
+
*/
|
|
1532
|
+
export const BACKGROUND_WORK_TOOL_NAMES = new Set(["Bash", "Monitor", "CronCreate", "CronDelete"]);
|
|
1517
1533
|
export class ClaudeAgentSession {
|
|
1518
1534
|
/**
|
|
1519
1535
|
* Register a hook event handler for an agent. Stub in Epic 1 — Epic 3 wires
|
|
@@ -4122,7 +4138,7 @@ export class ClaudeAgentSession {
|
|
|
4122
4138
|
* Both go into the record so the UI can show what is actually running.
|
|
4123
4139
|
*/
|
|
4124
4140
|
trackBackgroundShellStart(block, toolName, entry) {
|
|
4125
|
-
if (toolName
|
|
4141
|
+
if (!BACKGROUND_WORK_TOOL_NAMES.has(toolName) || block.is_error) {
|
|
4126
4142
|
return;
|
|
4127
4143
|
}
|
|
4128
4144
|
const resultText = typeof block.content === "string" ? block.content : JSON.stringify(block.content ?? "");
|
|
@@ -4136,7 +4152,10 @@ export class ClaudeAgentSession {
|
|
|
4136
4152
|
startedAt: resolveBackgroundShellStartedAt(extractBackgroundOutputFile(resultText)),
|
|
4137
4153
|
});
|
|
4138
4154
|
if (started.length > 0) {
|
|
4139
|
-
|
|
4155
|
+
// info, not debug: the daemon runs at level 30 and emits no debug lines,
|
|
4156
|
+
// so a debug log here is unobservable in production — which is exactly
|
|
4157
|
+
// how a silently-unreachable tracker went unnoticed.
|
|
4158
|
+
this.logger.info({ taskIds: started, toolName, command }, "Tracking background work");
|
|
4140
4159
|
}
|
|
4141
4160
|
}
|
|
4142
4161
|
/**
|
|
@@ -21,6 +21,17 @@
|
|
|
21
21
|
* fails. Add an entry claiming `tracked: true` without a start pattern that
|
|
22
22
|
* actually extracts its id and `background-work-kinds.test.ts` fails.
|
|
23
23
|
*
|
|
24
|
+
* ⚠️ A PATTERN IS NOT ENOUGH — THE TOOL NAME MUST BE GATED IN TOO
|
|
25
|
+
*
|
|
26
|
+
* `trackBackgroundShellStart` in `providers/claude/agent.ts` only forwards a
|
|
27
|
+
* tool_result to the parser when its tool name is in `BACKGROUND_WORK_TOOL_NAMES`.
|
|
28
|
+
* The first version of this file shipped monitor and cron patterns while that
|
|
29
|
+
* gate still read `toolName !== "Bash"`, so both were dead code in production
|
|
30
|
+
* and every test passed because the tests called the parser directly. A kind is
|
|
31
|
+
* only really tracked when it has: a start pattern, a retirement path, an entry
|
|
32
|
+
* here, AND its tool name in that set — proven by an integration test that goes
|
|
33
|
+
* through `handleToolResult`.
|
|
34
|
+
*
|
|
24
35
|
* SAMPLES ARE CAPTURES, NOT TRANSCRIPTIONS
|
|
25
36
|
*
|
|
26
37
|
* Every `sample` below was pasted verbatim out of a live session's tool_result
|
|
@@ -43,6 +54,12 @@ interface TrackedKind {
|
|
|
43
54
|
retiredBy: string;
|
|
44
55
|
/** Which module owns the tracking. */
|
|
45
56
|
trackedBy: string;
|
|
57
|
+
/**
|
|
58
|
+
* The tool name this kind's result arrives under. MUST be present in
|
|
59
|
+
* `BACKGROUND_WORK_TOOL_NAMES` (providers/claude/agent.ts) or the parser is
|
|
60
|
+
* never reached, however correct its pattern is.
|
|
61
|
+
*/
|
|
62
|
+
toolName: string;
|
|
46
63
|
}
|
|
47
64
|
interface SilencedKind {
|
|
48
65
|
tracked: false;
|
|
@@ -63,6 +80,7 @@ export declare const BACKGROUND_WORK_KINDS: {
|
|
|
63
80
|
readonly expectedId: "beuhoixae";
|
|
64
81
|
readonly retiredBy: "<task-notification> with a terminal <status>";
|
|
65
82
|
readonly trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText";
|
|
83
|
+
readonly toolName: "Bash";
|
|
66
84
|
};
|
|
67
85
|
readonly monitor: {
|
|
68
86
|
readonly tracked: true;
|
|
@@ -71,6 +89,7 @@ export declare const BACKGROUND_WORK_KINDS: {
|
|
|
71
89
|
readonly expectedId: "b6dxcqe9y";
|
|
72
90
|
readonly retiredBy: "<task-notification> with a terminal <status>";
|
|
73
91
|
readonly trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText";
|
|
92
|
+
readonly toolName: "Monitor";
|
|
74
93
|
};
|
|
75
94
|
readonly cron: {
|
|
76
95
|
readonly tracked: true;
|
|
@@ -79,6 +98,7 @@ export declare const BACKGROUND_WORK_KINDS: {
|
|
|
79
98
|
readonly expectedId: "b8df03d3";
|
|
80
99
|
readonly retiredBy: "\"Cancelled job <id>.\" in a later tool_result";
|
|
81
100
|
readonly trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText";
|
|
101
|
+
readonly toolName: "CronCreate";
|
|
82
102
|
};
|
|
83
103
|
readonly scheduled_wakeup: {
|
|
84
104
|
readonly tracked: false;
|
|
@@ -21,6 +21,17 @@
|
|
|
21
21
|
* fails. Add an entry claiming `tracked: true` without a start pattern that
|
|
22
22
|
* actually extracts its id and `background-work-kinds.test.ts` fails.
|
|
23
23
|
*
|
|
24
|
+
* ⚠️ A PATTERN IS NOT ENOUGH — THE TOOL NAME MUST BE GATED IN TOO
|
|
25
|
+
*
|
|
26
|
+
* `trackBackgroundShellStart` in `providers/claude/agent.ts` only forwards a
|
|
27
|
+
* tool_result to the parser when its tool name is in `BACKGROUND_WORK_TOOL_NAMES`.
|
|
28
|
+
* The first version of this file shipped monitor and cron patterns while that
|
|
29
|
+
* gate still read `toolName !== "Bash"`, so both were dead code in production
|
|
30
|
+
* and every test passed because the tests called the parser directly. A kind is
|
|
31
|
+
* only really tracked when it has: a start pattern, a retirement path, an entry
|
|
32
|
+
* here, AND its tool name in that set — proven by an integration test that goes
|
|
33
|
+
* through `handleToolResult`.
|
|
34
|
+
*
|
|
24
35
|
* SAMPLES ARE CAPTURES, NOT TRANSCRIPTIONS
|
|
25
36
|
*
|
|
26
37
|
* Every `sample` below was pasted verbatim out of a live session's tool_result
|
|
@@ -37,6 +48,7 @@ export const BACKGROUND_WORK_KINDS = {
|
|
|
37
48
|
expectedId: "beuhoixae",
|
|
38
49
|
retiredBy: "<task-notification> with a terminal <status>",
|
|
39
50
|
trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText",
|
|
51
|
+
toolName: "Bash",
|
|
40
52
|
},
|
|
41
53
|
monitor: {
|
|
42
54
|
tracked: true,
|
|
@@ -48,6 +60,7 @@ export const BACKGROUND_WORK_KINDS = {
|
|
|
48
60
|
// Only its START was ever invisible.
|
|
49
61
|
retiredBy: "<task-notification> with a terminal <status>",
|
|
50
62
|
trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText",
|
|
63
|
+
toolName: "Monitor",
|
|
51
64
|
},
|
|
52
65
|
cron: {
|
|
53
66
|
tracked: true,
|
|
@@ -58,6 +71,7 @@ export const BACKGROUND_WORK_KINDS = {
|
|
|
58
71
|
// tool_result is its only retirement signal — note the glued-on period.
|
|
59
72
|
retiredBy: '"Cancelled job <id>." in a later tool_result',
|
|
60
73
|
trackedBy: "ClaudeBackgroundTaskTracker.noteToolResultText",
|
|
74
|
+
toolName: "CronCreate",
|
|
61
75
|
},
|
|
62
76
|
scheduled_wakeup: {
|
|
63
77
|
tracked: false,
|
|
@@ -1103,7 +1103,7 @@ __d(function(g,r,_i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?
|
|
|
1103
1103
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return N}}),Object.defineProperty(_e,"AppOwnership",{enumerable:!0,get:function(){return l.AppOwnership}}),Object.defineProperty(_e,"ExecutionEnvironment",{enumerable:!0,get:function(){return l.ExecutionEnvironment}}),Object.defineProperty(_e,"UserInterfaceIdiom",{enumerable:!0,get:function(){return l.UserInterfaceIdiom}});var n=e(r(d[0])),t=r(d[1]);r(d[2]);var u=e(r(d[3])),l=r(d[4]),o=e(r(d[5]));o.default||console.warn("No native ExponentConstants module found, are you sure the expo-constants's module is linked properly?");const s=(0,t.requireOptionalNativeModule)('ExpoUpdates');let f=null;if(s){let e;s.manifest?e=s.manifest:s.manifestString&&(e=JSON.parse(s.manifestString)),e&&Object.keys(e).length>0&&(f=e)}let c=null;if(u.default.EXDevLauncher){let e;u.default.EXDevLauncher.manifestString&&(e=JSON.parse(u.default.EXDevLauncher.manifestString)),e&&Object.keys(e).length>0&&(c=e)}let p=null;if(o.default&&o.default.manifest){const e=o.default.manifest;p='string'==typeof e?JSON.parse(e):e}let b=f??c??p;const E=o.default||{},{appOwnership:O}=E,x=(0,n.default)(E,["name","appOwnership"]),v=Object.assign({},x,{appOwnership:O??null});function _(e){return!h(e)}function h(e){return'metadata'in e}function S(e=!1){if(!b){const e=null===b?'null':'undefined';if(x.executionEnvironment,l.ExecutionEnvironment.Bare,x.executionEnvironment===l.ExecutionEnvironment.StoreClient||x.executionEnvironment===l.ExecutionEnvironment.Standalone)throw new t.CodedError('ERR_CONSTANTS_MANIFEST_UNAVAILABLE',`Constants.manifest is ${e}, must be an object.`)}return b}Object.defineProperties(v,{__unsafeNoWarnManifest:{get(){const e=S(!0);return e&&_(e)?e:null},enumerable:!1},__unsafeNoWarnManifest2:{get(){const e=S(!0);return e&&h(e)?e:null},enumerable:!1},manifest:{get(){const e=S();return e&&_(e)?e:null},enumerable:!0},manifest2:{get(){const e=S();return e&&h(e)?e:null},enumerable:!0},expoConfig:{get(){const e=S(!0);return e?s&&s.isEmbeddedLaunch?p:h(e)?e.extra?.expoClient??null:_(e)?e:null:null},enumerable:!0},expoGoConfig:{get(){const e=S(!0);return e?h(e)?e.extra?.expoGo??null:_(e)?e:null:null},enumerable:!0},easConfig:{get(){const e=S(!0);return e?h(e)?e.extra?.eas??null:_(e)?e:null:null},enumerable:!0},__rawManifest_TEST:{get:()=>b,set(e){b=e},enumerable:!1}});var N=v},1006,[35,4,25,1007,1008,1009]);
|
|
1104
1104
|
__d(function(g,r,i,a,m,_e,d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var e,t=r(d[0]),u={UIManager:((e=t)&&e.__esModule?e:{default:e}).default}},1007,[159]);
|
|
1105
1105
|
__d(function(g,r,i,a,m,e,d){"use strict";var t,n,o;Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"AppOwnership",{enumerable:!0,get:function(){return t}}),Object.defineProperty(e,"ExecutionEnvironment",{enumerable:!0,get:function(){return n}}),Object.defineProperty(e,"UserInterfaceIdiom",{enumerable:!0,get:function(){return o}}),(function(t){t.Expo="expo"})(t||(t={})),(function(t){t.Bare="bare",t.Standalone="standalone",t.StoreClient="storeClient"})(n||(n={})),(function(t){t.Handset="handset",t.Tablet="tablet",t.Desktop="desktop",t.TV="tv",t.Unsupported="unsupported"})(o||(o={}))},1008,[]);
|
|
1106
|
-
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return s}});var t=r(d[0]);const n=(Date.now()+'-'+Math.floor(1e9*Math.random())).toString();function o(){if('undefined'!=typeof navigator&&'string'==typeof navigator.userAgent){const t=navigator.userAgent.toLowerCase();if(t.includes('edge'))return'Edge';if(t.includes('edg'))return'Chromium Edge';if(t.includes('opr')&&'opr'in window&&window.opr)return'Opera';if(t.includes('chrome')&&'chrome'in window&&window.chrome)return'Chrome';if(t.includes('trident'))return'IE';if(t.includes('firefox'))return'Firefox';if(t.includes('safari'))return'Safari'}}var s={get appOwnership(){return null},get executionEnvironment(){return t.ExecutionEnvironment.Bare},get sessionId(){return n},get isHeadless(){return'undefined'==typeof navigator||/\bHeadlessChrome\//.test(navigator.userAgent)},get expoVersion(){return this.manifest.sdkVersion||null},get linkingUri(){return'undefined'!=typeof location?location.origin:''},get expoRuntimeVersion(){return this.expoVersion},get deviceName(){return o()},get systemFonts(){return[]},get statusBarHeight(){return 0},get deviceYearClass(){return null},get manifest(){return"{\"name\":\"Paseo\",\"slug\":\"paseo-hyperdrive\",\"version\":\"0.3.
|
|
1106
|
+
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return s}});var t=r(d[0]);const n=(Date.now()+'-'+Math.floor(1e9*Math.random())).toString();function o(){if('undefined'!=typeof navigator&&'string'==typeof navigator.userAgent){const t=navigator.userAgent.toLowerCase();if(t.includes('edge'))return'Edge';if(t.includes('edg'))return'Chromium Edge';if(t.includes('opr')&&'opr'in window&&window.opr)return'Opera';if(t.includes('chrome')&&'chrome'in window&&window.chrome)return'Chrome';if(t.includes('trident'))return'IE';if(t.includes('firefox'))return'Firefox';if(t.includes('safari'))return'Safari'}}var s={get appOwnership(){return null},get executionEnvironment(){return t.ExecutionEnvironment.Bare},get sessionId(){return n},get isHeadless(){return'undefined'==typeof navigator||/\bHeadlessChrome\//.test(navigator.userAgent)},get expoVersion(){return this.manifest.sdkVersion||null},get linkingUri(){return'undefined'!=typeof location?location.origin:''},get expoRuntimeVersion(){return this.expoVersion},get deviceName(){return o()},get systemFonts(){return[]},get statusBarHeight(){return 0},get deviceYearClass(){return null},get manifest(){return"{\"name\":\"Paseo\",\"slug\":\"paseo-hyperdrive\",\"version\":\"0.3.44\",\"orientation\":\"portrait\",\"icon\":\"./assets/images/icon.png\",\"scheme\":\"paseo\",\"userInterfaceStyle\":\"automatic\",\"newArchEnabled\":true,\"web\":{\"output\":\"single\",\"favicon\":\"./assets/images/favicon.png\",\"shortName\":\"Paseo\",\"orientation\":\"portrait\",\"name\":\"Paseo\"},\"autolinking\":{\"searchPaths\":[\"../../node_modules\",\"./node_modules\"]},\"experiments\":{\"typedRoutes\":true,\"reactCompiler\":true,\"autolinkingModuleResolution\":true},\"extra\":{\"router\":{},\"eas\":{\"build\":{\"experimental\":{\"ios\":{\"appExtensions\":[{\"bundleIdentifier\":\"bot.hyperdrive.paseo.AgentActivity\",\"targetName\":\"AgentActivity\"}]}}}}},\"sdkVersion\":\"54.0.0\",\"platforms\":[\"ios\",\"android\",\"web\"]}"},get manifest2(){return null},get experienceUrl(){return'undefined'!=typeof location?location.origin:''},get debugMode(){return!1},getWebViewUserAgentAsync:async()=>'undefined'!=typeof navigator?navigator.userAgent:null}},1009,[1008]);
|
|
1107
1107
|
__d(function(g,r,i,a,m,_e,d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var e,t=r(d[0]),n=r(d[1]),o=(e=n)&&e.__esModule?e:{default:e};async function u(){if(!o.default.unregisterForNotificationsAsync)throw new t.UnavailabilityError('ExpoNotifications','unregisterForNotificationsAsync');return o.default.unregisterForNotificationsAsync()}},1010,[4,1011]);
|
|
1108
1108
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return n}}),r(d[0]);let t=!1;var n={addListener:()=>(t||(console.warn("[expo-notifications] Listening to push token changes is not yet fully supported on web. Adding a listener will have no effect."),t=!0),{remove:()=>{}}),removeListener:()=>{},removeAllListeners:()=>{},emit:()=>{},listenerCount:()=>0}},1011,[4]);
|
|
1109
1109
|
__d(function(g,r,i,a,m,_e,_d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var t=(function(e){if(e&&e.__esModule)return e;var t={};return e&&Object.keys(e).forEach(function(o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}),t.default=e,t})(r(_d[0])),o=e(r(_d[1])),n=r(_d[2]),c=r(_d[3]),s=e(r(_d[4])),d=e(r(_d[5]));const p='https://exp.host/--/api/v2/';async function u(e={}){const s=e.devicePushToken||await(0,d.default)(),u=e.deviceId||await h(),R=e.projectId||o.default.easConfig?.projectId||o.default.expoConfig?.extra?.eas?.projectId;if(!R)throw new n.CodedError('ERR_NOTIFICATIONS_NO_EXPERIENCE_ID',"No \"projectId\" found. If \"projectId\" can't be inferred from the manifest (for instance, in bare workflow), you have to pass it in yourself.");const w=e.applicationId||t.applicationId;if(!w)throw new n.CodedError('ERR_NOTIFICATIONS_NO_APPLICATION_ID',"No \"applicationId\" found. If it can't be inferred from native configuration by expo-application, you have to pass it in yourself.");const O=e.type||y(s),_=e.development||await I(),v=e.baseUrl??p,N=e.url??`${v}push/getExpoPushToken`,x={type:O,deviceId:u.toLowerCase(),development:_,appId:w,deviceToken:E(s),projectId:R},T=await fetch(N,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify(x)}).catch(e=>{throw new n.CodedError('ERR_NOTIFICATIONS_NETWORK_ERROR',`Error encountered while fetching Expo token: ${e}.`)});if(!T.ok){const e=T.statusText||T.status;let t;try{t=await T.text()}catch{}throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Error encountered while fetching Expo token, expected an OK response, received: ${e} (body: "${t}").`)}const b=l(await f(T));try{e.url||e.baseUrl?console.debug("[expo-notifications] Since the URL endpoint to register in has been customized in the options, expo-notifications won't try to auto-update the device push token on the server."):await(0,c.setAutoServerRegistrationEnabledAsync)(!0)}catch(e){console.warn('[expo-notifications] Could not enable automatically registering new device tokens with the Expo notification service',e)}return{type:'expo',data:b}}async function f(e){try{return await e.json()}catch{try{throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Expected a JSON response from server when fetching Expo token, received body: ${JSON.stringify(await e.text())}.`)}catch{throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Expected a JSON response from server when fetching Expo token, received response: ${JSON.stringify(e)}.`)}}}function l(e){if(!e||'object'!=typeof e||!e.data||'object'!=typeof e.data||!e.data.expoPushToken||'string'!=typeof e.data.expoPushToken)throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Malformed response from server, expected "{ data: { expoPushToken: string } }", received: ${JSON.stringify(e,null,2)}.`);return e.data.expoPushToken}async function h(){try{if(!s.default.getInstallationIdAsync)throw new n.UnavailabilityError('ExpoServerRegistrationModule','getInstallationIdAsync');return await s.default.getInstallationIdAsync()}catch(e){throw new n.CodedError('ERR_NOTIF_DEVICE_ID',`Could not have fetched installation ID of the application: ${e}.`)}}function E(e){return'string'==typeof e.data?e.data:JSON.stringify(e.data)}async function I(){return!1}function y(e){switch(e.type){case'ios':return'apns';case'android':return'fcm';default:return e.type}}},1012,[1013,1006,4,1016,1020,1005]);
|
|
@@ -15048,7 +15048,7 @@ __d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{v
|
|
|
15048
15048
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"decodeOfferFragmentPayload",{enumerable:!0,get:function(){return n.decodeOfferFragmentPayload}}),Object.defineProperty(e,"buildDaemonWebSocketUrl",{enumerable:!0,get:function(){return t.buildDaemonWebSocketUrl}}),Object.defineProperty(e,"deriveLabelFromEndpoint",{enumerable:!0,get:function(){return t.deriveLabelFromEndpoint}}),Object.defineProperty(e,"extractHostPortFromWebSocketUrl",{enumerable:!0,get:function(){return t.extractHostPortFromWebSocketUrl}}),Object.defineProperty(e,"normalizeHostPort",{enumerable:!0,get:function(){return t.normalizeHostPort}}),Object.defineProperty(e,"parseConnectionUri",{enumerable:!0,get:function(){return t.parseConnectionUri}}),Object.defineProperty(e,"parseHostPort",{enumerable:!0,get:function(){return t.parseHostPort}}),Object.defineProperty(e,"serializeConnectionUri",{enumerable:!0,get:function(){return t.serializeConnectionUri}}),Object.defineProperty(e,"serializeConnectionUriForStorage",{enumerable:!0,get:function(){return t.serializeConnectionUriForStorage}}),Object.defineProperty(e,"shouldUseTlsForDefaultHostedRelay",{enumerable:!0,get:function(){return t.shouldUseTlsForDefaultHostedRelay}}),e.buildRelayWebSocketUrl=function(n){return(0,t.buildRelayWebSocketUrl)(Object.assign({},n,{role:"client"}))};var t=r(d[0]),n=r(d[1])},3403,[3383,3404]);
|
|
15049
15049
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"ConnectionOfferV2Schema",{enumerable:!0,get:function(){return t}}),Object.defineProperty(e,"ConnectionOfferSchema",{enumerable:!0,get:function(){return o}}),e.decodeOfferFragmentPayload=l,e.parseConnectionOfferFromUrl=function(n){const t=f(n);if(!t)return null;const c=l(t);return o.parse(c)};var n=r(d[0]);const t=n.z.object({v:n.z.literal(2),serverId:n.z.string().min(1),daemonPublicKeyB64:n.z.string().min(1),relay:n.z.object({endpoint:n.z.string().min(1),useTls:n.z.boolean().optional()})}),o=t;function c(n){const t=n.replace(/-/g,"+").replace(/_/g,"/"),o=t.padEnd(t.length+(4-t.length%4)%4,"="),c=globalThis.atob(o),l=Uint8Array.from(c,n=>n.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(l)}function l(n){const t=c(n);return JSON.parse(t)}const u="#offer=";function f(n){const t=n.trim();if(!t)return null;const o=t.indexOf(u);if(-1===o)return null;const c=t.slice(o+u.length).trim();return c.length>0?c:null}},3404,[3282]);
|
|
15050
15050
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.resolveAppVersion=function(){const e=u(t.default?.version);if(e)return e;const o=u(n.default.expoConfig?.version);if(o)return o;const f=u(n.default.manifest?.version);if(f)return f;return null};var n=e(r(d[0])),t=e(r(d[1]));function u(e){if("string"!=typeof e)return null;const n=e.trim();return 0===n.length?null:n}},3405,[1006,3406]);
|
|
15051
|
-
__d(function(e,t,r,a,o,i,n){o.exports={name:"@hyperdrive.bot/paseo-app",version:"0.3.
|
|
15051
|
+
__d(function(e,t,r,a,o,i,n){o.exports={name:"@hyperdrive.bot/paseo-app",version:"0.3.44",private:!0,main:"index.ts",scripts:{start:"npm run start:expo","start:expo":"cross-env APP_VARIANT=development expo start","reset-project":"node ./scripts/reset-project.js","build:terminal-webview":"node ./scripts/build-terminal-webview-html.mjs","eas-build-post-install":"npm --prefix ../.. run build:app-deps && npm run build:terminal-webview",android:"npm run android:development","android:development":"npm --prefix ../.. run build:client && cross-env APP_VARIANT=development expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=development expo run:android --variant=debug","android:production":"npm --prefix ../.. run build:client && cross-env APP_VARIANT=production expo prebuild --platform android --non-interactive && cross-env APP_VARIANT=production expo run:android --variant=release","android:release":"npm run android:production","android:clear":"node -e \"require('node:fs').rmSync('android', { recursive: true, force: true })\"",ios:"npm --prefix ../.. run build:client && expo run:ios","ios:release":"npm --prefix ../.. run build:client && expo run:ios --configuration Release",web:"npm --prefix ../.. run build:client && concurrently --kill-others --names protocol,client,expo --prefix-colors yellow,blue,magenta \"npm --prefix ../.. run watch:protocol\" \"npm --prefix ../.. run watch:client\" \"npm run web:expo\"","web:expo":"expo start --web",lint:"expo lint",typecheck:"tsgo --noEmit",test:"vitest run","test:browser":"vitest run --project browser","test:e2e":"playwright test --project='Desktop Chrome'","test:e2e:real":"cross-env E2E_FORK_PASEO_HOME_FROM=../../.dev/paseo-home playwright test --project=real-provider","test:e2e:ui":"playwright test --ui","test:coverage":"vitest run --project unit --coverage",build:"npm run build:web","build:web":"npm --prefix ../.. run build:app-deps && expo export --platform web --source-maps","profile:workspace-tabs":"node ./scripts/profile-workspace-tabs.mjs","deploy:web":"npm run build:web && wrangler pages deploy dist --project-name paseo-app --branch main"},dependencies:{"@bacons/apple-targets":"4.0.6","@datadog/browser-rum":"^6.23.0","@datadog/browser-rum-react":"^6.23.0","@datadog/mobile-react-native":"^2.7.0","@datadog/mobile-react-native-session-replay":"^2.14.8","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@expo/image-utils":"0.8.8","@expo/plist":"0.4.9","@expo/prebuild-config":"54.0.8","@floating-ui/react-native":"^0.10.7","@gorhom/bottom-sheet":"^5.2.14","@gorhom/portal":"^1.0.14","@hyperdrive.bot/paseo-client":"*","@hyperdrive.bot/paseo-expo-two-way-audio":"*","@hyperdrive.bot/paseo-extension-sdk":"*","@hyperdrive.bot/paseo-highlight":"*","@react-native-async-storage/async-storage":"2.2.0","@react-native-masked-view/masked-view":"^0.3.2","@react-native/normalize-colors":"^0.81.5","@react-navigation/native":"^7.1.8","@sentry/electron":"^6.11.0","@sentry/react-native":"^6.20.0","@tanstack/react-query":"^5.90.11","@tanstack/react-virtual":"^3.13.21","@xterm/addon-clipboard":"^0.3.0-beta.213","@xterm/addon-fit":"^0.12.0-beta.213","@xterm/addon-image":"^0.10.0-beta.213","@xterm/addon-ligatures":"0.11.0-beta.213","@xterm/addon-search":"^0.17.0-beta.213","@xterm/addon-unicode11":"^0.10.0-beta.213","@xterm/addon-web-links":"^0.13.0-beta.213","@xterm/addon-webgl":"^0.20.0-beta.212","@xterm/xterm":"^6.1.0-beta.213",buffer:"^6.0.3",expo:"^54.0.18","expo-asset":"~12.0.12","expo-audio":"~1.0.13","expo-background-fetch":"~14.0.9","expo-build-properties":"^1.0.9","expo-camera":"~17.0.10","expo-clipboard":"~8.0.7","expo-constants":"~18.0.9","expo-crypto":"^15.0.8","expo-dev-client":"^6.0.15","expo-document-picker":"~14.0.8","expo-file-system":"~19.0.17","expo-haptics":"~15.0.7","expo-image":"~3.0.10","expo-image-manipulator":"~14.0.8","expo-image-picker":"^17.0.8","expo-keep-awake":"^15.0.7","expo-linking":"~8.0.8","expo-localization":"~17.0.9","expo-notifications":"^0.32.16","expo-router":"~6.0.13","expo-sharing":"^14.0.8","expo-speech":"~14.0.8","expo-speech-recognition":"^56.0.1","expo-splash-screen":"~31.0.10","expo-system-ui":"~6.0.7","expo-task-manager":"~14.0.9","fast-deep-equal":"^3.1.3",htmlparser2:"^12.0.0",i18next:"^26.3.0","lucide-react-native":"^0.546.0","markdown-it":"^10.0.0","mnemonic-id":"^3.2.7",qrcode:"^1.5.4",react:"19.1.0","react-dom":"19.1.0","react-i18next":"^17.0.8","react-native":"0.81.5","react-native-draggable-flatlist":"^4.0.3","react-native-edge-to-edge":"^1.7.0","react-native-gesture-handler":"~2.28.0","react-native-keyboard-controller":"^1.21.7","react-native-markdown-display":"^7.0.2","react-native-nitro-modules":"0.35.5","react-native-reanimated":"~4.3.1","react-native-safe-area-context":"~5.6.0","react-native-screens":"~4.16.0","react-native-svg":"^15.14.0","react-native-uitextview":"^2.2.0","react-native-unistyles":"^3.2.4","react-native-web":"~0.21.0","react-native-webview":"^13.16.0","react-native-worklets":"~0.8.3","tiny-invariant":"^1.3.3","use-sync-external-store":"^1.6.0",zod:"^4.4.3",zustand:"^5.0.9"},devDependencies:{"@playwright/test":"^1.56.1","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/chai":"^5.2.2","@types/markdown-it":"^14.1.2","@types/qrcode":"^1.5.6","@types/react":"~19.2.0","@types/ws":"^8.18.1","@vitest/browser":"^4.1.7","@vitest/browser-playwright":"^4.1.7","@vitest/coverage-v8":"^4.1.7","@xterm/headless":"^6.1.0-beta.213",dotenv:"^17.2.3",eslint:"^9.25.0","eslint-config-expo":"~10.0.0",jsdom:"^20.0.3","material-icon-theme":"^5.32.0",playwright:"^1.56.1","serve-sim":"^0.1.40",typescript:"~5.9.2",vitest:"^4.1.6",wrangler:"^4.105.0",ws:"^8.20.0"}}},3406,[]);
|
|
15052
15052
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.shouldUseDesktopDaemon=function(){return(0,n.isElectronRuntime)()},e.getDesktopDaemonStatus=async function(){return c(await(0,t.invokeDesktopCommand)("desktop_daemon_status"))},e.startDesktopDaemon=async function(){return c(await(0,t.invokeDesktopCommand)("start_desktop_daemon"))},e.stopDesktopDaemon=async function(n="manual_ipc"){return c(await(0,t.invokeDesktopCommand)("stop_desktop_daemon",{reason:n}))},e.restartDesktopDaemon=async function(){return c(await(0,t.invokeDesktopCommand)("restart_desktop_daemon"))},e.getDesktopDaemonLogs=async function(){return p(await(0,t.invokeDesktopCommand)("desktop_daemon_logs"))},e.getDesktopDaemonPairing=async function(){return k(await(0,t.invokeDesktopCommand)("desktop_daemon_pairing"))},e.getCliDaemonStatus=async function(){const n=await(0,t.invokeDesktopCommand)("cli_daemon_status");if("string"!=typeof n)throw new Error("Unexpected CLI daemon status response.");return n},e.listenToLocalTransportEvents=async function(t){const u=(0,n.getDesktopHost)()?.events?.on;if("function"!=typeof u)throw new Error("Desktop events API is unavailable.");const c=await u("local-daemon-transport-event",n=>{o(n)&&t({sessionId:s(n.sessionId)??"",kind:s(n.kind)??"error",text:s(n.text),binaryBase64:s(n.binaryBase64),code:l(n.code),reason:s(n.reason),error:s(n.error)})});return"function"==typeof c?c:()=>{}},e.openLocalTransportSession=async function(n){const o=await(0,t.invokeDesktopCommand)("open_local_daemon_transport",n);if("string"!=typeof o||0===o.trim().length)throw new Error("Unexpected local transport session response.");return o},e.sendLocalTransportMessage=async function(n){await(0,t.invokeDesktopCommand)("send_local_daemon_transport_message",Object.assign({sessionId:n.sessionId},n.text?{text:n.text}:{},n.binaryBase64?{binaryBase64:n.binaryBase64}:{}))},e.closeLocalTransportSession=async function(n){await(0,t.invokeDesktopCommand)("close_local_daemon_transport",{sessionId:n})},e.getCliInstallStatus=async function(){return f(await(0,t.invokeDesktopCommand)("get_cli_install_status"))},e.installCli=async function(){return f(await(0,t.invokeDesktopCommand)("install_cli"))},e.getSkillsStatus=async function(){return y(await(0,t.invokeDesktopCommand)("get_skills_status"))},e.installSkills=async function(){return y(await(0,t.invokeDesktopCommand)("install_skills"))},e.updateSkills=async function(){return y(await(0,t.invokeDesktopCommand)("update_skills"))},e.uninstallSkills=async function(){return y(await(0,t.invokeDesktopCommand)("uninstall_skills"))};var n=r(d[0]),t=r(d[1]);function o(n){return"object"==typeof n&&null!==n}function s(n){return"string"==typeof n&&n.trim().length>0?n:null}function l(n){return"number"==typeof n&&Number.isFinite(n)?n:null}function u(n){const t=s(n)?.toLowerCase();switch(t){case"starting":return"starting";case"running":return"running";case"errored":case"error":return"errored";default:return"stopped"}}function c(n){if(!o(n))throw new Error("Unexpected desktop daemon status response.");return{serverId:s(n.serverId)??"",status:u(n.status),listen:s(n.listen),hostname:s(n.hostname),pid:l(n.pid),home:s(n.home)??"",version:s(n.version),desktopManaged:!0===n.desktopManaged,error:s(n.error)}}function p(n){if(!o(n))throw new Error("Unexpected desktop daemon logs response.");return{logPath:s(n.logPath)??"",contents:"string"==typeof n.contents?n.contents:""}}function k(n){if(!o(n))throw new Error("Unexpected desktop daemon pairing response.");return{relayEnabled:!0===n.relayEnabled,url:s(n.url),qr:s(n.qr)}}function f(n){if(!o(n))throw new Error("Unexpected install status response.");return{installed:!0===n.installed}}function w(n){switch(n){case"not-installed":case"up-to-date":case"drift":return n;default:throw new Error(`Unexpected skills status state: ${String(n)}`)}}function _(n){if(!o(n))throw new Error("Unexpected skill op response.");const t=s(n.name);if(!t)throw new Error("Skill op missing name.");switch(n.kind){case"add":return{kind:"add",name:t};case"update":return{kind:"update",name:t};case"delete":return{kind:"delete",name:t};default:throw new Error(`Unexpected skill op kind: ${String(n.kind)}`)}}function y(n){if(!o(n))throw new Error("Unexpected skills status response.");const t=Array.isArray(n.ops)?n.ops.map(_):[];return{state:w(n.state),ops:t}}},3407,[3408,3410]);
|
|
15053
15053
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.getDesktopHost=n,e.isElectronRuntime=o,e.isElectronRuntimeMac=function(){if(!o())return!1;if("undefined"==typeof navigator)return!1;const t=n()?.platform?.toLowerCase();if("darwin"===t||"mac"===t||"macos"===t)return!0;const u=navigator.userAgent;return u.includes("Mac OS")||u.includes("Macintosh")},r(d[0]);var t=r(d[1]);function n(){return(0,t.getElectronHost)()}function o(){return null!==n()}},3408,[25,3409]);
|
|
15054
15054
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.getElectronHost=function(){if("undefined"==typeof window)return null;const t=window.paseoDesktop;if(!t||"object"!=typeof t)return null;return t}},3409,[]);
|
|
@@ -16579,5 +16579,5 @@ __d(function(g,r,_i,a,_m,_e,d){"use strict";var e,t=r(d[0]),n=this&&this.__creat
|
|
|
16579
16579
|
__r(975);
|
|
16580
16580
|
__r(341);
|
|
16581
16581
|
__r(0);
|
|
16582
|
-
//# sourceMappingURL=/_expo/static/js/web/index-
|
|
16583
|
-
//# debugId=
|
|
16582
|
+
//# sourceMappingURL=/_expo/static/js/web/index-6a99048b3a9acca9bc30efd44300414e.js.map
|
|
16583
|
+
//# debugId=cbb00dd4-165a-4e5f-9fe3-1b46ad539152
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -85,6 +85,6 @@
|
|
|
85
85
|
<body>
|
|
86
86
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
87
87
|
<div id="root"></div>
|
|
88
|
-
<script src="/_expo/static/js/web/index-
|
|
88
|
+
<script src="/_expo/static/js/web/index-6a99048b3a9acca9bc30efd44300414e.js" defer></script>
|
|
89
89
|
</body>
|
|
90
90
|
</html>
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperdrive.bot/paseo-server",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.44",
|
|
4
4
|
"description": "Paseo backend server",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/server",
|
|
@@ -65,11 +65,11 @@
|
|
|
65
65
|
"@agentclientprotocol/sdk": "^0.17.1",
|
|
66
66
|
"@anthropic-ai/claude-agent-sdk": "^0.3.195",
|
|
67
67
|
"@anthropic-ai/sdk": "^0.104.2",
|
|
68
|
-
"@hyperdrive.bot/paseo-client": "0.3.
|
|
69
|
-
"@hyperdrive.bot/paseo-extension-sdk": "0.3.
|
|
70
|
-
"@hyperdrive.bot/paseo-highlight": "0.3.
|
|
71
|
-
"@hyperdrive.bot/paseo-protocol": "0.3.
|
|
72
|
-
"@hyperdrive.bot/paseo-relay": "0.3.
|
|
68
|
+
"@hyperdrive.bot/paseo-client": "0.3.44",
|
|
69
|
+
"@hyperdrive.bot/paseo-extension-sdk": "0.3.44",
|
|
70
|
+
"@hyperdrive.bot/paseo-highlight": "0.3.44",
|
|
71
|
+
"@hyperdrive.bot/paseo-protocol": "0.3.44",
|
|
72
|
+
"@hyperdrive.bot/paseo-relay": "0.3.44",
|
|
73
73
|
"@isaacs/ttlcache": "^2.1.4",
|
|
74
74
|
"@modelcontextprotocol/sdk": "^1.20.1",
|
|
75
75
|
"@opencode-ai/sdk": "1.2.6",
|