@ai-ecoverse/slicc-agent 3.40.1 → 3.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -4
- package/bin/agent +9 -4
- package/dist/client.js +4 -1
- package/dist/client.js.map +2 -2
- package/dist/host.js +59 -21
- package/dist/host.js.map +3 -3
- package/dist/index.js +6 -0
- package/dist/index.js.map +2 -2
- package/dist/licks/config.js +20 -4
- package/dist/licks/config.js.map +2 -2
- package/dist/licks/fswatch.js +2 -1
- package/dist/licks/fswatch.js.map +2 -2
- package/dist/licks/licks.js +31 -4
- package/dist/licks/licks.js.map +3 -3
- package/dist/licks/sources.js +2 -1
- package/dist/licks/sources.js.map +2 -2
- package/dist/licks/triage.js +86 -0
- package/dist/licks/triage.js.map +7 -0
- package/dist/main.js +6 -0
- package/dist/main.js.map +2 -2
- package/dist/owner.js +2 -1
- package/dist/owner.js.map +2 -2
- package/dist/readonly.js +13 -0
- package/dist/readonly.js.map +2 -2
- package/dist/remote/host.js +10 -4
- package/dist/remote/host.js.map +2 -2
- package/dist/remote/pages.js +216 -0
- package/dist/remote/pages.js.map +7 -0
- package/dist/scoops/cli.js +17 -0
- package/dist/scoops/cli.js.map +2 -2
- package/dist/scoops/index.js +4 -2
- package/dist/scoops/index.js.map +2 -2
- package/dist/scoops/requests.js +14 -2
- package/dist/scoops/requests.js.map +2 -2
- package/dist/scoops/service.js.map +1 -1
- package/dist/services.js +2 -0
- package/dist/services.js.map +2 -2
- package/dist/spectrum/index.js +7 -0
- package/dist/spectrum/index.js.map +3 -3
- package/dist/spectrum/page-port.js +132 -0
- package/dist/spectrum/page-port.js.map +7 -0
- package/dist/sprinkles/index.js +1 -2
- package/dist/sprinkles/index.js.map +2 -2
- package/dist/types/client.d.ts +2 -0
- package/dist/types/host.d.ts +8 -3
- package/dist/types/index.d.ts +3 -2
- package/dist/types/licks/config.d.ts +2 -0
- package/dist/types/licks/licks.d.ts +3 -0
- package/dist/types/licks/triage.d.ts +42 -0
- package/dist/types/owner.d.ts +1 -0
- package/dist/types/readonly.d.ts +2 -0
- package/dist/types/remote/host.d.ts +10 -0
- package/dist/types/remote/pages.d.ts +76 -0
- package/dist/types/scoops/cli.d.ts +7 -0
- package/dist/types/scoops/index.d.ts +1 -0
- package/dist/types/scoops/requests.d.ts +2 -1
- package/dist/types/scoops/service.d.ts +1 -0
- package/dist/types/services.d.ts +2 -0
- package/dist/types/spectrum/index.d.ts +4 -0
- package/dist/types/spectrum/page-port.d.ts +32 -0
- package/dist/types/sprinkles/index.d.ts +1 -1
- package/dist/worker.js +2 -1
- package/dist/worker.js.map +2 -2
- package/package.json +1 -1
- package/packages/vfs-root/skills/agent/SKILL.md +2 -0
- package/packages/vfs-root/skills/sprinkles/SKILL.md +1 -1
package/dist/types/services.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { ChangesView } from './changes/git.ts';
|
|
|
4
4
|
import type { FrozenCone } from './freezer/index.ts';
|
|
5
5
|
import type { MemoryEntry, MemoryScope, MemoryTag } from './memory/format.ts';
|
|
6
6
|
import type { AgentRemote } from './remote/host.ts';
|
|
7
|
+
import type { AgentPages } from './remote/pages.ts';
|
|
7
8
|
import type { Sprinkle } from './sprinkles/kind.ts';
|
|
8
9
|
export type SendMode = 'steer' | 'followUp' | 'reject';
|
|
9
10
|
export interface SendRequest {
|
|
@@ -234,6 +235,7 @@ export interface AgentSessions {
|
|
|
234
235
|
}
|
|
235
236
|
export declare const AgentSessions: import("@earendil-works/chord").Service<AgentSessions>;
|
|
236
237
|
export declare const AgentRemoteService: import("@earendil-works/chord").Service<AgentRemote>;
|
|
238
|
+
export declare const AgentPagesService: import("@earendil-works/chord").Service<AgentPages>;
|
|
237
239
|
export declare const AGENT_SESSION = "agent";
|
|
238
240
|
export interface ModelChoice {
|
|
239
241
|
id: string;
|
|
@@ -4,6 +4,7 @@ import { AgentAdapter } from './agent-port.ts';
|
|
|
4
4
|
import { ChangesAdapter } from './changes-port.ts';
|
|
5
5
|
import { MemoryAdapter } from './memory-port.ts';
|
|
6
6
|
import { MonitorAdapter } from './monitor-port.ts';
|
|
7
|
+
import { PageAdapter, type PageOptions } from './page-port.ts';
|
|
7
8
|
import { type Login, SettingsAdapter } from './settings-port.ts';
|
|
8
9
|
import { SprinkleAdapter } from './sprinkle-port.ts';
|
|
9
10
|
import { TrayAdapter } from './tray-port.ts';
|
|
@@ -12,6 +13,7 @@ export { ChangesAdapter, type ChangesEvents } from './changes-port.ts';
|
|
|
12
13
|
export { MemoryAdapter } from './memory-port.ts';
|
|
13
14
|
export { assistant, errorAction, errorPart, isBusy, queued, textOf, toMessages, } from './messages.ts';
|
|
14
15
|
export { MonitorAdapter, type MonitorAdapterOptions, type MonitorInput, monitorSnapshot, } from './monitor-port.ts';
|
|
16
|
+
export { PageAdapter, type PageDocument, type PageOptions, type PageRun, type PageTarget, } from './page-port.ts';
|
|
15
17
|
export { type Login, SETTINGS_KEY, SettingsAdapter } from './settings-port.ts';
|
|
16
18
|
export { SprinkleAdapter } from './sprinkle-port.ts';
|
|
17
19
|
export { TrayAdapter } from './tray-port.ts';
|
|
@@ -21,6 +23,7 @@ export declare function createAgentModel(connection: AgentConnection, options?:
|
|
|
21
23
|
monitor?: {
|
|
22
24
|
extra?: () => readonly MonitorSection[];
|
|
23
25
|
};
|
|
26
|
+
page?: PageOptions;
|
|
24
27
|
}): {
|
|
25
28
|
agent: AgentAdapter;
|
|
26
29
|
settings: SettingsAdapter;
|
|
@@ -29,4 +32,5 @@ export declare function createAgentModel(connection: AgentConnection, options?:
|
|
|
29
32
|
memory: MemoryAdapter;
|
|
30
33
|
changes: ChangesAdapter;
|
|
31
34
|
monitor: MonitorAdapter;
|
|
35
|
+
page: PageAdapter | null;
|
|
32
36
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AgentConnection } from '../client.ts';
|
|
2
|
+
import type { PageCaller, PageResult, PageTab } from '../remote/pages.ts';
|
|
3
|
+
import type { AgentAdapter } from './agent-port.ts';
|
|
4
|
+
export declare const REPORT_MS = 250;
|
|
5
|
+
export declare const POLL_MS = 10000;
|
|
6
|
+
export type PageRun = (argv: readonly string[], caller: PageCaller) => PageResult | Promise<PageResult>;
|
|
7
|
+
export interface PageTarget {
|
|
8
|
+
addEventListener(type: string, listener: () => void, options?: boolean): void;
|
|
9
|
+
removeEventListener(type: string, listener: () => void, options?: boolean): void;
|
|
10
|
+
}
|
|
11
|
+
export interface PageDocument extends PageTarget {
|
|
12
|
+
readonly visibilityState: string;
|
|
13
|
+
hasFocus(): boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface PageOptions {
|
|
16
|
+
tab: string;
|
|
17
|
+
run?: PageRun;
|
|
18
|
+
document?: PageDocument;
|
|
19
|
+
window?: PageTarget;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
reportMs?: number;
|
|
22
|
+
pollMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class PageAdapter {
|
|
25
|
+
#private;
|
|
26
|
+
readonly done: Promise<void>;
|
|
27
|
+
constructor(connection: AgentConnection, agent: AgentAdapter, options: PageOptions & {
|
|
28
|
+
run: PageRun;
|
|
29
|
+
});
|
|
30
|
+
state(): PageTab;
|
|
31
|
+
dispose(): Promise<void>;
|
|
32
|
+
}
|
|
@@ -33,7 +33,7 @@ export interface SprinklesAttach {
|
|
|
33
33
|
dir?: string;
|
|
34
34
|
intercept?: (id: string, payload: SprinklePayload, context: Context) => Promise<boolean>;
|
|
35
35
|
}
|
|
36
|
-
export declare const USAGE = "usage:\n sprinkle list every sprinkle in /home/sprinkles, with its owner\n sprinkle show <name> show a sprinkle in your chat\n sprinkle own <name> [<agent>] send its messages to <agent> (cone, cone-<n> or a scoop's handle)\n\nA sprinkle is an .shtml file in /home/sprinkles, as <name>.shtml or <name>/<name>.shtml.\nEvery one of them has a button in the rail; edit the file and the open panel reloads.\n";
|
|
36
|
+
export declare const USAGE = "usage:\n sprinkle list every sprinkle in /home/sprinkles, with its owner\n sprinkle show <name> show a sprinkle in your chat\n sprinkle own <name> [<agent>] send its messages to <agent> (cone, cone-<n> or a scoop's handle)\n sprinkle open|close <name> the same as panel open|close sprinkle:<name>\n\nA sprinkle is an .shtml file in /home/sprinkles, as <name>.shtml or <name>/<name>.shtml.\nEvery one of them has a button in the rail; edit the file and the open panel reloads.\n";
|
|
37
37
|
export declare function ownerOf(agents: Agents, owner: string | undefined): string;
|
|
38
38
|
export declare function setupSprinkles(): {
|
|
39
39
|
attach(options: SprinklesAttach, context: Context): Promise<SprinklesRuntime>;
|
package/dist/worker.js
CHANGED
|
@@ -3,8 +3,9 @@ function serveConnections(scope, host) {
|
|
|
3
3
|
const message = data;
|
|
4
4
|
const port = message?.connect;
|
|
5
5
|
if (!port) return;
|
|
6
|
+
const pages = message?.pages === false ? { pages: false } : {};
|
|
6
7
|
host.then(
|
|
7
|
-
(ready) => ready.connect(port, { readOnly: message?.readOnly === true }),
|
|
8
|
+
(ready) => ready.connect(port, { readOnly: message?.readOnly === true, ...pages }),
|
|
8
9
|
() => port.close?.()
|
|
9
10
|
);
|
|
10
11
|
});
|
package/dist/worker.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/worker.ts"],
|
|
4
|
-
"sourcesContent": ["import type { AgentHost } from './host.ts';\nimport type { PortEndpoint } from './wire.ts';\n\nexport interface WorkerScope {\n addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;\n}\n\nexport function serveConnections(scope: WorkerScope, host: Promise<AgentHost>): void {\n scope.addEventListener('message', ({ data }) => {\n const message = data as { connect?: PortEndpoint; readOnly?: boolean } | null;\n const port = message?.connect;\n if (!port) return;\n host.then(\n (ready) => ready.connect(port, { readOnly: message?.readOnly === true }),\n () => port.close?.()\n );\n });\n}\n\nexport interface KernelPorts {\n kernel: MessagePort;\n admin?: MessagePort;\n}\n\nexport function kernelPorts(scope: WorkerScope): Promise<KernelPorts> {\n return new Promise((resolve) => {\n scope.addEventListener('message', ({ data }) => {\n const message = data as { kernel?: MessagePort; admin?: MessagePort } | null;\n const kernel = message?.kernel;\n if (!kernel) return;\n resolve(message.admin ? { kernel, admin: message.admin } : { kernel });\n });\n });\n}\n\nexport function kernelPort(scope: WorkerScope): Promise<MessagePort> {\n return kernelPorts(scope).then((ports) => ports.kernel);\n}\n"],
|
|
5
|
-
"mappings": "AAOO,SAAS,iBAAiB,OAAoB,MAAgC;AACnF,QAAM,iBAAiB,WAAW,CAAC,EAAE,KAAK,MAAM;AAC9C,UAAM,UAAU;AAChB,UAAM,OAAO,SAAS;AACtB,QAAI,CAAC,KAAM;AACX,SAAK;AAAA,MACH,CAAC,UAAU,MAAM,QAAQ,MAAM,EAAE,UAAU,SAAS,aAAa,
|
|
4
|
+
"sourcesContent": ["import type { AgentHost } from './host.ts';\nimport type { PortEndpoint } from './wire.ts';\n\nexport interface WorkerScope {\n addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;\n}\n\nexport function serveConnections(scope: WorkerScope, host: Promise<AgentHost>): void {\n scope.addEventListener('message', ({ data }) => {\n const message = data as { connect?: PortEndpoint; readOnly?: boolean; pages?: boolean } | null;\n const port = message?.connect;\n if (!port) return;\n const pages = message?.pages === false ? { pages: false } : {};\n host.then(\n (ready) => ready.connect(port, { readOnly: message?.readOnly === true, ...pages }),\n () => port.close?.()\n );\n });\n}\n\nexport interface KernelPorts {\n kernel: MessagePort;\n admin?: MessagePort;\n}\n\nexport function kernelPorts(scope: WorkerScope): Promise<KernelPorts> {\n return new Promise((resolve) => {\n scope.addEventListener('message', ({ data }) => {\n const message = data as { kernel?: MessagePort; admin?: MessagePort } | null;\n const kernel = message?.kernel;\n if (!kernel) return;\n resolve(message.admin ? { kernel, admin: message.admin } : { kernel });\n });\n });\n}\n\nexport function kernelPort(scope: WorkerScope): Promise<MessagePort> {\n return kernelPorts(scope).then((ports) => ports.kernel);\n}\n"],
|
|
5
|
+
"mappings": "AAOO,SAAS,iBAAiB,OAAoB,MAAgC;AACnF,QAAM,iBAAiB,WAAW,CAAC,EAAE,KAAK,MAAM;AAC9C,UAAM,UAAU;AAChB,UAAM,OAAO,SAAS;AACtB,QAAI,CAAC,KAAM;AACX,UAAM,QAAQ,SAAS,UAAU,QAAQ,EAAE,OAAO,MAAM,IAAI,CAAC;AAC7D,SAAK;AAAA,MACH,CAAC,UAAU,MAAM,QAAQ,MAAM,EAAE,UAAU,SAAS,aAAa,MAAM,GAAG,MAAM,CAAC;AAAA,MACjF,MAAM,KAAK,QAAQ;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAOO,SAAS,YAAY,OAA0C;AACpE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,iBAAiB,WAAW,CAAC,EAAE,KAAK,MAAM;AAC9C,YAAM,UAAU;AAChB,YAAM,SAAS,SAAS;AACxB,UAAI,CAAC,OAAQ;AACb,cAAQ,QAAQ,QAAQ,EAAE,QAAQ,OAAO,QAAQ,MAAM,IAAI,EAAE,OAAO,CAAC;AAAA,IACvE,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,WAAW,OAA0C;AACnE,SAAO,YAAY,KAAK,EAAE,KAAK,CAAC,UAAU,MAAM,MAAM;AACxD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -46,6 +46,8 @@ A scoop starts with your provider, model and thinking level. Use `--model provid
|
|
|
46
46
|
|
|
47
47
|
`models` lists the models you can use, `models current` prints yours, and `models use <provider/model> [--thinking <level>]` switches your own model, as the Settings picker does.
|
|
48
48
|
|
|
49
|
+
`panel list` shows the panels of the SLICC tab showing your cone, and `panel open|close|focus|move <id>` rearranges them (`panel --help` has the rest). Exit 3 means no tab shows your cone, and exit 4 means the tab didn't answer.
|
|
50
|
+
|
|
49
51
|
Without `--tools`, a scoop gets read, write, edit and bash; `--tools read,bash` is an allowlist. grep, find and ls map to bash, and bash can change files, so no tool list is truly read-only. A scoop's read, write and edit tools reach only its folder, /tmp and its working folder, and read /home; its bash is not confined, and the scoop is told so.
|
|
50
52
|
|
|
51
53
|
## Inspect, talk, stop
|
|
@@ -55,4 +55,4 @@ sprinkle show <name> # show it in your chat, inline
|
|
|
55
55
|
sprinkle own <name> [<agent>] # send its licks to an agent: cone, cone-<n> or a scoop's handle
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
To retire a sprinkle, delete its file.
|
|
58
|
+
To retire a sprinkle, delete its file. `sprinkle open <name>` and `sprinkle close <name>` are `panel open sprinkle:<name>` and `panel close sprinkle:<name>`. v6's `reload`, `send` and `chat` don't exist here; the command says what to do instead.
|