@stratusagent/agents 0.14.0 → 0.14.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/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/schedules.d.ts +19 -0
- package/dist/schedules.d.ts.map +1 -1
- package/dist/schedules.js.map +1 -1
- package/dist/tools/channel.d.ts +97 -1
- package/dist/tools/channel.d.ts.map +1 -1
- package/dist/tools/channel.js +131 -0
- package/dist/tools/channel.js.map +1 -1
- package/dist/tools/gateway-only.d.ts.map +1 -1
- package/dist/tools/gateway-only.js +4 -1
- package/dist/tools/gateway-only.js.map +1 -1
- package/dist/tools/message.d.ts +20 -1
- package/dist/tools/message.d.ts.map +1 -1
- package/dist/tools/message.js +190 -28
- package/dist/tools/message.js.map +1 -1
- package/package.json +2 -2
- package/skills/stratus/SKILL.md +10 -9
package/dist/index.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ export { type AgentRouteRule, type AgentRouter, createAgentRouter, createAgentTe
|
|
|
8
8
|
export { MEMORY_TOOL_NAME, createRememberTool, RECALL_TOOL_NAME, createRecallTool, FORGET_TOOL_NAME, createForgetTool, PIN_TOOL_NAME, createPinTool, type MemoryToolOptions, } from './tools/memory.ts';
|
|
9
9
|
export { DELEGATE_TOOL_NAME, DELEGATED_BY_METADATA_KEY, ROOT_SESSION_ID_METADATA_KEY, DELEGATION_DEPTH_METADATA_KEY, DELEGATED_SESSION_ID_MARKER, DEFAULT_MAX_DELEGATION_DEPTH, isDelegatedSession, delegatingSessionIdOf, outstandingDelegationFor, withoutDelegation, type DelegateDispatch, type DelegateToolOptions, createDelegateTool, } from './tools/delegate.ts';
|
|
10
10
|
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_ON_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from './tools/schedule.ts';
|
|
11
|
-
export { MESSAGE_SEND_TOOL_NAME, type OutboundMessenger, createMessageSendTool, type DefaultThreadResolver, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_TEXT_BUDGET, type ConversationReader, type ConversationReadRefusal, createMessageReadTool, directMessageReadRefusal, } from './tools/message.ts';
|
|
12
|
-
export { CHANNEL_CREATE_TOOL_NAME, type ConversationCreator, createChannelCreateTool, } from './tools/channel.ts';
|
|
11
|
+
export { MESSAGE_SEND_TOOL_NAME, type OutboundMessenger, createMessageSendTool, type DefaultThreadResolver, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_IMAGE_BYTES, MESSAGE_READ_MAX_IMAGES, MESSAGE_READ_TEXT_BUDGET, type ConversationReader, type ConversationReadRefusal, createMessageReadTool, directMessageReadRefusal, } from './tools/message.ts';
|
|
12
|
+
export { CHANNEL_ARCHIVE_TOOL_NAME, CHANNEL_CREATE_TOOL_NAME, CHANNEL_INVITE_TOOL_NAME, CHANNEL_JOIN_TOOL_NAME, type ConversationArchiveRefusal, type ConversationArchiver, type ConversationCreator, type ConversationInviter, type ConversationJoiner, createChannelArchiveTool, createChannelCreateTool, createChannelInviteTool, createChannelJoinTool, } from './tools/channel.ts';
|
|
13
13
|
export { CREDENTIAL_REQUEST_TOOL_NAME, type CredentialRequester, createCredentialRequestTool, } from './tools/credentials.ts';
|
|
14
14
|
export { COMMAND_OPTION_VARIABLES, GIT_REPOSITORY_VARIABLES, SHELL_STARTUP_VARIABLES, credentialVariableProblem, } from './credential-env.ts';
|
|
15
15
|
export { GATEWAY_ONLY_TOOL_NAMES } from './tools/gateway-only.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,mBAAmB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,8 +13,8 @@ export { createAgentRouter, createAgentTeam, } from "./router.js";
|
|
|
13
13
|
export { MEMORY_TOOL_NAME, createRememberTool, RECALL_TOOL_NAME, createRecallTool, FORGET_TOOL_NAME, createForgetTool, PIN_TOOL_NAME, createPinTool, } from "./tools/memory.js";
|
|
14
14
|
export { DELEGATE_TOOL_NAME, DELEGATED_BY_METADATA_KEY, ROOT_SESSION_ID_METADATA_KEY, DELEGATION_DEPTH_METADATA_KEY, DELEGATED_SESSION_ID_MARKER, DEFAULT_MAX_DELEGATION_DEPTH, isDelegatedSession, delegatingSessionIdOf, outstandingDelegationFor, withoutDelegation, createDelegateTool, } from "./tools/delegate.js";
|
|
15
15
|
export { SCHEDULE_EVERY_TOOL_NAME, SCHEDULE_AT_TOOL_NAME, SCHEDULE_ON_TOOL_NAME, SCHEDULE_LIST_TOOL_NAME, SCHEDULE_CANCEL_TOOL_NAME, createScheduleTools, } from "./tools/schedule.js";
|
|
16
|
-
export { MESSAGE_SEND_TOOL_NAME, createMessageSendTool, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_TEXT_BUDGET, createMessageReadTool, directMessageReadRefusal, } from "./tools/message.js";
|
|
17
|
-
export { CHANNEL_CREATE_TOOL_NAME, createChannelCreateTool, } from "./tools/channel.js";
|
|
16
|
+
export { MESSAGE_SEND_TOOL_NAME, createMessageSendTool, MESSAGE_READ_TOOL_NAME, MESSAGE_READ_MAX_LIMIT, MESSAGE_READ_BOOKMARK_BUDGET, MESSAGE_READ_IMAGE_BYTES, MESSAGE_READ_MAX_IMAGES, MESSAGE_READ_TEXT_BUDGET, createMessageReadTool, directMessageReadRefusal, } from "./tools/message.js";
|
|
17
|
+
export { CHANNEL_ARCHIVE_TOOL_NAME, CHANNEL_CREATE_TOOL_NAME, CHANNEL_INVITE_TOOL_NAME, CHANNEL_JOIN_TOOL_NAME, createChannelArchiveTool, createChannelCreateTool, createChannelInviteTool, createChannelJoinTool, } from "./tools/channel.js";
|
|
18
18
|
export { CREDENTIAL_REQUEST_TOOL_NAME, createCredentialRequestTool, } from "./tools/credentials.js";
|
|
19
19
|
export { COMMAND_OPTION_VARIABLES, GIT_REPOSITORY_VARIABLES, SHELL_STARTUP_VARIABLES, credentialVariableProblem, } from "./credential-env.js";
|
|
20
20
|
export { GATEWAY_ONLY_TOOL_NAMES } from "./tools/gateway-only.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE,mDAAmD;AAEnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAGjB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAE9B,kBAAkB,EAGlB,qBAAqB,EAErB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAGhB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAG3B,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAIL,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EAGjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EAEtB,qBAAqB,EAErB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EAGxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE,mDAAmD;AAEnD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EACL,iBAAiB,EAGjB,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,4BAA4B,EAC5B,8BAA8B,EAE9B,kBAAkB,EAGlB,qBAAqB,EAErB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAGhB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAG3B,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAIL,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,iBAAiB,EACjB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EAGjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EAEtB,qBAAqB,EAErB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EAGxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EAMtB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,4BAA4B,EAE5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/schedules.d.ts
CHANGED
|
@@ -88,6 +88,25 @@ export interface ScheduleRecord {
|
|
|
88
88
|
* — it is the approval's scope) from one whose turn is over (delete it).
|
|
89
89
|
*/
|
|
90
90
|
lastSessionId?: string;
|
|
91
|
+
/**
|
|
92
|
+
* How many runs of this schedule in a row ended stopped early
|
|
93
|
+
* (`Session.stoppedEarly`), counted when the next firing is claimed and
|
|
94
|
+
* written with that claim. Absent is 0. At 2 or more the firing is told
|
|
95
|
+
* it's a repeat (card 858).
|
|
96
|
+
*/
|
|
97
|
+
stoppedEarlyStreak?: number;
|
|
98
|
+
/**
|
|
99
|
+
* The checkpoint the firing in `lastSessionId` resumed from, kept until
|
|
100
|
+
* that firing's session exists: `firing` is that firing's session id and
|
|
101
|
+
* `from` the stopped run whose summary it carried. If the daemon dies
|
|
102
|
+
* between the claim and the session's creation, the next claim finds no
|
|
103
|
+
* session at `lastSessionId` and resumes from `from` instead of starting
|
|
104
|
+
* over. Only used while `firing` still equals `lastSessionId`.
|
|
105
|
+
*/
|
|
106
|
+
resumeFrom?: {
|
|
107
|
+
firing: string;
|
|
108
|
+
from: string;
|
|
109
|
+
};
|
|
91
110
|
}
|
|
92
111
|
/** `every` strings: a positive integer and one unit — `90s`, `10m`, `2h`, `1d`. */
|
|
93
112
|
export declare const parseInterval: (text: string) => number | undefined;
|
package/dist/schedules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS3D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,aAAa,mBAAmB,KAAG,MACA,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC1B;IACA,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEJ,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"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"}
|
package/dist/schedules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"AA8BA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAgC,EAAU,EAAE,CAC/E,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../src/schedules.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/channel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Tool } from '@stratusagent/core';
|
|
1
|
+
import type { Session, Tool } from '@stratusagent/core';
|
|
2
2
|
export declare const CHANNEL_CREATE_TOOL_NAME = "channel.create";
|
|
3
3
|
/**
|
|
4
4
|
* Creates one conversation through the agent's own channel app. The
|
|
@@ -41,4 +41,100 @@ export type ConversationCreator = (input: {
|
|
|
41
41
|
* channel decides what its app may create.
|
|
42
42
|
*/
|
|
43
43
|
export declare const createChannelCreateTool: (create: ConversationCreator) => Tool;
|
|
44
|
+
export declare const CHANNEL_JOIN_TOOL_NAME = "channel.join";
|
|
45
|
+
export declare const CHANNEL_INVITE_TOOL_NAME = "channel.invite";
|
|
46
|
+
/**
|
|
47
|
+
* Joins one existing conversation with the agent's own channel app, over
|
|
48
|
+
* the channel contract's `joinConversation`, mirrored here like
|
|
49
|
+
* `ConversationCreator`.
|
|
50
|
+
*/
|
|
51
|
+
export type ConversationJoiner = (input: {
|
|
52
|
+
agentId: string;
|
|
53
|
+
/** The channel kind, e.g. `slack`. */
|
|
54
|
+
channel: string;
|
|
55
|
+
conversation: string;
|
|
56
|
+
}) => Promise<{
|
|
57
|
+
conversation: string;
|
|
58
|
+
alreadyMember: boolean;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Invites people to one existing conversation through the agent's own
|
|
62
|
+
* channel app, over the channel contract's `inviteToConversation`.
|
|
63
|
+
* Rejecting means nobody was invited.
|
|
64
|
+
*/
|
|
65
|
+
export type ConversationInviter = (input: {
|
|
66
|
+
agentId: string;
|
|
67
|
+
/** The channel kind, e.g. `slack`. */
|
|
68
|
+
channel: string;
|
|
69
|
+
conversation: string;
|
|
70
|
+
/** Channel-native user ids, or agent ids the channel resolves to their app. */
|
|
71
|
+
invite: string[];
|
|
72
|
+
}) => Promise<{
|
|
73
|
+
invited: string[];
|
|
74
|
+
notInvited: Array<{
|
|
75
|
+
who: string;
|
|
76
|
+
reason: string;
|
|
77
|
+
}>;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Join an existing public channel with the agent's own app, so it can read
|
|
81
|
+
* the channel and be mentioned there without a person adding it.
|
|
82
|
+
*
|
|
83
|
+
* `gated`, like `channel.create`: Slack starts sending the agent the
|
|
84
|
+
* channel's messages. Who gets a turn does not change, since principals
|
|
85
|
+
* and admit still decide. The result names the channel by id only: its
|
|
86
|
+
* name and topic are whatever its members typed.
|
|
87
|
+
*/
|
|
88
|
+
export declare const createChannelJoinTool: (join: ConversationJoiner) => Tool;
|
|
89
|
+
/**
|
|
90
|
+
* Invite people and other agents to a channel that already exists, through
|
|
91
|
+
* the agent's own app, which has to be in it.
|
|
92
|
+
*
|
|
93
|
+
* `gated`, like `channel.create`: everyone invited to a private channel can
|
|
94
|
+
* read its history. The approval prompt shows the channel and each
|
|
95
|
+
* invitee. A rejection means nobody was invited; anything else comes back
|
|
96
|
+
* with who was and who was not.
|
|
97
|
+
*/
|
|
98
|
+
export declare const createChannelInviteTool: (invite: ConversationInviter) => Tool;
|
|
99
|
+
export declare const CHANNEL_ARCHIVE_TOOL_NAME = "channel.archive";
|
|
100
|
+
/**
|
|
101
|
+
* Archives one conversation the agent's own channel app created, over the
|
|
102
|
+
* channel contract's `archiveConversation`. It takes the asking session
|
|
103
|
+
* too, because the gateway refuses to archive the conversation the work
|
|
104
|
+
* was asked from, and only the session says which one that is. Rejecting
|
|
105
|
+
* means the conversation was not archived, or that it is unknown.
|
|
106
|
+
*/
|
|
107
|
+
export type ConversationArchiver = (input: {
|
|
108
|
+
agentId: string;
|
|
109
|
+
/** The channel kind, e.g. `slack`. */
|
|
110
|
+
channel: string;
|
|
111
|
+
conversation: string;
|
|
112
|
+
}, session: Session) => Promise<{
|
|
113
|
+
conversation: string;
|
|
114
|
+
alreadyArchived: boolean;
|
|
115
|
+
}>;
|
|
116
|
+
/**
|
|
117
|
+
* A refusal the host can tell before anyone is asked about a
|
|
118
|
+
* `channel.archive` call (the conversation the work was asked from), so
|
|
119
|
+
* nobody approves an archive that is bound to fail. Undefined when it has
|
|
120
|
+
* nothing to say; the archiver still refuses the same call itself.
|
|
121
|
+
*/
|
|
122
|
+
export type ConversationArchiveRefusal = (input: {
|
|
123
|
+
agentId: string;
|
|
124
|
+
channel: string;
|
|
125
|
+
conversation: string;
|
|
126
|
+
}, session: Session) => Promise<string | undefined>;
|
|
127
|
+
/**
|
|
128
|
+
* Archive a channel the agent's own app created, so test and one-off
|
|
129
|
+
* channels don't stay open until a person cleans them up.
|
|
130
|
+
*
|
|
131
|
+
* `gated`, like `channel.create`: archiving takes the channel out of its
|
|
132
|
+
* members' sidebars, and the agent can't undo it. The channel decides what
|
|
133
|
+
* its app may archive, and Slack's adapter refuses anything the app didn't create.
|
|
134
|
+
* Nothing is deleted: a person can unarchive it. The result names the
|
|
135
|
+
* channel by id only, since members can rename a channel after it is made.
|
|
136
|
+
*/
|
|
137
|
+
export declare const createChannelArchiveTool: (archive: ConversationArchiver, options?: {
|
|
138
|
+
refusalFor?: ConversationArchiveRefusal;
|
|
139
|
+
}) => Tool;
|
|
44
140
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/tools/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/tools/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/channel.js
CHANGED
|
@@ -87,4 +87,135 @@ export const createChannelCreateTool = (create) => ({
|
|
|
87
87
|
};
|
|
88
88
|
},
|
|
89
89
|
});
|
|
90
|
+
export const CHANNEL_JOIN_TOOL_NAME = 'channel.join';
|
|
91
|
+
export const CHANNEL_INVITE_TOOL_NAME = 'channel.invite';
|
|
92
|
+
const requiredText = (tool, input, key, what) => {
|
|
93
|
+
const value = typeof input[key] === 'string' ? input[key].trim() : '';
|
|
94
|
+
if (!value) {
|
|
95
|
+
throw new Error(`${tool} requires "${key}", ${what}.`);
|
|
96
|
+
}
|
|
97
|
+
return value;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Join an existing public channel with the agent's own app, so it can read
|
|
101
|
+
* the channel and be mentioned there without a person adding it.
|
|
102
|
+
*
|
|
103
|
+
* `gated`, like `channel.create`: Slack starts sending the agent the
|
|
104
|
+
* channel's messages. Who gets a turn does not change, since principals
|
|
105
|
+
* and admit still decide. The result names the channel by id only: its
|
|
106
|
+
* name and topic are whatever its members typed.
|
|
107
|
+
*/
|
|
108
|
+
export const createChannelJoinTool = (join) => ({
|
|
109
|
+
name: CHANNEL_JOIN_TOOL_NAME,
|
|
110
|
+
description: 'Join an existing public channel with your own app, by its id (for Slack, C…, from the channel\'s link or a message). '
|
|
111
|
+
+ 'Joining a channel you are already in changes nothing and says alreadyMember. '
|
|
112
|
+
+ 'An app can never join a private channel on its own: a member has to invite it.',
|
|
113
|
+
risk: 'gated',
|
|
114
|
+
parameters: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
channel: { type: 'string', description: 'The channel kind, e.g. "slack".' },
|
|
118
|
+
conversation: { type: 'string', description: 'The id of the channel to join (for Slack, C…), not its name.' },
|
|
119
|
+
},
|
|
120
|
+
required: ['channel', 'conversation'],
|
|
121
|
+
},
|
|
122
|
+
async execute(input, session) {
|
|
123
|
+
const channel = requiredText(CHANNEL_JOIN_TOOL_NAME, input, 'channel', 'the channel kind (e.g. "slack")');
|
|
124
|
+
const conversation = requiredText(CHANNEL_JOIN_TOOL_NAME, input, 'conversation', 'the id of the channel to join');
|
|
125
|
+
const result = await join({ agentId: session.agent.id, channel, conversation });
|
|
126
|
+
return { joined: true, channel, conversation: result.conversation, alreadyMember: result.alreadyMember === true };
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* Invite people and other agents to a channel that already exists, through
|
|
131
|
+
* the agent's own app, which has to be in it.
|
|
132
|
+
*
|
|
133
|
+
* `gated`, like `channel.create`: everyone invited to a private channel can
|
|
134
|
+
* read its history. The approval prompt shows the channel and each
|
|
135
|
+
* invitee. A rejection means nobody was invited; anything else comes back
|
|
136
|
+
* with who was and who was not.
|
|
137
|
+
*/
|
|
138
|
+
export const createChannelInviteTool = (invite) => ({
|
|
139
|
+
name: CHANNEL_INVITE_TOOL_NAME,
|
|
140
|
+
description: 'Invite people and other agents to an existing channel your own app is in, by the channel\'s id (for Slack, C…). '
|
|
141
|
+
+ 'invite takes the channel\'s user ids (for Slack, U…) and other agents\' ids on this host, which resolve to their apps. '
|
|
142
|
+
+ 'notInvited says who was not added and why; report those rather than retrying everyone. '
|
|
143
|
+
+ 'If your app is not in the channel, join it first with channel.join (public channels only).',
|
|
144
|
+
risk: 'gated',
|
|
145
|
+
parameters: {
|
|
146
|
+
type: 'object',
|
|
147
|
+
properties: {
|
|
148
|
+
channel: { type: 'string', description: 'The channel kind, e.g. "slack".' },
|
|
149
|
+
conversation: { type: 'string', description: 'The id of the channel to invite them to (for Slack, C…), not its name.' },
|
|
150
|
+
invite: {
|
|
151
|
+
type: 'array',
|
|
152
|
+
items: { type: 'string' },
|
|
153
|
+
minItems: 1,
|
|
154
|
+
description: 'Who to invite: user ids, or agent ids on this host.',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
required: ['channel', 'conversation', 'invite'],
|
|
158
|
+
},
|
|
159
|
+
async execute(input, session) {
|
|
160
|
+
const channel = requiredText(CHANNEL_INVITE_TOOL_NAME, input, 'channel', 'the channel kind (e.g. "slack")');
|
|
161
|
+
const conversation = requiredText(CHANNEL_INVITE_TOOL_NAME, input, 'conversation', 'the id of the channel to invite them to');
|
|
162
|
+
const raw = input.invite;
|
|
163
|
+
if (raw === undefined || raw === null || (Array.isArray(raw) && raw.length === 0)) {
|
|
164
|
+
throw new Error(`${CHANNEL_INVITE_TOOL_NAME}: "invite" must list at least one user or agent id.`);
|
|
165
|
+
}
|
|
166
|
+
if (!Array.isArray(raw) || raw.some((entry) => typeof entry !== 'string' || entry.trim().length === 0)) {
|
|
167
|
+
throw new Error(`${CHANNEL_INVITE_TOOL_NAME}: "invite" must be a list of non-empty ids.`);
|
|
168
|
+
}
|
|
169
|
+
const unique = [...new Set(raw.map((entry) => entry.trim()))];
|
|
170
|
+
const result = await invite({ agentId: session.agent.id, channel, conversation, invite: unique });
|
|
171
|
+
return {
|
|
172
|
+
channel,
|
|
173
|
+
conversation,
|
|
174
|
+
invited: [...result.invited],
|
|
175
|
+
notInvited: result.notInvited.map(({ who, reason }) => ({ who, reason })),
|
|
176
|
+
};
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
export const CHANNEL_ARCHIVE_TOOL_NAME = 'channel.archive';
|
|
180
|
+
/**
|
|
181
|
+
* Archive a channel the agent's own app created, so test and one-off
|
|
182
|
+
* channels don't stay open until a person cleans them up.
|
|
183
|
+
*
|
|
184
|
+
* `gated`, like `channel.create`: archiving takes the channel out of its
|
|
185
|
+
* members' sidebars, and the agent can't undo it. The channel decides what
|
|
186
|
+
* its app may archive, and Slack's adapter refuses anything the app didn't create.
|
|
187
|
+
* Nothing is deleted: a person can unarchive it. The result names the
|
|
188
|
+
* channel by id only, since members can rename a channel after it is made.
|
|
189
|
+
*/
|
|
190
|
+
export const createChannelArchiveTool = (archive, options = {}) => ({
|
|
191
|
+
name: CHANNEL_ARCHIVE_TOOL_NAME,
|
|
192
|
+
description: 'Archive a channel your own app created (for example with channel.create), by its id (for Slack, C…). '
|
|
193
|
+
+ 'Channels another user or app created are refused, and so is the conversation you were asked from. '
|
|
194
|
+
+ 'You can\'t undo an archive: messages are kept, and a person can unarchive the channel in Slack. '
|
|
195
|
+
+ 'Archiving a channel that is already archived changes nothing and says alreadyArchived.',
|
|
196
|
+
risk: 'gated',
|
|
197
|
+
parameters: {
|
|
198
|
+
type: 'object',
|
|
199
|
+
properties: {
|
|
200
|
+
channel: { type: 'string', description: 'The channel kind, e.g. "slack".' },
|
|
201
|
+
conversation: { type: 'string', description: 'The id of the channel to archive (for Slack, C…), not its name.' },
|
|
202
|
+
},
|
|
203
|
+
required: ['channel', 'conversation'],
|
|
204
|
+
},
|
|
205
|
+
...(options.refusalFor !== undefined
|
|
206
|
+
? {
|
|
207
|
+
async refusalFor(input, session) {
|
|
208
|
+
const channel = typeof input.channel === 'string' ? input.channel.trim() : '';
|
|
209
|
+
const conversation = typeof input.conversation === 'string' ? input.conversation.trim() : '';
|
|
210
|
+
return channel && conversation ? options.refusalFor?.({ agentId: session.agent.id, channel, conversation }, session) : undefined;
|
|
211
|
+
},
|
|
212
|
+
}
|
|
213
|
+
: {}),
|
|
214
|
+
async execute(input, session) {
|
|
215
|
+
const channel = requiredText(CHANNEL_ARCHIVE_TOOL_NAME, input, 'channel', 'the channel kind (e.g. "slack")');
|
|
216
|
+
const conversation = requiredText(CHANNEL_ARCHIVE_TOOL_NAME, input, 'conversation', 'the id of the channel to archive');
|
|
217
|
+
const result = await archive({ agentId: session.agent.id, channel, conversation }, session);
|
|
218
|
+
return { archived: true, channel, conversation: result.conversation, alreadyArchived: result.alreadyArchived === true };
|
|
219
|
+
},
|
|
220
|
+
});
|
|
90
221
|
//# sourceMappingURL=channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/tools/channel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/tools/channel.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AA0BzD,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,GAAW,EAAsB,EAAE;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,MAAM,GAAG,gCAAgC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AACnC,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA2B,EAAQ,EAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,iIAAiI;UAC1I,yHAAyH;UACzH,+FAA+F;UAC/F,0GAA0G;UAC1G,kGAAkG;IACtG,IAAI,EAAE,OAAO;IACb,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;YAC3F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;YACtF,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8CAA8C,EAAE;YACzF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC/D,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACrF,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,uFAAuF;aACrG;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;KAC9B;IACD,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,uDAAuD,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,+BAA+B,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,oCAAoC,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,MAA4B,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,6CAA6C,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAE,GAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO;YACP,IAAI;YACJ,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACxD,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,cAAc,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AA4BzD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAiB,EAAE,GAAW,EAAE,IAAY,EAAU,EAAE;IAC1F,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,GAAG,CAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,cAAc,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAwB,EAAQ,EAAE,CAAC,CAAC;IACxE,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,uHAAuH;UAChI,+EAA+E;UAC/E,gFAAgF;IACpF,IAAI,EAAE,OAAO;IACb,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;YAC3E,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;SAC9G;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;KACtC;IACD,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAC1G,MAAM,YAAY,GAAG,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,cAAc,EAAE,+BAA+B,CAAC,CAAC;QAClH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI,EAAgB,CAAC;IAClI,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA2B,EAAQ,EAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,kHAAkH;UAC3H,yHAAyH;UACzH,yFAAyF;UACzF,4FAA4F;IAChG,IAAI,EAAE,OAAO;IACb,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;YAC3E,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wEAAwE,EAAE;YACvH,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,qDAAqD;aACnE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC;KAChD;IACD,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAC5G,MAAM,YAAY,GAAG,YAAY,CAAC,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,yCAAyC,CAAC,CAAC;QAC9H,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,qDAAqD,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,GAAG,wBAAwB,6CAA6C,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAE,GAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAClG,OAAO;YACL,OAAO;YACP,YAAY;YACZ,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;SAC5D,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AA8B3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAA6B,EAC7B,UAAuD,EAAE,EACnD,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,uGAAuG;UAChH,oGAAoG;UACpG,kGAAkG;UAClG,wFAAwF;IAC5F,IAAI,EAAE,OAAO;IACb,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;YAC3E,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;SACjH;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;KACtC;IACD,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS;QAClC,CAAC,CAAC;YACE,KAAK,CAAC,UAAU,CAAC,KAAiB,EAAE,OAAgB;gBAClD,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,OAAO,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnI,CAAC;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACP,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,iCAAiC,CAAC,CAAC;QAC7G,MAAM,YAAY,GAAG,YAAY,CAAC,yBAAyB,EAAE,KAAK,EAAE,cAAc,EAAE,kCAAkC,CAAC,CAAC;QACxH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5F,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,KAAK,IAAI,EAAgB,CAAC;IACxI,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-only.d.ts","sourceRoot":"","sources":["../../src/tools/gateway-only.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"gateway-only.d.ts","sourceRoot":"","sources":["../../src/tools/gateway-only.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAcpD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CHANNEL_CREATE_TOOL_NAME } from "./channel.js";
|
|
1
|
+
import { CHANNEL_ARCHIVE_TOOL_NAME, CHANNEL_CREATE_TOOL_NAME, CHANNEL_INVITE_TOOL_NAME, CHANNEL_JOIN_TOOL_NAME } from "./channel.js";
|
|
2
2
|
import { CREDENTIAL_REQUEST_TOOL_NAME } from "./credentials.js";
|
|
3
3
|
import { DELEGATE_TOOL_NAME } from "./delegate.js";
|
|
4
4
|
import { MESSAGE_READ_TOOL_NAME, MESSAGE_SEND_TOOL_NAME } from "./message.js";
|
|
@@ -29,6 +29,9 @@ export const GATEWAY_ONLY_TOOL_NAMES = [
|
|
|
29
29
|
MESSAGE_SEND_TOOL_NAME,
|
|
30
30
|
MESSAGE_READ_TOOL_NAME,
|
|
31
31
|
CHANNEL_CREATE_TOOL_NAME,
|
|
32
|
+
CHANNEL_JOIN_TOOL_NAME,
|
|
33
|
+
CHANNEL_INVITE_TOOL_NAME,
|
|
34
|
+
CHANNEL_ARCHIVE_TOOL_NAME,
|
|
32
35
|
DELEGATE_TOOL_NAME,
|
|
33
36
|
CREDENTIAL_REQUEST_TOOL_NAME,
|
|
34
37
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-only.js","sourceRoot":"","sources":["../../src/tools/gateway-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-only.js","sourceRoot":"","sources":["../../src/tools/gateway-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACrI,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,uBAAuB;IACvB,yBAAyB;IACzB,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,sBAAsB;IACtB,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAClB,4BAA4B;CAC7B,CAAC"}
|
package/dist/tools/message.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Session, type Tool, type TrustLevel } from '@stratusagent/core';
|
|
1
|
+
import { type ImageAttachment, type Session, type Tool, type TrustLevel } from '@stratusagent/core';
|
|
2
2
|
import { type ScheduleDestination } from '../schedules.ts';
|
|
3
3
|
export declare const MESSAGE_SEND_TOOL_NAME = "message.send";
|
|
4
4
|
/**
|
|
@@ -68,6 +68,15 @@ export declare const MESSAGE_READ_TEXT_BUDGET = 40000;
|
|
|
68
68
|
* lists them all in one call.
|
|
69
69
|
*/
|
|
70
70
|
export declare const MESSAGE_READ_BOOKMARK_BUDGET = 16000;
|
|
71
|
+
/**
|
|
72
|
+
* The most images one read shows the model. They are kept in the session
|
|
73
|
+
* and replayed on later turns inside the replay window, so a read of a
|
|
74
|
+
* busy channel must not fill that window with screenshots it was not
|
|
75
|
+
* asked about; the agent reads a narrower window to see more.
|
|
76
|
+
*/
|
|
77
|
+
export declare const MESSAGE_READ_MAX_IMAGES = 5;
|
|
78
|
+
/** The most decoded image bytes one read shows the model, together. */
|
|
79
|
+
export declare const MESSAGE_READ_IMAGE_BYTES: number;
|
|
71
80
|
/**
|
|
72
81
|
* Reads one conversation, or one thread in it, through the agent's own
|
|
73
82
|
* channel app. The gateway implements it over the channel contract's
|
|
@@ -83,6 +92,14 @@ export type ConversationReader = (input: {
|
|
|
83
92
|
after?: string;
|
|
84
93
|
before?: string;
|
|
85
94
|
limit: number;
|
|
95
|
+
/**
|
|
96
|
+
* Fetch the messages' images, up to this many and this many bytes for
|
|
97
|
+
* the whole read; absent, files come back by name only.
|
|
98
|
+
*/
|
|
99
|
+
images?: {
|
|
100
|
+
count: number;
|
|
101
|
+
bytes: number;
|
|
102
|
+
};
|
|
86
103
|
}) => Promise<{
|
|
87
104
|
messages: Array<{
|
|
88
105
|
id: string;
|
|
@@ -93,6 +110,8 @@ export type ConversationReader = (input: {
|
|
|
93
110
|
thread?: string;
|
|
94
111
|
replies?: number;
|
|
95
112
|
files?: string[];
|
|
113
|
+
images?: ImageAttachment[];
|
|
114
|
+
imageNotes?: string[];
|
|
96
115
|
}>;
|
|
97
116
|
more: boolean;
|
|
98
117
|
bookmarks?: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/message.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sessionWriteTrust } from '@stratusagent/core';
|
|
1
|
+
import { createImageCollector, sessionWriteTrust } from '@stratusagent/core';
|
|
2
2
|
import { canonicalDestination, parseDestinationInput, DESTINATION_PARAMETER, } from "../schedules.js";
|
|
3
3
|
export const MESSAGE_SEND_TOOL_NAME = 'message.send';
|
|
4
4
|
/**
|
|
@@ -102,6 +102,15 @@ export const MESSAGE_READ_TEXT_BUDGET = 40_000;
|
|
|
102
102
|
*/
|
|
103
103
|
export const MESSAGE_READ_BOOKMARK_BUDGET = 16_000;
|
|
104
104
|
const TRUNCATED_MARK = ' [... the rest of this message is not shown]';
|
|
105
|
+
/**
|
|
106
|
+
* The most images one read shows the model. They are kept in the session
|
|
107
|
+
* and replayed on later turns inside the replay window, so a read of a
|
|
108
|
+
* busy channel must not fill that window with screenshots it was not
|
|
109
|
+
* asked about; the agent reads a narrower window to see more.
|
|
110
|
+
*/
|
|
111
|
+
export const MESSAGE_READ_MAX_IMAGES = 5;
|
|
112
|
+
/** The most decoded image bytes one read shows the model, together. */
|
|
113
|
+
export const MESSAGE_READ_IMAGE_BYTES = 10 * 1024 * 1024;
|
|
105
114
|
const optionalId = (input, key, tool = MESSAGE_READ_TOOL_NAME) => {
|
|
106
115
|
const value = input[key];
|
|
107
116
|
if (value === undefined || value === null) {
|
|
@@ -116,6 +125,82 @@ const optionalId = (input, key, tool = MESSAGE_READ_TOOL_NAME) => {
|
|
|
116
125
|
export const directMessageReadRefusal = (destination) => `message.read cannot read ${destination}: it is a direct message this conversation is not in, and a direct message is read only from inside it. `
|
|
117
126
|
+ 'This is not a permission, so approval cannot unlock it; do not ask for one or try again. '
|
|
118
127
|
+ 'Read a channel instead, or ask the person to paste what you need.';
|
|
128
|
+
const errorText = (error) => (error instanceof Error ? error.message : String(error));
|
|
129
|
+
/**
|
|
130
|
+
* The longest image name a read repeats. A name is whatever the channel
|
|
131
|
+
* says, and it is said again in `shownImages` and in every note, so it is
|
|
132
|
+
* bounded like any other text the read carries.
|
|
133
|
+
*/
|
|
134
|
+
const IMAGE_NAME_MAX = 200;
|
|
135
|
+
const imageNameOf = (image, index) => {
|
|
136
|
+
const name = image.name ?? `image ${index + 1}`;
|
|
137
|
+
return name.length <= IMAGE_NAME_MAX ? name : `${name.slice(0, IMAGE_NAME_MAX)}…`;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Decides, message by message in the order they are listed, which of their
|
|
141
|
+
* images a read shows, before any message is measured, so the text sent is
|
|
142
|
+
* the text measured: the names shown and every note about the rest are in
|
|
143
|
+
* it. Held to the read's own cap whatever the channel returned, since the
|
|
144
|
+
* images stay in the session and replay on later turns. Once one does not
|
|
145
|
+
* fit, none after it is shown either, so what the agent sees is one
|
|
146
|
+
* unbroken stretch of the read. Each image is put through core's own image
|
|
147
|
+
* check, the one the runner's `attachImage` applies, so an image that
|
|
148
|
+
* would be refused is said here rather than after the budget is spent.
|
|
149
|
+
*/
|
|
150
|
+
const createImagePlan = () => {
|
|
151
|
+
const check = createImageCollector();
|
|
152
|
+
let count = 0;
|
|
153
|
+
let bytes = 0;
|
|
154
|
+
let full;
|
|
155
|
+
return (images) => {
|
|
156
|
+
const shown = [];
|
|
157
|
+
const notes = [];
|
|
158
|
+
images.forEach((image, index) => {
|
|
159
|
+
const name = imageNameOf(image, index);
|
|
160
|
+
const size = Buffer.byteLength(image.data, 'base64');
|
|
161
|
+
if (full === undefined && count >= MESSAGE_READ_MAX_IMAGES) {
|
|
162
|
+
full = `past this read's cap of ${MESSAGE_READ_MAX_IMAGES} images`;
|
|
163
|
+
}
|
|
164
|
+
else if (full === undefined && bytes + size > MESSAGE_READ_IMAGE_BYTES) {
|
|
165
|
+
full = `past this read's cap of ${MESSAGE_READ_IMAGE_BYTES / (1024 * 1024)} MB of images`;
|
|
166
|
+
}
|
|
167
|
+
if (full !== undefined) {
|
|
168
|
+
notes.push(`${name} is not shown: ${full}.`);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
check.attach(image);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
notes.push(`${name} is not shown: ${errorText(error)}`);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
count += 1;
|
|
179
|
+
bytes += size;
|
|
180
|
+
shown.push({ image, name });
|
|
181
|
+
});
|
|
182
|
+
return { shown, notes };
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* The most a cut message's image notes may take: a message too big for
|
|
187
|
+
* the whole budget keeps its notes only up to this, and counts the rest,
|
|
188
|
+
* as it does its file list.
|
|
189
|
+
*/
|
|
190
|
+
const CUT_IMAGE_NOTES_BUDGET = 4_000;
|
|
191
|
+
const boundedNotes = (notes) => {
|
|
192
|
+
const kept = [];
|
|
193
|
+
let size = 2;
|
|
194
|
+
for (const note of notes) {
|
|
195
|
+
const length = JSON.stringify(note).length + 1;
|
|
196
|
+
if (size + length > CUT_IMAGE_NOTES_BUDGET) {
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
kept.push(note);
|
|
200
|
+
size += length;
|
|
201
|
+
}
|
|
202
|
+
return kept.length === notes.length ? [...notes] : [...kept, `${notes.length - kept.length} more notes about images, not listed`];
|
|
203
|
+
};
|
|
119
204
|
export const createMessageReadTool = (read, options = {}) => ({
|
|
120
205
|
name: MESSAGE_READ_TOOL_NAME,
|
|
121
206
|
description: 'Read recent messages in a channel your app is a member of, or one thread in it. '
|
|
@@ -126,7 +211,10 @@ export const createMessageReadTool = (read, options = {}) => ({
|
|
|
126
211
|
+ 'and a thread_ts in the link is the thread to read. '
|
|
127
212
|
+ 'When more is true, page on with before (top level) or after (thread) set to the last id returned. '
|
|
128
213
|
+ 'A top-level read without before or after also returns the channel\'s bookmarks, when it has any; '
|
|
129
|
-
+ 'if bookmarksOmitted is set, say that many were left out rather than guess them.'
|
|
214
|
+
+ 'if bookmarksOmitted is set, say that many were left out rather than guess them. '
|
|
215
|
+
+ `Images on the messages read are shown to you after this result, at most ${MESSAGE_READ_MAX_IMAGES} per read, `
|
|
216
|
+
+ 'in the order the messages list them in shownImages; imageNotes says why any other image on a message was not shown, '
|
|
217
|
+
+ 'so never describe an image you were not shown. To see images past the cap, read fewer messages.',
|
|
130
218
|
risk: 'gated',
|
|
131
219
|
outputTrust: 'external',
|
|
132
220
|
parameters: {
|
|
@@ -155,11 +243,14 @@ export const createMessageReadTool = (read, options = {}) => ({
|
|
|
155
243
|
},
|
|
156
244
|
}
|
|
157
245
|
: {}),
|
|
158
|
-
async execute(input, session) {
|
|
246
|
+
async execute(input, session, context) {
|
|
159
247
|
const source = parseDestinationInput(input.source);
|
|
160
248
|
if (!source) {
|
|
161
249
|
throw new Error('message.read requires "source" as { channel, to } with non-empty strings.');
|
|
162
250
|
}
|
|
251
|
+
// Images are asked for only when this host can show the model one; a
|
|
252
|
+
// host that cannot gets names, as every read did before images.
|
|
253
|
+
const attachImage = context?.attachImage;
|
|
163
254
|
const thread = optionalId(input, 'thread');
|
|
164
255
|
const after = optionalId(input, 'after');
|
|
165
256
|
const before = optionalId(input, 'before');
|
|
@@ -174,6 +265,7 @@ export const createMessageReadTool = (read, options = {}) => ({
|
|
|
174
265
|
...(thread !== undefined ? { thread } : {}),
|
|
175
266
|
...(after !== undefined ? { after } : {}),
|
|
176
267
|
...(before !== undefined ? { before } : {}),
|
|
268
|
+
...(attachImage !== undefined ? { images: { count: MESSAGE_READ_MAX_IMAGES, bytes: MESSAGE_READ_IMAGE_BYTES } } : {}),
|
|
177
269
|
});
|
|
178
270
|
// Bookmarks first, from their own share, in the channel's order.
|
|
179
271
|
const bookmarks = [];
|
|
@@ -197,52 +289,122 @@ export const createMessageReadTool = (read, options = {}) => ({
|
|
|
197
289
|
: 0;
|
|
198
290
|
const bookmarksOmitted = upstreamOmitted + (result.bookmarks?.length ?? 0) - bookmarks.length;
|
|
199
291
|
const messages = [];
|
|
292
|
+
// Each kept message's images, held beside it rather than in it: the
|
|
293
|
+
// budget is text, and the pixels never join the result's text.
|
|
294
|
+
const pending = [];
|
|
295
|
+
const plan = attachImage !== undefined ? createImagePlan() : undefined;
|
|
200
296
|
let more = result.more;
|
|
201
|
-
for (const
|
|
297
|
+
for (const read of result.messages) {
|
|
298
|
+
const { images, imageNotes, ...rest } = read;
|
|
299
|
+
const decided = plan !== undefined && images !== undefined && images.length > 0 ? plan(images) : undefined;
|
|
300
|
+
const notes = [...(imageNotes ?? []), ...(decided?.notes ?? [])];
|
|
301
|
+
// Measured as it is sent: the names of the images it shows, and the
|
|
302
|
+
// notes on the rest, are text; their bytes are not.
|
|
303
|
+
const message = {
|
|
304
|
+
...rest,
|
|
305
|
+
...(decided !== undefined && decided.shown.length > 0 ? { shownImages: decided.shown.map(({ name }) => name) } : {}),
|
|
306
|
+
...(notes.length > 0 ? { imageNotes: notes } : {}),
|
|
307
|
+
};
|
|
202
308
|
const size = JSON.stringify(message).length;
|
|
203
309
|
if (used + size <= MESSAGE_READ_TEXT_BUDGET) {
|
|
204
|
-
messages.push(
|
|
310
|
+
messages.push(message);
|
|
311
|
+
if (decided !== undefined && decided.shown.length > 0) {
|
|
312
|
+
pending.push({ message, shown: decided.shown });
|
|
313
|
+
}
|
|
205
314
|
used += size;
|
|
206
315
|
continue;
|
|
207
316
|
}
|
|
208
317
|
// One message bigger than the whole budget is cut rather than
|
|
209
318
|
// dropped, or the read could never get past it. Its file list goes
|
|
210
|
-
// too, said by count,
|
|
211
|
-
//
|
|
212
|
-
//
|
|
319
|
+
// too, said by count, and its image notes are kept only up to their
|
|
320
|
+
// own share, since either can be as long as any text. One that
|
|
321
|
+
// would fit on its own, crowded out only by the bookmarks ahead of
|
|
322
|
+
// it, loses about what they took rather than half.
|
|
213
323
|
if (messages.length === 0) {
|
|
214
|
-
const { files, ...
|
|
324
|
+
const { files, imageNotes: allNotes, ...unlisted } = message;
|
|
325
|
+
const kept = allNotes !== undefined ? boundedNotes(allNotes) : undefined;
|
|
215
326
|
const cutTo = (keep) => ({
|
|
216
|
-
...
|
|
327
|
+
...unlisted,
|
|
217
328
|
text: message.text.slice(0, Math.max(0, keep)) + TRUNCATED_MARK,
|
|
218
329
|
...(files && files.length > 0 ? { files: [`${files.length} files, not listed`] } : {}),
|
|
330
|
+
...(kept !== undefined ? { imageNotes: kept } : {}),
|
|
219
331
|
});
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
332
|
+
// The longest cut that fits, measured as serialized, since escapes
|
|
333
|
+
// make the text longer and may sit anywhere in it: up to the whole
|
|
334
|
+
// text for one only the bookmarks crowded out, otherwise half.
|
|
335
|
+
const room = MESSAGE_READ_TEXT_BUDGET - used;
|
|
336
|
+
const fits = (keep) => JSON.stringify(cutTo(keep)).length <= room;
|
|
337
|
+
const ceiling = used > 0 && size <= MESSAGE_READ_TEXT_BUDGET ? message.text.length : MESSAGE_READ_TEXT_BUDGET / 2;
|
|
338
|
+
let low = 0;
|
|
339
|
+
if (fits(ceiling)) {
|
|
340
|
+
low = ceiling;
|
|
341
|
+
}
|
|
342
|
+
else if (fits(0)) {
|
|
343
|
+
let high = ceiling;
|
|
344
|
+
while (low < high) {
|
|
345
|
+
const middle = Math.ceil((low + high) / 2);
|
|
346
|
+
if (fits(middle)) {
|
|
347
|
+
low = middle;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
high = middle - 1;
|
|
237
351
|
}
|
|
238
|
-
cut = cutTo(low);
|
|
239
352
|
}
|
|
240
353
|
}
|
|
354
|
+
const cut = cutTo(low);
|
|
241
355
|
messages.push(cut);
|
|
356
|
+
if (decided !== undefined && decided.shown.length > 0) {
|
|
357
|
+
pending.push({ message: cut, shown: decided.shown });
|
|
358
|
+
}
|
|
359
|
+
used += JSON.stringify(cut).length;
|
|
242
360
|
}
|
|
243
361
|
more = true;
|
|
244
362
|
break;
|
|
245
363
|
}
|
|
364
|
+
// Shown only now, once every message that carries one is kept. Core's
|
|
365
|
+
// own check already passed each of them; a host whose attachImage has
|
|
366
|
+
// rules of its own can still refuse one, and then the image leaves
|
|
367
|
+
// shownImages, and why is said only where it fits what is left of the
|
|
368
|
+
// budget.
|
|
369
|
+
if (attachImage !== undefined) {
|
|
370
|
+
for (const { message, shown } of pending) {
|
|
371
|
+
const names = [];
|
|
372
|
+
const refusals = [];
|
|
373
|
+
for (const { image, name } of shown) {
|
|
374
|
+
try {
|
|
375
|
+
attachImage(image);
|
|
376
|
+
names.push(name);
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
refusals.push(`${name} is not shown: ${errorText(error)}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (refusals.length === 0) {
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
let before = JSON.stringify(message).length;
|
|
386
|
+
if (names.length > 0) {
|
|
387
|
+
message.shownImages = names;
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
delete message.shownImages;
|
|
391
|
+
}
|
|
392
|
+
used += JSON.stringify(message).length - before;
|
|
393
|
+
for (const refusal of refusals) {
|
|
394
|
+
before = JSON.stringify(message).length;
|
|
395
|
+
message.imageNotes = [...(message.imageNotes ?? []), refusal];
|
|
396
|
+
const grown = JSON.stringify(message).length - before;
|
|
397
|
+
if (used + grown > MESSAGE_READ_TEXT_BUDGET) {
|
|
398
|
+
message.imageNotes = message.imageNotes.slice(0, -1);
|
|
399
|
+
if (message.imageNotes.length === 0) {
|
|
400
|
+
delete message.imageNotes;
|
|
401
|
+
}
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
used += grown;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
246
408
|
return {
|
|
247
409
|
source: canonicalDestination(source),
|
|
248
410
|
...(thread !== undefined ? { thread } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAgCrD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAuB,EACvB,UAAqD,EAAE,EACjD,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,4HAA4H;UACrI,8EAA8E;UAC9E,0FAA0F;UAC1F,kHAAkH;IACtH,IAAI,EAAE,OAAO;IACb,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,GAAG,qBAAqB;gBACxB,WAAW,EAAE,0EAA0E;aACxF;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;YAC1D,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gOAAgO;aAC9O;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,qFAAqF;aACnG;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;KAClC;IACD,cAAc,CAAC,KAAiB;QAC9B,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7D,OAAO,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QACrE,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACjH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,WAAW;YACX,IAAI;YACJ,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE;SACtE,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,qEAAqE;QACrE,oEAAoE;QACpE,mEAAmE;QACnE,+DAA+D;QAC/D,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC;YAC9C,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAErD,yDAAyD;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,MAAM,cAAc,GAAG,8CAA8C,CAAC;AAkCtE,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,GAAW,EAAE,IAAI,GAAG,sBAAsB,EAAsB,EAAE;IACvG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,0CAA0C,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAyBF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAmB,EAAU,EAAE,CACtE,4BAA4B,WAAW,0GAA0G;MAC/I,2FAA2F;MAC3F,mEAAmE,CAAC;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAwB,EACxB,UAAoD,EAAE,EAChD,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,kFAAkF;UAC3F,qIAAqI;UACrI,2GAA2G;UAC3G,oEAAoE;UACpE,iGAAiG;UACjG,qDAAqD;UACrD,oGAAoG;UACpG,mGAAmG;UACnG,iFAAiF;IACrF,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,GAAG,qBAAqB;gBACxB,WAAW,EAAE,qFAAqF;aACnG;YACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;YAC5G,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;YACzF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;YAC3F,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sBAAsB,0BAA0B,wBAAwB,sBAAsB,GAAG,EAAE;SAC3I;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD,cAAc,CAAC,KAAiB;QAC9B,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS;QAClC,CAAC,CAAC;YACE,KAAK,CAAC,UAAU,CAAC,KAAiB,EAAE,OAAgB;gBAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnD,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjH,CAAC;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACP,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,OAAgB;QAC/C,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;YAC/F,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC;YAC/C,CAAC,CAAC,0BAA0B,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM;YACN,KAAK;YACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,iEAAiE;QACjE,MAAM,SAAS,GAA2C,EAAE,CAAC;QAC7D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC9C,oEAAoE;YACpE,4BAA4B;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,4BAA4B,EAAE,CAAC;gBACnD,MAAM;YACR,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;QACD,iEAAiE;QACjE,MAAM,eAAe,GAAG,OAAO,MAAM,CAAC,gBAAgB,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC;YAC7I,CAAC,CAAC,MAAM,CAAC,gBAAgB;YACzB,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,gBAAgB,GAAG,eAAe,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAC9F,MAAM,QAAQ,GAAuE,EAAE,CAAC;QACxF,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAC5C,IAAI,IAAI,GAAG,IAAI,IAAI,wBAAwB,EAAE,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;gBAC9B,IAAI,IAAI,IAAI,CAAC;gBACb,SAAS;YACX,CAAC;YACD,8DAA8D;YAC9D,mEAAmE;YACnE,+DAA+D;YAC/D,mEAAmE;YACnE,4DAA4D;YAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;gBACnC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;oBAC/B,GAAG,IAAI;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,cAAc;oBAC/D,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvF,CAAC,CAAC;gBACH,IAAI,GAAG,GAAG,KAAK,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,wBAAwB,EAAE,CAAC;oBACjD,2DAA2D;oBAC3D,2DAA2D;oBAC3D,MAAM,IAAI,GAAG,wBAAwB,GAAG,IAAI,CAAC;oBAC7C,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;oBAC1E,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;wBACZ,IAAI,GAAG,GAAG,CAAC,CAAC;wBACZ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC/B,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;4BAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gCACjB,GAAG,GAAG,MAAM,CAAC;4BACf,CAAC;iCAAM,CAAC;gCACN,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;4BACpB,CAAC;wBACH,CAAC;wBACD,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM;QACR,CAAC;QACD,OAAO;YACL,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;YACpC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,IAAI;YACJ,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3G,QAAQ;SACK,CAAC;IAClB,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stratusagent/agents",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"node": ">=22.13 <23 || >=23.4"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@stratusagent/core": "0.14.
|
|
21
|
+
"@stratusagent/core": "0.14.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^24.6.0",
|
package/skills/stratus/SKILL.md
CHANGED
|
@@ -94,13 +94,14 @@ When you need a named credential you do not hold, first make sure a tool you hav
|
|
|
94
94
|
- **A form**, in Slack, goes up in this conversation when one of `approvals.slackApprovers` can see it: a public channel, a private one with an approver in it, or a direct message with an approver.
|
|
95
95
|
- **A link** comes back otherwise, or when you pass `via: "link"`, but only if your soul's `tools:` lists `credential.request` (or you have no `tools:` key); without that, it is a form or nothing. It needs the control API, and without `api.publicUrl` it opens only on the daemon's machine. Anyone who has the link can set the key, once, within 30 minutes, with no approver involved, and opening it spends nothing. So give it only to your operator. In a shared channel, or a direct message with anyone else, do not post it: ask your operator to message you directly, and ask again there. Pass `via: "form"` to get a form or nothing.
|
|
96
96
|
- Either way the key goes straight to the store and the name into your soul, and you can use it from your next reply. A restart cancels a request still waiting.
|
|
97
|
+
- **A key that spans lines**, such as a GitHub App's PEM private key: the link's field keeps line breaks and the Slack form's one-line field does not, so ask for a new one with `via: "link"`. Replacing one is form-only, so for a multi-line replacement ask your operator to run `stratus credential set <name> --agent <your id> < key.pem` on the machine instead. A PEM key that arrives with its line breaks lost is refused, so nothing broken is stored.
|
|
97
98
|
2. **Otherwise, ask your operator to run, on the machine:**
|
|
98
99
|
|
|
99
100
|
```
|
|
100
101
|
read -rs KEY && printf %s "$KEY" | stratus credential set <name> --agent <your id>
|
|
101
102
|
```
|
|
102
103
|
|
|
103
|
-
(leave out `--agent` for a shared one), and to add `<name>` to `credentials:` in your soul.
|
|
104
|
+
(leave out `--agent` for a shared one; for a key file, `stratus credential set <name> --agent <your id> < key.pem`), and to add `<name>` to `credentials:` in your soul.
|
|
104
105
|
|
|
105
106
|
Away from the machine, the control API and a link only **add**: they store a name nobody has stored, and refuse one already stored or supplied by the daemon's environment. The Slack form adds too, and it is the one way to **replace** a key from chat. When one you hold is expiring or was revoked, call `credential.request` with `replace: true`. That is always a form an approver answers in this conversation, never a link. It is refused before anyone is asked when you don't hold the key, when it comes from the daemon's environment, or when your `scope` doesn't match where it is stored: a shared key needs `scope: "shared"`, because replacing it changes the key for every agent granted it. The new value is used from the next tool call or command. At the machine, `stratus credential set` replaces as well, and `stratus credential remove` is the only way to remove one. Each add or replace from a form or a link appends a line to `~/.stratus/credential-audit.log`, names only, with the variable when one was bound, and so does each `stratus credential env`. `stratus credentials` lists the names stored, shared and per agent, and what each agent's shell reads, never the values.
|
|
106
107
|
|
|
@@ -114,7 +115,7 @@ When a stored key "isn't found", check in this order:
|
|
|
114
115
|
|
|
115
116
|
## Tools, plugins, and approvals
|
|
116
117
|
|
|
117
|
-
- **Built in everywhere:** `memory.*` (remember, recall, forget, pin) and `skill.read`, which every agent has because this skill counts. **Only under the daemon:** `schedule.*`, `message.send`, `message.read`, `channel.create`, `agent.delegate`, and `credential.request`, so `stratus run` and `stratus chat` cannot call them.
|
|
118
|
+
- **Built in everywhere:** `memory.*` (remember, recall, forget, pin) and `skill.read`, which every agent has because this skill counts. **Only under the daemon:** `schedule.*`, `message.send`, `message.read`, `channel.create`, `channel.join`, `channel.invite`, `channel.archive`, `agent.delegate`, and `credential.request`, so `stratus run` and `stratus chat` cannot call them.
|
|
118
119
|
- **Plugins** add the rest, each installed with `npm install -g <package>` and enabled under `plugins` in the trusted config:
|
|
119
120
|
- `@stratusagent/tool-fs` gives `fs.*`, inside configured roots only, so with no roots there is no filesystem. Whatever the roots, `fs.*` never reaches `~/.stratus` outside the agents' workspaces (credentials, config, logs, sessions, memories, souls, skills, grants), so a refusal there is by design, not a roots problem. Roots go in `"@stratusagent/tool-fs": { "enabled": true, "roots": ["~/notes"] }`, or under `"agents": { "<id>": { "roots": [...] } }` for one agent.
|
|
120
121
|
- `@stratusagent/tool-shell` gives `shell.run`.
|
|
@@ -125,7 +126,7 @@ When a stored key "isn't found", check in this order:
|
|
|
125
126
|
- Enabled is not granted: your soul's `tools:` must also cover a plugin's tools. `stratus plugins` walks the whole chain for each tool (installed, enabled, granted to which agents, and what approvals do with a call), so it answers "why can't you use X" in one command.
|
|
126
127
|
- **Risk.** Every tool is `safe`, `gated`, or `dangerous`. The daemon runs `safe` tools unattended, among them `memory.*`, `skill.read`, `credential.request`, `agent.delegate`, `schedule.list`, `schedule.cancel`, and `fs.read`, `fs.list`, and `fs.search`. Gated tools include:
|
|
127
128
|
- `web.fetch`, `fs.write`, `fs.move`, `shell.run`, `browser.*`, and `mcp.*`;
|
|
128
|
-
- `schedule.every`, `schedule.at`, `schedule.on` (an event trigger: your prompt runs when a signed delivery from a source the operator configured passes your filter, labeled `external`; it is refused for a source the daemon doesn't have), `message.send`, `message.read` (which reads a channel your Slack app is in, or the DM you're talking in, never any other DM, and labels what it returns `external`; a top-level read also returns the channel's bookmarks, which need the `bookmarks:read` scope; a DM read is refused before any approval prompt, since approving can't make it run), and `channel.create` (which makes a channel with your own app and invites people and agents; on Slack it needs the `channels:manage` or `groups:write` scope, which apps don't have by default, and a failed invite or topic is reported while the channel stays, so don't retry the create);
|
|
129
|
+
- `schedule.every`, `schedule.at`, `schedule.on` (an event trigger: your prompt runs when a signed delivery from a source the operator configured passes your filter, labeled `external`; it is refused for a source the daemon doesn't have), `message.send`, `message.read` (which reads a channel your Slack app is in, or the DM you're talking in, never any other DM, and labels what it returns `external`; a top-level read also returns the channel's bookmarks, which need the `bookmarks:read` scope; images on the messages read are shown to you after the result, at most 5 and 10 MB per read, with Slack's preview for one over 5 MB, and each message's `shownImages` and `imageNotes` say which you were shown and why any other wasn't, so read fewer messages to see the rest and never describe an image you weren't shown; a DM read is refused before any approval prompt, since approving can't make it run), and `channel.create` (which makes a channel with your own app and invites people and agents; on Slack it needs the `channels:manage` or `groups:write` scope, which apps don't have by default, and a failed invite or topic is reported while the channel stays, so don't retry the create), `channel.join` (which joins an existing public channel with your own app, by its `C…` id, never a name; on Slack it needs the `channels:join` scope, and a private channel can't be joined at all: a member has to invite your app) and `channel.invite` (which invites people and agents to a channel your app is already in; on Slack it needs `channels:write.invites` or `groups:write.invites`, or the `channel.create` scopes; it fails only when nobody was invited, otherwise `notInvited` says who wasn't and why), and `channel.archive` (which archives a channel your own app created, by its id; it refuses a channel anyone else made, a DM, a shared channel and the conversation you were asked from, that last one before any approval prompt; you can't undo it, but messages are kept and a person can unarchive it in Slack; on Slack it uses the `channel.create` scopes, and it refuses every channel when another agent here shares your Slack app);
|
|
129
130
|
- every third-party tool, `web.search` included.
|
|
130
131
|
- Under the default `approvals.posture: "open"` a gated call runs without asking; what needs approval is a dangerous call (and, under `externalContent: "gate"`, a gated one after external content). Under `"guarded"` every uncovered gated call does. What happens to a call that needs approval depends on the approvals mode. Under `headless` (the default) it is refused. Under `remote` the people in `approvals.slackApprovers` are asked in Slack (or through the control API's `/approvals`) with **Allow once**, **Always allow**, and **Deny**. Under `remote` with nobody to ask, it is refused too.
|
|
131
132
|
- Either way, what was already approved still runs unattended. For `shell.run` that is a command scope, a command granted by name, plus a short built-in safe list (`cd`, `pwd`, `echo`, `true`, `false`, `whoami`, and `uname`; no `git` command, not even `git status`, since git runs programs a repository names), plus `grep`, `head`, `tail`, `wc`, `sort`, and `uniq` as filters that are never handed a path, and `cat`, `head`, `tail`, and `ls` of files inside your workspace. **Always allow** on a command like `grep` grants it by name: any arguments, as long as the line runs in your workspace and every path it names resolves inside it. A command with subcommands (`git push`, `gh pr`) keeps a command-plus-subcommand scope, and shells, interpreters, wrappers like `xargs` or `sudo`, and system commands are never granted by name. A line joined by `&&`, `||`, `;`, or `|` runs unattended when every command in it would on its own, and output may be redirected into your workspace or `/dev/null`; a background `&`, a newline, `$( )`, a heredoc, or a redirection elsewhere still means asking. For `browser.act` and `web.fetch` it is an approved site (a `web.fetch` redirect to another site is reported as `redirectedTo`, not followed), and for other gated tools a standing grant.
|
|
@@ -157,9 +158,9 @@ When a stored key "isn't found", check in this order:
|
|
|
157
158
|
3. The app is missing the history scopes (`channels:history`, `groups:history`, `mpim:history`) and their `message.*` events, which means adding them and reinstalling the app.
|
|
158
159
|
|
|
159
160
|
Not answering at all also happens when the daemon is down, the app was removed from the channel, or the person is not in `principals.slackUsers` and `admit` is `principals`, the default.
|
|
160
|
-
- **Another agent on Slack** needs its own soul on the roster first, then its own Slack app through `stratus setup` → Channels
|
|
161
|
+
- **Another agent on Slack** needs its own soul on the roster first, then its own Slack app through `stratus setup` → Channels or `stratus channel set slack --agent <id>`. Saving the tokens connects it on a daemon that already serves Slack, with no restart; a daemon that started with no Slack app at all needs a restart.
|
|
161
162
|
- **Who counts as your operator** is `principals.slackUsers` in the trusted config. By default (`admit: "principals"`) everyone else is turned away before a turn starts, so an agent that says nothing to someone may simply not admit them. Under `admit: "anyone"` their messages reach you labelled as from someone unknown.
|
|
162
|
-
- **Images** need the `files:read` scope. Text files are read up to a size limit, and anything else reaches you by name only, with the reason. The message says which.
|
|
163
|
+
- **Images** need the `files:read` scope. Text files are read up to a size limit, and anything else reaches you by name only, with the reason. The message says which. Files are only downloaded from Slack's own file host, so a remote file (another app's link to a file hosted outside Slack) reaches you by name only, as not downloaded.
|
|
163
164
|
|
|
164
165
|
## The daemon
|
|
165
166
|
|
|
@@ -168,7 +169,7 @@ When a stored key "isn't found", check in this order:
|
|
|
168
169
|
- On Linux it is a systemd user unit, which needs `loginctl enable-linger` to run while nobody is logged in.
|
|
169
170
|
- It will not start while the trusted config (`~/.stratus/config.json`, or the file `--config` names) fails to parse or validate. The error goes to stderr, not `stratus logs`: on Linux the unit then shows as failed until the file is fixed and `stratus service start` is run; on macOS launchd keeps retrying until the file is fixed. A daemon already running keeps its last good config, and `stratus service start`, `stratus update`, and `stratus restart` refuse up front with the same error rather than restart into it.
|
|
170
171
|
- **`stratus restart`** drains in-flight turns and restarts, and needs the control API. Slack stays connected during the drain: a message addressed to you then gets an "I'm restarting" reply and is answered by the next daemon (kept in `slack-pending-intake.json`, no text). Overheard messages during a drain are not kept. Without the API, use `stratus service stop` then `stratus service start`.
|
|
171
|
-
- A restart is needed after a change to `plugins` (a plugin's `env` included), `approvals`, `api`, `principals`, `slack`, `maxTurns`, `executor`, or `memoryStore`, and after
|
|
172
|
+
- A restart is needed after a change to `plugins` (a plugin's `env` included), `approvals`, `api`, `principals`, `slack`, `maxTurns`, `executor`, or `memoryStore`, and after a channel plugin's new secrets. New Slack tokens connect without one, once the daemon serves Slack.
|
|
172
173
|
- It is not needed for soul edits, stored credentials and keys, the config's `provider`/`model`, or skills (`stratus skill reload`).
|
|
173
174
|
- `stratus update` stops and starts the service itself. Only a daemon someone started with `stratus serve` needs restarting by hand.
|
|
174
175
|
- In a container or under a system unit, `stratus serve --log-format json` also writes the log's records to stdout, for `docker logs`, journald, or a log shipper. `stratus health` is the probe.
|
|
@@ -179,7 +180,7 @@ When a stored key "isn't found", check in this order:
|
|
|
179
180
|
|
|
180
181
|
## When a reply stops or changes model
|
|
181
182
|
|
|
182
|
-
- **"Out of steps."** One message may take `maxTurns` rounds of tool calls (default 40, set in the trusted config, restart to change). Past that you are told you are out of steps, get one last call with no tools, and answer with what you did and what is left. Replying "continue" carries on with a fresh allowance. An agent that does long work should have its own budget raised with `agentMaxTurns: { "<id>": 300 }` in the trusted config (restart to change), which leaves the rest of the fleet on `maxTurns`. With `autoContinue: { "<id>": true }` (or a number, to cap it) an agent is given another budget instead of stopping to ask, until its work is done, its cap is reached, or someone sends it another message meanwhile. Under a kernel-driven provider (Anthropic, OpenAI-compatible), it also stops when stuck on a repeating failure; the `claude-code` runtime runs its own loop and does not have that check, so an uncapped claude-code agent relies on the cap or a new message to stop. It applies to the built-in model loop and the `claude-code` runtime, not yet to `codex`.
|
|
183
|
+
- **"Out of steps."** One message may take `maxTurns` rounds of tool calls (default 40, set in the trusted config, restart to change). Past that you are told you are out of steps, get one last call with no tools, and answer with what you did and what is left. Replying "continue" carries on with a fresh allowance. An agent that does long work should have its own budget raised with `agentMaxTurns: { "<id>": 300 }` in the trusted config (restart to change), which leaves the rest of the fleet on `maxTurns`. With `autoContinue: { "<id>": true }` (or a number, to cap it) an agent is given another budget instead of stopping to ask, until its work is done, its cap is reached, or someone sends it another message meanwhile. Under a kernel-driven provider (Anthropic, OpenAI-compatible), it also stops when stuck on a repeating failure; the `claude-code` runtime runs its own loop and does not have that check, so an uncapped claude-code agent relies on the cap or a new message to stop. It applies to the built-in model loop and the `claude-code` runtime, not yet to `codex`. A message that stopped this way is marked: `stratus sessions` shows it as `completed (stopped early: turn limit)` (or `repeated failure`), `--status stopped-early` lists only those, and the log has a `session.stopped-early` line. The mark clears when the next message in that conversation starts. On a recurring schedule, the next firing starts from that wrap-up: its message is the schedule's prompt followed by when and why the last run stopped and what it said was done and left, so carry on from there instead of starting over. From the second stop in a row it says so; post one line to the schedule's destination only if being stuck blocks someone, since the daemon posts nothing itself.
|
|
183
184
|
- **Stopped with no reply.** On a provider that streams (Anthropic, Codex, and plugin providers that say they stream), the daemon's watchdog aborts a turn when the model reports nothing for `--idle-timeout` seconds (default 120). On one that does not, such as an OpenAI-compatible endpoint, there is no watchdog, and a silent request ends only when the provider's own request fails or times out, so `--idle-timeout` neither explains nor fixes it. The session ends failed, with `no activity for 120000ms`, and `stratus logs --agent <id>` names the last thing it heard. A tool that is running, or a call waiting on an approval, never trips it.
|
|
184
185
|
- **Cut short by a restart.** A daemon that stops or restarts gives running turns 30 seconds, then aborts the rest. A turn started by a Slack message, an event, or an API request that sent an idempotency key is left for the next start, which continues it once, and the person is told you will answer after the restart. Any other turn is marked failed ("stratusd is stopping" or "restarting"), and the message has to be sent again. On Codex or a Claude subscription sign-in, which run their own tool loop, every such turn is marked failed, since continuing could repeat what already ran.
|
|
185
186
|
- **Cut off at the output cap.** A reply longer than the model may write in one turn fails rather than being posted half-finished, and the error says so. With an Anthropic API key that cap is `maxTokens` in the config (default 16000); a Claude subscription run does not take that setting, so raising it changes nothing there. Offer a shorter answer, or, on an API key, ask for the cap to be raised. Never ask for a longer timeout.
|
|
@@ -198,7 +199,7 @@ When a stored key "isn't found", check in this order:
|
|
|
198
199
|
| `stratus logs` | Read the daemon's log |
|
|
199
200
|
| `stratus health` | Whether the running daemon is serving: exit 0 if so, for a container healthcheck or a probe |
|
|
200
201
|
| `stratus events` | What the events port has been doing, per source: the last delivery, the last refusal and why (a webhook with the wrong secret shows here, though it leaves no row), and the last 24 hours of deliveries and firings by status. `--format json` |
|
|
201
|
-
| `stratus sessions` (also `stratus session list`) | The running daemon's sessions, newest first: status, agent, last update, id. `--agent <id>`, `--status <status>` (`running`, `pending_approval`, `failed`, `completed`, `idle`), `--limit <n>` (default 20), `--format json` |
|
|
202
|
+
| `stratus sessions` (also `stratus session list`) | The running daemon's sessions, newest first: status, agent, last update, id. `--agent <id>`, `--status <status>` (`running`, `pending_approval`, `failed`, `completed`, `idle`, or `stopped-early` for runs that ran out of steps and wrapped up), `--limit <n>` (default 20), `--format json` |
|
|
202
203
|
| `stratus doctor` | What a run would use, and why |
|
|
203
204
|
| `stratus update` | Update Stratus and its companion packages (`--check` to look first) |
|
|
204
205
|
| `stratus dashboard` | Open the web dashboard with a one-time sign-in link |
|
|
@@ -232,7 +233,7 @@ Your operator can do more from anywhere they reach the dashboard or the control
|
|
|
232
233
|
Only at the machine can someone:
|
|
233
234
|
|
|
234
235
|
- enable or configure a plugin (its `env` and `headers` included), or choose an executor or memory store;
|
|
235
|
-
- add an event source for `schedule.on`: an `events` block in `~/.stratus/config.json` (`"sources": { "github": { "verify": "github", "secrets": ["events.github"] } }`), the secret stored with `stratus credential set events.github`, and a restart (docs/guides/events.md);
|
|
236
|
+
- add an event source for `schedule.on`: an `events` block in `~/.stratus/config.json` (`"sources": { "github": { "verify": "github", "secrets": ["events.github"] } }`), the secret stored with `stratus credential set events.github`, and a restart (docs/guides/events.md); or a plugin that feeds a source (a poller where no webhook can reach the daemon): its manifest declares the source id, enabling it in `plugins` is the whole setup, and `stratus events` names the plugin;
|
|
236
237
|
- install or update packages;
|
|
237
238
|
- remove a named credential, or replace one without an approver's form;
|
|
238
239
|
- raise a memory's trust (`stratus memory reassert`).
|