daycare-cli 2026.2.27 → 2026.2.28
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/config/configResolve.d.ts.map +1 -1
- package/dist/config/configResolve.js +15 -1
- package/dist/config/configResolve.js.map +1 -1
- package/dist/config/configResolve.spec.js +47 -0
- package/dist/config/configResolve.spec.js.map +1 -1
- package/dist/config/configSettingsParse.d.ts.map +1 -1
- package/dist/config/configSettingsParse.js +10 -0
- package/dist/config/configSettingsParse.js.map +1 -1
- package/dist/config/configSettingsParse.spec.js +32 -0
- package/dist/config/configSettingsParse.spec.js.map +1 -1
- package/dist/config/configTypes.d.ts +2 -1
- package/dist/config/configTypes.d.ts.map +1 -1
- package/dist/engine/agents/agent.d.ts.map +1 -1
- package/dist/engine/agents/agent.js +12 -1
- package/dist/engine/agents/agent.js.map +1 -1
- package/dist/engine/agents/agentSystem.spec.js +1 -1
- package/dist/engine/agents/ops/agentSystemPromptContext.d.ts +1 -1
- package/dist/engine/agents/ops/agentSystemPromptContext.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.js +12 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionEnvironment.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.js +0 -4
- package/dist/engine/agents/ops/agentSystemPromptSectionMemory.js.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.d.ts +2 -2
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.js +12 -30
- package/dist/engine/agents/ops/agentSystemPromptSectionPermissions.js.map +1 -1
- package/dist/engine/friends/nametagGenerate.d.ts +6 -0
- package/dist/engine/friends/nametagGenerate.d.ts.map +1 -0
- package/dist/engine/friends/nametagGenerate.js +9 -0
- package/dist/engine/friends/nametagGenerate.js.map +1 -0
- package/dist/engine/friends/nametagGenerate.spec.d.ts +2 -0
- package/dist/engine/friends/nametagGenerate.spec.d.ts.map +1 -0
- package/dist/engine/friends/nametagGenerate.spec.js +18 -0
- package/dist/engine/friends/nametagGenerate.spec.js.map +1 -0
- package/dist/engine/modules/rlm/rlmPromptSkills.spec.js +9 -9
- package/dist/engine/modules/rlm/rlmPromptSkills.spec.js.map +1 -1
- package/dist/engine/modules/tools/friendAddToolBuild.d.ts +2 -2
- package/dist/engine/modules/tools/friendAddToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/friendAddToolBuild.js +30 -33
- package/dist/engine/modules/tools/friendAddToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/friendAddToolBuild.spec.js +19 -19
- package/dist/engine/modules/tools/friendRemoveToolBuild.d.ts +2 -2
- package/dist/engine/modules/tools/friendRemoveToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/friendRemoveToolBuild.js +32 -35
- package/dist/engine/modules/tools/friendRemoveToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/friendRemoveToolBuild.spec.js +22 -22
- package/dist/engine/modules/tools/friendSendToolBuild.d.ts +1 -1
- package/dist/engine/modules/tools/friendSendToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/friendSendToolBuild.js +17 -20
- package/dist/engine/modules/tools/friendSendToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/friendSendToolBuild.spec.js +14 -14
- package/dist/engine/modules/tools/friendShareSubuserToolBuild.d.ts +1 -1
- package/dist/engine/modules/tools/friendShareSubuserToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/friendShareSubuserToolBuild.js +20 -26
- package/dist/engine/modules/tools/friendShareSubuserToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/friendShareSubuserToolBuild.spec.js +18 -18
- package/dist/engine/modules/tools/friendUnshareSubuserToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/friendUnshareSubuserToolBuild.js +16 -19
- package/dist/engine/modules/tools/friendUnshareSubuserToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/friendUnshareSubuserToolBuild.spec.js +12 -12
- package/dist/engine/modules/tools/topologyToolBuild.js +5 -5
- package/dist/engine/modules/tools/topologyToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/topologyToolBuild.spec.js +8 -8
- package/dist/plugins/dashboard/site/404.html +1 -1
- package/dist/plugins/dashboard/site/agent.html +1 -1
- package/dist/plugins/dashboard/site/agent.txt +1 -1
- package/dist/plugins/dashboard/site/agents.html +1 -1
- package/dist/plugins/dashboard/site/agents.txt +1 -1
- package/dist/plugins/dashboard/site/automations.html +1 -1
- package/dist/plugins/dashboard/site/automations.txt +1 -1
- package/dist/plugins/dashboard/site/connectors.html +1 -1
- package/dist/plugins/dashboard/site/connectors.txt +1 -1
- package/dist/plugins/dashboard/site/index.html +1 -1
- package/dist/plugins/dashboard/site/index.txt +1 -1
- package/dist/plugins/dashboard/site/memory.html +1 -1
- package/dist/plugins/dashboard/site/memory.txt +1 -1
- package/dist/plugins/dashboard/site/processes.html +1 -1
- package/dist/plugins/dashboard/site/processes.txt +1 -1
- package/dist/plugins/dashboard/site/providers.html +1 -1
- package/dist/plugins/dashboard/site/providers.txt +1 -1
- package/dist/plugins/dashboard/site/signals.html +1 -1
- package/dist/plugins/dashboard/site/signals.txt +1 -1
- package/dist/plugins/dashboard/site/telemetry.html +1 -1
- package/dist/plugins/dashboard/site/telemetry.txt +1 -1
- package/dist/plugins/dashboard/site/tools.html +1 -1
- package/dist/plugins/dashboard/site/tools.txt +1 -1
- package/dist/prompts/SYSTEM_ENVIRONMENT.md +6 -0
- package/dist/prompts/SYSTEM_MEMORY.md +4 -4
- package/dist/prompts/SYSTEM_PERMISSIONS.md +3 -19
- package/dist/sandbox/docker/dockerContainerEnsure.d.ts +8 -0
- package/dist/sandbox/docker/dockerContainerEnsure.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerEnsure.js +56 -0
- package/dist/sandbox/docker/dockerContainerEnsure.js.map +1 -0
- package/dist/sandbox/docker/dockerContainerEnsure.spec.d.ts +2 -0
- package/dist/sandbox/docker/dockerContainerEnsure.spec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerEnsure.spec.js +66 -0
- package/dist/sandbox/docker/dockerContainerEnsure.spec.js.map +1 -0
- package/dist/sandbox/docker/dockerContainerExec.d.ts +8 -0
- package/dist/sandbox/docker/dockerContainerExec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerExec.js +109 -0
- package/dist/sandbox/docker/dockerContainerExec.js.map +1 -0
- package/dist/sandbox/docker/dockerContainerExec.spec.d.ts +2 -0
- package/dist/sandbox/docker/dockerContainerExec.spec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerExec.spec.js +75 -0
- package/dist/sandbox/docker/dockerContainerExec.spec.js.map +1 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.d.ts +6 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.js +15 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.js.map +1 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.spec.d.ts +2 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.spec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.spec.js +17 -0
- package/dist/sandbox/docker/dockerContainerNameBuild.spec.js.map +1 -0
- package/dist/sandbox/docker/dockerContainers.d.ts +13 -0
- package/dist/sandbox/docker/dockerContainers.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainers.js +42 -0
- package/dist/sandbox/docker/dockerContainers.js.map +1 -0
- package/dist/sandbox/docker/dockerContainersShared.d.ts +3 -0
- package/dist/sandbox/docker/dockerContainersShared.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerContainersShared.js +3 -0
- package/dist/sandbox/docker/dockerContainersShared.js.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.d.ts +19 -0
- package/dist/sandbox/docker/dockerRunInSandbox.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.integration.spec.d.ts +2 -0
- package/dist/sandbox/docker/dockerRunInSandbox.integration.spec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.integration.spec.js +143 -0
- package/dist/sandbox/docker/dockerRunInSandbox.integration.spec.js.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.js +117 -0
- package/dist/sandbox/docker/dockerRunInSandbox.js.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.spec.d.ts +2 -0
- package/dist/sandbox/docker/dockerRunInSandbox.spec.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerRunInSandbox.spec.js +127 -0
- package/dist/sandbox/docker/dockerRunInSandbox.spec.js.map +1 -0
- package/dist/sandbox/docker/dockerTypes.d.ts +23 -0
- package/dist/sandbox/docker/dockerTypes.d.ts.map +1 -0
- package/dist/sandbox/docker/dockerTypes.js +2 -0
- package/dist/sandbox/docker/dockerTypes.js.map +1 -0
- package/dist/sandbox/sandbox.d.ts +3 -1
- package/dist/sandbox/sandbox.d.ts.map +1 -1
- package/dist/sandbox/sandbox.js +42 -9
- package/dist/sandbox/sandbox.js.map +1 -1
- package/dist/sandbox/sandboxCanRead.d.ts.map +1 -1
- package/dist/sandbox/sandboxCanRead.js +8 -4
- package/dist/sandbox/sandboxCanRead.js.map +1 -1
- package/dist/sandbox/sandboxCanRead.spec.js +6 -4
- package/dist/sandbox/sandboxCanRead.spec.js.map +1 -1
- package/dist/sandbox/sandboxCanWrite.d.ts.map +1 -1
- package/dist/sandbox/sandboxCanWrite.js +25 -0
- package/dist/sandbox/sandboxCanWrite.js.map +1 -1
- package/dist/sandbox/sandboxCanWrite.spec.js +6 -1
- package/dist/sandbox/sandboxCanWrite.spec.js.map +1 -1
- package/dist/sandbox/sandboxDocker.spec.d.ts +2 -0
- package/dist/sandbox/sandboxDocker.spec.d.ts.map +1 -0
- package/dist/sandbox/sandboxDocker.spec.js +121 -0
- package/dist/sandbox/sandboxDocker.spec.js.map +1 -0
- package/dist/sandbox/sandboxPathContainerToHost.d.ts +6 -0
- package/dist/sandbox/sandboxPathContainerToHost.d.ts.map +1 -0
- package/dist/sandbox/sandboxPathContainerToHost.js +24 -0
- package/dist/sandbox/sandboxPathContainerToHost.js.map +1 -0
- package/dist/sandbox/sandboxPathContainerToHost.spec.d.ts +2 -0
- package/dist/sandbox/sandboxPathContainerToHost.spec.d.ts.map +1 -0
- package/dist/sandbox/sandboxPathContainerToHost.spec.js +25 -0
- package/dist/sandbox/sandboxPathContainerToHost.spec.js.map +1 -0
- package/dist/sandbox/sandboxPathHostToContainer.d.ts +6 -0
- package/dist/sandbox/sandboxPathHostToContainer.d.ts.map +1 -0
- package/dist/sandbox/sandboxPathHostToContainer.js +23 -0
- package/dist/sandbox/sandboxPathHostToContainer.js.map +1 -0
- package/dist/sandbox/sandboxPathHostToContainer.spec.d.ts +2 -0
- package/dist/sandbox/sandboxPathHostToContainer.spec.d.ts.map +1 -0
- package/dist/sandbox/sandboxPathHostToContainer.spec.js +32 -0
- package/dist/sandbox/sandboxPathHostToContainer.spec.js.map +1 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.d.ts +11 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.d.ts.map +1 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.js +20 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.js.map +1 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.spec.d.ts +2 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.spec.d.ts.map +1 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.spec.js +20 -0
- package/dist/sandbox/sandboxReadBoundaryDenyPathsBuild.spec.js.map +1 -0
- package/dist/sandbox/sandboxTypes.d.ts +9 -0
- package/dist/sandbox/sandboxTypes.d.ts.map +1 -1
- package/dist/settings.d.ts +17 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/skills/daycare-friendship/SKILL.md +295 -0
- package/dist/skills/skills/daycare-friendship/SKILL.md +295 -0
- package/dist/storage/agentsRepository.spec.js +1 -1
- package/dist/storage/connectionsRepository.spec.js +19 -19
- package/dist/storage/databaseTypes.d.ts +3 -3
- package/dist/storage/databaseTypes.d.ts.map +1 -1
- package/dist/storage/migrations/20260225_require_usertag.d.ts +7 -0
- package/dist/storage/migrations/20260225_require_usertag.d.ts.map +1 -0
- package/dist/storage/migrations/20260225_require_usertag.js +60 -0
- package/dist/storage/migrations/20260225_require_usertag.js.map +1 -0
- package/dist/storage/migrations/20260225_require_usertag.spec.d.ts +2 -0
- package/dist/storage/migrations/20260225_require_usertag.spec.d.ts.map +1 -0
- package/dist/storage/migrations/20260225_require_usertag.spec.js +70 -0
- package/dist/storage/migrations/20260225_require_usertag.spec.js.map +1 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.d.ts +7 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.d.ts.map +1 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.js +47 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.js.map +1 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.spec.d.ts +2 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.spec.d.ts.map +1 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.spec.js +59 -0
- package/dist/storage/migrations/20260226_rename_usertag_to_nametag.spec.js.map +1 -0
- package/dist/storage/migrations/_migrations.d.ts.map +1 -1
- package/dist/storage/migrations/_migrations.js +5 -1
- package/dist/storage/migrations/_migrations.js.map +1 -1
- package/dist/storage/storage.d.ts +1 -1
- package/dist/storage/storage.js +15 -15
- package/dist/storage/storage.js.map +1 -1
- package/dist/storage/storage.spec.js +1 -1
- package/dist/storage/storage.spec.js.map +1 -1
- package/dist/storage/usersRepository.d.ts +2 -2
- package/dist/storage/usersRepository.d.ts.map +1 -1
- package/dist/storage/usersRepository.js +40 -21
- package/dist/storage/usersRepository.js.map +1 -1
- package/dist/storage/usersRepository.spec.js +8 -8
- package/package.json +6 -3
- package/dist/engine/friends/usertagGenerate.d.ts +0 -6
- package/dist/engine/friends/usertagGenerate.d.ts.map +0 -1
- package/dist/engine/friends/usertagGenerate.js +0 -311
- package/dist/engine/friends/usertagGenerate.js.map +0 -1
- package/dist/engine/friends/usertagGenerate.spec.d.ts +0 -2
- package/dist/engine/friends/usertagGenerate.spec.d.ts.map +0 -1
- package/dist/engine/friends/usertagGenerate.spec.js +0 -13
- package/dist/engine/friends/usertagGenerate.spec.js.map +0 -1
- /package/dist/plugins/dashboard/site/_next/static/{Hr0soHgJ1L7WevXil6GIk → fEfvfa55gmpjx9cT66rjx}/_buildManifest.js +0 -0
- /package/dist/plugins/dashboard/site/_next/static/{Hr0soHgJ1L7WevXil6GIk → fEfvfa55gmpjx9cT66rjx}/_ssgManifest.js +0 -0
|
@@ -1,53 +1,50 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { messageBuildSystemText } from "../../messages/messageBuildSystemText.js";
|
|
3
3
|
const schema = Type.Object({
|
|
4
|
-
|
|
4
|
+
nametag: Type.String({ minLength: 1 })
|
|
5
5
|
}, { additionalProperties: false });
|
|
6
6
|
const resultSchema = Type.Object({
|
|
7
7
|
summary: Type.String(),
|
|
8
8
|
status: Type.String(),
|
|
9
|
-
|
|
9
|
+
nametag: Type.String()
|
|
10
10
|
}, { additionalProperties: false });
|
|
11
11
|
const returns = {
|
|
12
12
|
schema: resultSchema,
|
|
13
13
|
toLLMText: (result) => result.summary
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
|
-
* Removes, rejects, or cancels a friend relationship by
|
|
17
|
-
* Expects: caller is a frontend user with a generated
|
|
16
|
+
* Removes, rejects, or cancels a friend relationship by nametag.
|
|
17
|
+
* Expects: caller is a frontend user with a generated nametag.
|
|
18
18
|
*/
|
|
19
19
|
export function friendRemoveToolBuild() {
|
|
20
20
|
return {
|
|
21
21
|
tool: {
|
|
22
22
|
name: "friend_remove",
|
|
23
|
-
description: "Unfriend, reject a request, or cancel a pending request by
|
|
23
|
+
description: "Unfriend, reject a request, or cancel a pending request by nametag.",
|
|
24
24
|
parameters: schema
|
|
25
25
|
},
|
|
26
26
|
returns,
|
|
27
27
|
visibleByDefault: (context) => context.descriptor.type === "user",
|
|
28
28
|
execute: async (args, toolContext, toolCall) => {
|
|
29
29
|
const payload = args;
|
|
30
|
-
const
|
|
30
|
+
const targetNametag = nametagNormalize(payload.nametag);
|
|
31
31
|
const users = toolContext.agentSystem.storage.users;
|
|
32
32
|
const connections = toolContext.agentSystem.storage.connections;
|
|
33
33
|
const me = await users.findById(toolContext.ctx.userId);
|
|
34
34
|
if (!me) {
|
|
35
35
|
throw new Error("Current user not found.");
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
throw new Error("Current user does not have a usertag.");
|
|
40
|
-
}
|
|
41
|
-
const target = await users.findByUsertag(targetUsertag);
|
|
37
|
+
const myNametag = me.nametag;
|
|
38
|
+
const target = await users.findByNametag(targetNametag);
|
|
42
39
|
if (!target) {
|
|
43
|
-
throw new Error(`User not found for
|
|
40
|
+
throw new Error(`User not found for nametag: ${targetNametag}`);
|
|
44
41
|
}
|
|
45
42
|
if (target.id === me.id) {
|
|
46
43
|
throw new Error("Cannot remove yourself.");
|
|
47
44
|
}
|
|
48
45
|
const connection = await connections.find(me.id, target.id);
|
|
49
46
|
if (!connection) {
|
|
50
|
-
throw new Error(`No relationship with ${
|
|
47
|
+
throw new Error(`No relationship with ${targetNametag}.`);
|
|
51
48
|
}
|
|
52
49
|
const state = sideStateForUser(connection, me.id);
|
|
53
50
|
if (target.parentUserId) {
|
|
@@ -56,62 +53,62 @@ export function friendRemoveToolBuild() {
|
|
|
56
53
|
await connectionDeleteIfEmpty(connections, target.id, me.id, updated);
|
|
57
54
|
const owner = await users.findById(target.parentUserId);
|
|
58
55
|
if (owner) {
|
|
59
|
-
const origin = `friend:${
|
|
56
|
+
const origin = `friend:${myNametag}`;
|
|
60
57
|
await toolContext.agentSystem.postToUserAgents(owner.id, {
|
|
61
58
|
type: "system_message",
|
|
62
59
|
origin,
|
|
63
|
-
text: messageBuildSystemText(`${
|
|
60
|
+
text: messageBuildSystemText(`${myNametag} removed access to subuser "${target.name ?? target.id}" (${targetNametag}).`, origin)
|
|
64
61
|
});
|
|
65
62
|
}
|
|
66
|
-
return success("removed_share",
|
|
63
|
+
return success("removed_share", targetNametag, toolCall);
|
|
67
64
|
}
|
|
68
65
|
if (!state.myRequested && state.otherRequested) {
|
|
69
66
|
const updated = await connections.clearSide(target.id, me.id);
|
|
70
67
|
await connectionDeleteIfEmpty(connections, target.id, me.id, updated);
|
|
71
|
-
return success("rejected_share",
|
|
68
|
+
return success("rejected_share", targetNametag, toolCall);
|
|
72
69
|
}
|
|
73
70
|
if (state.myRequested && !state.otherRequested) {
|
|
74
71
|
const updated = await connections.clearSide(me.id, target.id);
|
|
75
72
|
await connectionDeleteIfEmpty(connections, target.id, me.id, updated);
|
|
76
|
-
return success("canceled_share",
|
|
73
|
+
return success("canceled_share", targetNametag, toolCall);
|
|
77
74
|
}
|
|
78
|
-
throw new Error(`No relationship with ${
|
|
75
|
+
throw new Error(`No relationship with ${targetNametag}.`);
|
|
79
76
|
}
|
|
80
77
|
if (state.myRequested && state.otherRequested) {
|
|
81
78
|
await connections.clearSide(me.id, target.id);
|
|
82
79
|
await subuserShareCleanup(connections, me.id, target.id);
|
|
83
|
-
const origin = `friend:${
|
|
80
|
+
const origin = `friend:${myNametag}`;
|
|
84
81
|
await toolContext.agentSystem.postToUserAgents(target.id, {
|
|
85
82
|
type: "system_message",
|
|
86
83
|
origin,
|
|
87
|
-
text: messageBuildSystemText(`${
|
|
84
|
+
text: messageBuildSystemText(`${myNametag} removed you as a friend.`, origin)
|
|
88
85
|
});
|
|
89
|
-
return success("unfriended",
|
|
86
|
+
return success("unfriended", targetNametag, toolCall);
|
|
90
87
|
}
|
|
91
88
|
if (!state.myRequested && state.otherRequested) {
|
|
92
89
|
await connections.clearSide(target.id, me.id);
|
|
93
|
-
return success("rejected",
|
|
90
|
+
return success("rejected", targetNametag, toolCall);
|
|
94
91
|
}
|
|
95
92
|
if (state.myRequested && !state.otherRequested) {
|
|
96
93
|
await connections.clearSide(me.id, target.id);
|
|
97
|
-
return success("canceled",
|
|
94
|
+
return success("canceled", targetNametag, toolCall);
|
|
98
95
|
}
|
|
99
|
-
throw new Error(`No relationship with ${
|
|
96
|
+
throw new Error(`No relationship with ${targetNametag}.`);
|
|
100
97
|
}
|
|
101
98
|
};
|
|
102
99
|
}
|
|
103
|
-
function success(status,
|
|
100
|
+
function success(status, nametag, toolCall) {
|
|
104
101
|
const summary = status === "unfriended"
|
|
105
|
-
? `Removed ${
|
|
102
|
+
? `Removed ${nametag} from friends.`
|
|
106
103
|
: status === "rejected"
|
|
107
|
-
? `Rejected friend request from ${
|
|
104
|
+
? `Rejected friend request from ${nametag}.`
|
|
108
105
|
: status === "removed_share"
|
|
109
|
-
? `Removed shared access to ${
|
|
106
|
+
? `Removed shared access to ${nametag}.`
|
|
110
107
|
: status === "rejected_share"
|
|
111
|
-
? `Rejected shared subuser offer from ${
|
|
108
|
+
? `Rejected shared subuser offer from ${nametag}.`
|
|
112
109
|
: status === "canceled_share"
|
|
113
|
-
? `Canceled pending shared subuser access to ${
|
|
114
|
-
: `Canceled pending friend request to ${
|
|
110
|
+
? `Canceled pending shared subuser access to ${nametag}.`
|
|
111
|
+
: `Canceled pending friend request to ${nametag}.`;
|
|
115
112
|
const toolMessage = {
|
|
116
113
|
role: "toolResult",
|
|
117
114
|
toolCallId: toolCall.id,
|
|
@@ -125,14 +122,14 @@ function success(status, usertag, toolCall) {
|
|
|
125
122
|
typedResult: {
|
|
126
123
|
summary,
|
|
127
124
|
status,
|
|
128
|
-
|
|
125
|
+
nametag
|
|
129
126
|
}
|
|
130
127
|
};
|
|
131
128
|
}
|
|
132
|
-
function
|
|
129
|
+
function nametagNormalize(value) {
|
|
133
130
|
const normalized = value.trim().toLowerCase();
|
|
134
131
|
if (!normalized) {
|
|
135
|
-
throw new Error("
|
|
132
|
+
throw new Error("nametag is required.");
|
|
136
133
|
}
|
|
137
134
|
return normalized;
|
|
138
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendRemoveToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendRemoveToolBuild.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CACtB;IACI,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;CACzC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAClC,CAAC;AAIF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAC5B;IACI,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;CACzB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAClC,CAAC;AAIF,MAAM,OAAO,GAA2C;IACpD,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACjC,OAAO;QACH,IAAI,EAAE;YACF,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,qEAAqE;YAClF,UAAU,EAAE,MAAM;SACrB;QACD,OAAO;QACP,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM;QACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,IAAwB,CAAC;YACzC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YACpD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;YAEhE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"friendRemoveToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendRemoveToolBuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,13 @@ describe("friendRemoveToolBuild", () => {
|
|
|
6
6
|
it("unfriends and notifies the other user", async () => {
|
|
7
7
|
const storage = Storage.open(":memory:");
|
|
8
8
|
try {
|
|
9
|
-
const alice = await storage.users.create({ id: "alice",
|
|
10
|
-
const bob = await storage.users.create({ id: "bob",
|
|
9
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
10
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
11
11
|
await storage.connections.upsertRequest(alice.id, bob.id, 100);
|
|
12
12
|
await storage.connections.upsertRequest(bob.id, alice.id, 200);
|
|
13
13
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
14
14
|
const tool = friendRemoveToolBuild();
|
|
15
|
-
const result = await tool.execute({
|
|
15
|
+
const result = await tool.execute({ nametag: "swift-fox-42" }, contextBuild(alice.id, storage, postToUserAgents), toolCall);
|
|
16
16
|
expect(result.typedResult.status).toBe("unfriended");
|
|
17
17
|
expect(postToUserAgents).toHaveBeenCalledWith(bob.id, expect.objectContaining({ type: "system_message", origin: "friend:happy-penguin-42" }));
|
|
18
18
|
const state = await storage.connections.find(alice.id, bob.id);
|
|
@@ -26,12 +26,12 @@ describe("friendRemoveToolBuild", () => {
|
|
|
26
26
|
it("rejects a pending incoming request without notification", async () => {
|
|
27
27
|
const storage = Storage.open(":memory:");
|
|
28
28
|
try {
|
|
29
|
-
const alice = await storage.users.create({ id: "alice",
|
|
30
|
-
const bob = await storage.users.create({ id: "bob",
|
|
29
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
30
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
31
31
|
await storage.connections.upsertRequest(bob.id, alice.id, 100);
|
|
32
32
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
33
33
|
const tool = friendRemoveToolBuild();
|
|
34
|
-
const result = await tool.execute({
|
|
34
|
+
const result = await tool.execute({ nametag: "swift-fox-42" }, contextBuild(alice.id, storage, postToUserAgents), toolCall);
|
|
35
35
|
expect(result.typedResult.status).toBe("rejected");
|
|
36
36
|
expect(postToUserAgents).not.toHaveBeenCalled();
|
|
37
37
|
const state = await storage.connections.find(alice.id, bob.id);
|
|
@@ -45,12 +45,12 @@ describe("friendRemoveToolBuild", () => {
|
|
|
45
45
|
it("cancels an outgoing pending request", async () => {
|
|
46
46
|
const storage = Storage.open(":memory:");
|
|
47
47
|
try {
|
|
48
|
-
const alice = await storage.users.create({ id: "alice",
|
|
49
|
-
const bob = await storage.users.create({ id: "bob",
|
|
48
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
49
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
50
50
|
await storage.connections.upsertRequest(alice.id, bob.id, 100);
|
|
51
51
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
52
52
|
const tool = friendRemoveToolBuild();
|
|
53
|
-
const result = await tool.execute({
|
|
53
|
+
const result = await tool.execute({ nametag: "swift-fox-42" }, contextBuild(alice.id, storage, postToUserAgents), toolCall);
|
|
54
54
|
expect(result.typedResult.status).toBe("canceled");
|
|
55
55
|
expect(postToUserAgents).not.toHaveBeenCalled();
|
|
56
56
|
const state = await storage.connections.find(alice.id, bob.id);
|
|
@@ -64,19 +64,19 @@ describe("friendRemoveToolBuild", () => {
|
|
|
64
64
|
it("removes an active shared subuser and notifies the owner", async () => {
|
|
65
65
|
const storage = Storage.open(":memory:");
|
|
66
66
|
try {
|
|
67
|
-
const owner = await storage.users.create({ id: "owner",
|
|
68
|
-
const bob = await storage.users.create({ id: "bob",
|
|
67
|
+
const owner = await storage.users.create({ id: "owner", nametag: "happy-penguin-42" });
|
|
68
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
69
69
|
const subuser = await storage.users.create({
|
|
70
70
|
id: "owner-sub-1",
|
|
71
71
|
parentUserId: owner.id,
|
|
72
72
|
name: "helper",
|
|
73
|
-
|
|
73
|
+
nametag: "cool-cat-11"
|
|
74
74
|
});
|
|
75
75
|
await storage.connections.upsertRequest(subuser.id, bob.id, 100);
|
|
76
76
|
await storage.connections.upsertRequest(bob.id, subuser.id, 200);
|
|
77
77
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
78
78
|
const tool = friendRemoveToolBuild();
|
|
79
|
-
const result = await tool.execute({
|
|
79
|
+
const result = await tool.execute({ nametag: "cool-cat-11" }, contextBuild(bob.id, storage, postToUserAgents), toolCall);
|
|
80
80
|
expect(result.typedResult.status).toBe("removed_share");
|
|
81
81
|
expect(postToUserAgents).toHaveBeenCalledWith(owner.id, expect.objectContaining({ type: "system_message", origin: "friend:swift-fox-42" }));
|
|
82
82
|
const state = await storage.connections.find(subuser.id, bob.id);
|
|
@@ -96,18 +96,18 @@ describe("friendRemoveToolBuild", () => {
|
|
|
96
96
|
it("rejects an incoming shared subuser offer without notification", async () => {
|
|
97
97
|
const storage = Storage.open(":memory:");
|
|
98
98
|
try {
|
|
99
|
-
const owner = await storage.users.create({ id: "owner",
|
|
100
|
-
const bob = await storage.users.create({ id: "bob",
|
|
99
|
+
const owner = await storage.users.create({ id: "owner", nametag: "happy-penguin-42" });
|
|
100
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
101
101
|
const subuser = await storage.users.create({
|
|
102
102
|
id: "owner-sub-1",
|
|
103
103
|
parentUserId: owner.id,
|
|
104
104
|
name: "helper",
|
|
105
|
-
|
|
105
|
+
nametag: "cool-cat-11"
|
|
106
106
|
});
|
|
107
107
|
await storage.connections.upsertRequest(subuser.id, bob.id, 100);
|
|
108
108
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
109
109
|
const tool = friendRemoveToolBuild();
|
|
110
|
-
const result = await tool.execute({
|
|
110
|
+
const result = await tool.execute({ nametag: "cool-cat-11" }, contextBuild(bob.id, storage, postToUserAgents), toolCall);
|
|
111
111
|
expect(result.typedResult.status).toBe("rejected_share");
|
|
112
112
|
expect(postToUserAgents).not.toHaveBeenCalled();
|
|
113
113
|
expect(await storage.connections.find(subuser.id, bob.id)).toBeNull();
|
|
@@ -119,19 +119,19 @@ describe("friendRemoveToolBuild", () => {
|
|
|
119
119
|
it("cascades subuser-share cleanup when unfriending a user", async () => {
|
|
120
120
|
const storage = Storage.open(":memory:");
|
|
121
121
|
try {
|
|
122
|
-
const alice = await storage.users.create({ id: "alice",
|
|
123
|
-
const bob = await storage.users.create({ id: "bob",
|
|
122
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
123
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
124
124
|
const aliceSub = await storage.users.create({
|
|
125
125
|
id: "alice-sub-1",
|
|
126
126
|
parentUserId: alice.id,
|
|
127
127
|
name: "a-helper",
|
|
128
|
-
|
|
128
|
+
nametag: "cool-cat-11"
|
|
129
129
|
});
|
|
130
130
|
const bobSub = await storage.users.create({
|
|
131
131
|
id: "bob-sub-1",
|
|
132
132
|
parentUserId: bob.id,
|
|
133
133
|
name: "b-helper",
|
|
134
|
-
|
|
134
|
+
nametag: "smart-owl-22"
|
|
135
135
|
});
|
|
136
136
|
await storage.connections.upsertRequest(alice.id, bob.id, 100);
|
|
137
137
|
await storage.connections.upsertRequest(bob.id, alice.id, 200);
|
|
@@ -141,7 +141,7 @@ describe("friendRemoveToolBuild", () => {
|
|
|
141
141
|
await storage.connections.upsertRequest(alice.id, bobSub.id, 600);
|
|
142
142
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
143
143
|
const tool = friendRemoveToolBuild();
|
|
144
|
-
const result = await tool.execute({
|
|
144
|
+
const result = await tool.execute({ nametag: "swift-fox-42" }, contextBuild(alice.id, storage, postToUserAgents), toolCall);
|
|
145
145
|
expect(result.typedResult.status).toBe("unfriended");
|
|
146
146
|
expect(await storage.connections.find(aliceSub.id, bob.id)).toBeNull();
|
|
147
147
|
expect(await storage.connections.find(bobSub.id, alice.id)).toBeNull();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ToolDefinition } from "@/types";
|
|
2
2
|
/**
|
|
3
|
-
* Sends a direct message to a friend by
|
|
3
|
+
* Sends a direct message to a friend by nametag.
|
|
4
4
|
* Expects: caller and target are connected with both request flags set.
|
|
5
5
|
*/
|
|
6
6
|
export declare function friendSendToolBuild(): ToolDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendSendToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendSendToolBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AA8BlE;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"friendSendToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendSendToolBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AA8BlE;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAkFpD"}
|
|
@@ -3,33 +3,33 @@ import { xmlEscape } from "../../../util/xmlEscape.js";
|
|
|
3
3
|
import { contextForAgent } from "../../agents/context.js";
|
|
4
4
|
import { messageBuildSystemText } from "../../messages/messageBuildSystemText.js";
|
|
5
5
|
const schema = Type.Object({
|
|
6
|
-
|
|
6
|
+
nametag: Type.String({ minLength: 1 }),
|
|
7
7
|
message: Type.String({ minLength: 1 })
|
|
8
8
|
}, { additionalProperties: false });
|
|
9
9
|
const resultSchema = Type.Object({
|
|
10
10
|
summary: Type.String(),
|
|
11
|
-
|
|
11
|
+
nametag: Type.String()
|
|
12
12
|
}, { additionalProperties: false });
|
|
13
13
|
const returns = {
|
|
14
14
|
schema: resultSchema,
|
|
15
15
|
toLLMText: (result) => result.summary
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
-
* Sends a direct message to a friend by
|
|
18
|
+
* Sends a direct message to a friend by nametag.
|
|
19
19
|
* Expects: caller and target are connected with both request flags set.
|
|
20
20
|
*/
|
|
21
21
|
export function friendSendToolBuild() {
|
|
22
22
|
return {
|
|
23
23
|
tool: {
|
|
24
24
|
name: "friend_send",
|
|
25
|
-
description: "Send a direct message to a friend by
|
|
25
|
+
description: "Send a direct message to a friend by nametag.",
|
|
26
26
|
parameters: schema
|
|
27
27
|
},
|
|
28
28
|
returns,
|
|
29
29
|
visibleByDefault: (context) => context.descriptor.type === "user",
|
|
30
30
|
execute: async (args, toolContext, toolCall) => {
|
|
31
31
|
const payload = args;
|
|
32
|
-
const
|
|
32
|
+
const targetNametag = nametagNormalize(payload.nametag);
|
|
33
33
|
const message = payload.message.trim();
|
|
34
34
|
if (!message) {
|
|
35
35
|
throw new Error("message is required.");
|
|
@@ -40,42 +40,39 @@ export function friendSendToolBuild() {
|
|
|
40
40
|
if (!me) {
|
|
41
41
|
throw new Error("Current user not found.");
|
|
42
42
|
}
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
throw new Error("Current user does not have a usertag.");
|
|
46
|
-
}
|
|
47
|
-
const target = await users.findByUsertag(targetUsertag);
|
|
43
|
+
const myNametag = me.nametag;
|
|
44
|
+
const target = await users.findByNametag(targetNametag);
|
|
48
45
|
if (!target) {
|
|
49
|
-
throw new Error(`User not found for
|
|
46
|
+
throw new Error(`User not found for nametag: ${targetNametag}`);
|
|
50
47
|
}
|
|
51
48
|
if (target.id === me.id) {
|
|
52
49
|
throw new Error("Cannot send to yourself.");
|
|
53
50
|
}
|
|
54
51
|
const connection = await connections.find(me.id, target.id);
|
|
55
|
-
const origin = `friend:${
|
|
52
|
+
const origin = `friend:${myNametag}`;
|
|
56
53
|
const item = {
|
|
57
54
|
type: "system_message",
|
|
58
55
|
origin,
|
|
59
|
-
text: messageBuildSystemText(`Message from ${
|
|
56
|
+
text: messageBuildSystemText(`Message from ${myNametag}: ${xmlEscape(message)}`, origin)
|
|
60
57
|
};
|
|
61
58
|
if (target.parentUserId) {
|
|
62
59
|
if (!connection || !connection.requestedA || !connection.requestedB) {
|
|
63
|
-
throw new Error(`No active shared access to ${
|
|
60
|
+
throw new Error(`No active shared access to ${targetNametag}.`);
|
|
64
61
|
}
|
|
65
62
|
const agents = await toolContext.agentSystem.storage.agents.findMany();
|
|
66
63
|
const gateway = agents.find((agent) => agent.descriptor.type === "subuser" && agent.descriptor.id === target.id);
|
|
67
64
|
if (!gateway) {
|
|
68
|
-
throw new Error(`Gateway agent not found for shared subuser ${
|
|
65
|
+
throw new Error(`Gateway agent not found for shared subuser ${targetNametag}.`);
|
|
69
66
|
}
|
|
70
67
|
await toolContext.agentSystem.post(contextForAgent({ userId: target.id, agentId: gateway.id }), { agentId: gateway.id }, item);
|
|
71
68
|
}
|
|
72
69
|
else {
|
|
73
70
|
if (!connection || !connection.requestedA || !connection.requestedB) {
|
|
74
|
-
throw new Error(`You are not friends with ${
|
|
71
|
+
throw new Error(`You are not friends with ${targetNametag}.`);
|
|
75
72
|
}
|
|
76
73
|
await toolContext.agentSystem.postToUserAgents(target.id, item);
|
|
77
74
|
}
|
|
78
|
-
const summary = `Sent message to ${
|
|
75
|
+
const summary = `Sent message to ${targetNametag}.`;
|
|
79
76
|
const toolMessage = {
|
|
80
77
|
role: "toolResult",
|
|
81
78
|
toolCallId: toolCall.id,
|
|
@@ -88,16 +85,16 @@ export function friendSendToolBuild() {
|
|
|
88
85
|
toolMessage,
|
|
89
86
|
typedResult: {
|
|
90
87
|
summary,
|
|
91
|
-
|
|
88
|
+
nametag: targetNametag
|
|
92
89
|
}
|
|
93
90
|
};
|
|
94
91
|
}
|
|
95
92
|
};
|
|
96
93
|
}
|
|
97
|
-
function
|
|
94
|
+
function nametagNormalize(value) {
|
|
98
95
|
const normalized = value.trim().toLowerCase();
|
|
99
96
|
if (!normalized) {
|
|
100
|
-
throw new Error("
|
|
97
|
+
throw new Error("nametag is required.");
|
|
101
98
|
}
|
|
102
99
|
return normalized;
|
|
103
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendSendToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendSendToolBuild.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CACtB;IACI,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;CACzC,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAClC,CAAC;AAIF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAC5B;IACI,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;CACzB,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAClC,CAAC;AAIF,MAAM,OAAO,GAAyC;IAClD,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAC/B,OAAO;QACH,IAAI,EAAE;YACF,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,+CAA+C;YAC5D,UAAU,EAAE,MAAM;SACrB;QACD,OAAO;QACP,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM;QACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,IAAsB,CAAC;YACvC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YACpD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;YAChE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"friendSendToolBuild.js","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendSendToolBuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,13 @@ describe("friendSendToolBuild", () => {
|
|
|
6
6
|
it("sends a friend message to the target user's frontend agents", async () => {
|
|
7
7
|
const storage = Storage.open(":memory:");
|
|
8
8
|
try {
|
|
9
|
-
const alice = await storage.users.create({ id: "alice",
|
|
10
|
-
const bob = await storage.users.create({ id: "bob",
|
|
9
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
10
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
11
11
|
await storage.connections.upsertRequest(alice.id, bob.id, 100);
|
|
12
12
|
await storage.connections.upsertRequest(bob.id, alice.id, 200);
|
|
13
13
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
14
14
|
const tool = friendSendToolBuild();
|
|
15
|
-
const result = await tool.execute({
|
|
15
|
+
const result = await tool.execute({ nametag: "swift-fox-42", message: "Hello <friend> & crew" }, contextBuild(alice.id, storage, postToUserAgents), toolCall);
|
|
16
16
|
expect(result.typedResult.summary).toContain("Sent message");
|
|
17
17
|
expect(postToUserAgents).toHaveBeenCalledWith(bob.id, expect.objectContaining({
|
|
18
18
|
type: "system_message",
|
|
@@ -27,10 +27,10 @@ describe("friendSendToolBuild", () => {
|
|
|
27
27
|
it("fails when users are not friends", async () => {
|
|
28
28
|
const storage = Storage.open(":memory:");
|
|
29
29
|
try {
|
|
30
|
-
const alice = await storage.users.create({ id: "alice",
|
|
31
|
-
await storage.users.create({ id: "bob",
|
|
30
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
31
|
+
await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
32
32
|
const tool = friendSendToolBuild();
|
|
33
|
-
await expect(tool.execute({
|
|
33
|
+
await expect(tool.execute({ nametag: "swift-fox-42", message: "Hello" }, contextBuild(alice.id, storage, vi.fn(async () => undefined)), toolCall)).rejects.toThrow("You are not friends");
|
|
34
34
|
}
|
|
35
35
|
finally {
|
|
36
36
|
storage.close();
|
|
@@ -39,13 +39,13 @@ describe("friendSendToolBuild", () => {
|
|
|
39
39
|
it("sends to a shared subuser gateway agent", async () => {
|
|
40
40
|
const storage = Storage.open(":memory:");
|
|
41
41
|
try {
|
|
42
|
-
const alice = await storage.users.create({ id: "alice",
|
|
43
|
-
const bob = await storage.users.create({ id: "bob",
|
|
42
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
43
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
44
44
|
const subuser = await storage.users.create({
|
|
45
45
|
id: "alice-sub-1",
|
|
46
46
|
parentUserId: alice.id,
|
|
47
47
|
name: "helper",
|
|
48
|
-
|
|
48
|
+
nametag: "cool-cat-11"
|
|
49
49
|
});
|
|
50
50
|
await storage.agents.create({
|
|
51
51
|
id: "subuser-gateway",
|
|
@@ -65,7 +65,7 @@ describe("friendSendToolBuild", () => {
|
|
|
65
65
|
const postToUserAgents = vi.fn(async () => undefined);
|
|
66
66
|
const post = vi.fn(async () => undefined);
|
|
67
67
|
const tool = friendSendToolBuild();
|
|
68
|
-
const result = await tool.execute({
|
|
68
|
+
const result = await tool.execute({ nametag: "cool-cat-11", message: "Hello helper" }, contextBuild(bob.id, storage, postToUserAgents, post), toolCall);
|
|
69
69
|
expect(result.typedResult.summary).toContain("Sent message");
|
|
70
70
|
expect(post).toHaveBeenCalledWith(expect.objectContaining({ userId: "alice-sub-1" }), { agentId: "subuser-gateway" }, expect.objectContaining({
|
|
71
71
|
type: "system_message",
|
|
@@ -81,17 +81,17 @@ describe("friendSendToolBuild", () => {
|
|
|
81
81
|
it("fails when subuser share is not active", async () => {
|
|
82
82
|
const storage = Storage.open(":memory:");
|
|
83
83
|
try {
|
|
84
|
-
const alice = await storage.users.create({ id: "alice",
|
|
85
|
-
const bob = await storage.users.create({ id: "bob",
|
|
84
|
+
const alice = await storage.users.create({ id: "alice", nametag: "happy-penguin-42" });
|
|
85
|
+
const bob = await storage.users.create({ id: "bob", nametag: "swift-fox-42" });
|
|
86
86
|
const subuser = await storage.users.create({
|
|
87
87
|
id: "alice-sub-1",
|
|
88
88
|
parentUserId: alice.id,
|
|
89
89
|
name: "helper",
|
|
90
|
-
|
|
90
|
+
nametag: "cool-cat-11"
|
|
91
91
|
});
|
|
92
92
|
await storage.connections.upsertRequest(subuser.id, bob.id, 100);
|
|
93
93
|
const tool = friendSendToolBuild();
|
|
94
|
-
await expect(tool.execute({
|
|
94
|
+
await expect(tool.execute({ nametag: "cool-cat-11", message: "Hello" }, contextBuild(bob.id, storage, vi.fn(async () => undefined), vi.fn(async () => undefined)), toolCall)).rejects.toThrow("No active shared access");
|
|
95
95
|
}
|
|
96
96
|
finally {
|
|
97
97
|
storage.close();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolDefinition } from "@/types";
|
|
2
2
|
/**
|
|
3
3
|
* Shares one of the caller-owned subusers with an existing friend.
|
|
4
|
-
* Expects: caller owns subuserId and caller is already friends with
|
|
4
|
+
* Expects: caller owns subuserId and caller is already friends with friendNametag.
|
|
5
5
|
*/
|
|
6
6
|
export declare function friendShareSubuserToolBuild(): ToolDefinition;
|
|
7
7
|
//# sourceMappingURL=friendShareSubuserToolBuild.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"friendShareSubuserToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendShareSubuserToolBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AA+BlE;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"friendShareSubuserToolBuild.d.ts","sourceRoot":"","sources":["../../../../sources/engine/modules/tools/friendShareSubuserToolBuild.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,SAAS,CAAC;AA+BlE;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,cAAc,CAgG5D"}
|