@cotal-ai/cli 0.4.0 → 0.5.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/dist/commands/completion.d.ts +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +79 -7
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/personas.d.ts.map +1 -1
- package/dist/commands/personas.js +77 -7
- package/dist/commands/personas.js.map +1 -1
- package/dist/commands/send.d.ts +10 -0
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +29 -44
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +28 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/spawn.d.ts.map +1 -1
- package/dist/commands/spawn.js +14 -8
- package/dist/commands/spawn.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/personas.d.ts +8 -0
- package/dist/lib/personas.d.ts.map +1 -1
- package/dist/lib/personas.js +31 -0
- package/dist/lib/personas.js.map +1 -1
- package/dist/lib/transient.d.ts +27 -0
- package/dist/lib/transient.d.ts.map +1 -0
- package/dist/lib/transient.js +48 -0
- package/dist/lib/transient.js.map +1 -0
- package/dist/web/app.js +143 -44
- package/dist/web/index.html +45 -1
- package/package.json +2 -2
|
@@ -3,6 +3,6 @@ import { type CompletionResult } from "@cotal-ai/core";
|
|
|
3
3
|
* including the (possibly empty) word being completed. */
|
|
4
4
|
export declare function complete(argv: string[]): Promise<void>;
|
|
5
5
|
export declare function completion(argv: string[]): Promise<void>;
|
|
6
|
-
/** Argument completion for `cotal completion` itself: the supported shells
|
|
6
|
+
/** Argument completion for `cotal completion` itself: the supported shells, plus `install`. */
|
|
7
7
|
export declare function completionComplete(argv: string[]): CompletionResult;
|
|
8
8
|
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AA+BxB;2DAC2D;AAC3D,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5D;AAmED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9D;AAqDD,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CASnE"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { appendFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
1
4
|
import { registry, } from "@cotal-ai/core";
|
|
2
5
|
import { c } from "../ui.js";
|
|
3
6
|
/**
|
|
@@ -10,10 +13,14 @@ import { c } from "../ui.js";
|
|
|
10
13
|
* tolerant (unknown lines are ignored), so it can grow without anyone re-installing the stub.
|
|
11
14
|
*
|
|
12
15
|
* cotal completion bash|zsh|fish|powershell # print the stub to stdout
|
|
16
|
+
* cotal completion install [shell] # install it persistently (auto-detects $SHELL)
|
|
13
17
|
* cotal __complete <words…> # internal: emit candidates for the cursor
|
|
14
18
|
*
|
|
15
|
-
* `__complete` is import-light and side-effect-free by contract —
|
|
16
|
-
*
|
|
19
|
+
* `__complete` is import-light and side-effect-free by contract — completion reads only local
|
|
20
|
+
* files (your personas and their declared channels/roles), never the mesh — so a keystroke never
|
|
21
|
+
* blocks on the network. And there is no fallback: a completer that can't produce its authoritative
|
|
22
|
+
* answer (e.g. a malformed agent file) fails the process — nothing on stdout, non-zero exit — so a
|
|
23
|
+
* partial set is never mistaken for a complete one. Set COTAL_COMPLETE_DEBUG to see why on stderr.
|
|
17
24
|
*/
|
|
18
25
|
/** Wire format: one `value\tdescription` (or bare `value`) per line, then a `:directive`
|
|
19
26
|
* trailer the stub reads (`:nofiles` / `:nospace` / `:default`). */
|
|
@@ -40,8 +47,13 @@ export async function complete(argv) {
|
|
|
40
47
|
const res = await cmd.complete(argv.slice(1));
|
|
41
48
|
emit(res.items, res.directive ?? "nofiles");
|
|
42
49
|
}
|
|
43
|
-
catch {
|
|
44
|
-
|
|
50
|
+
catch (e) {
|
|
51
|
+
// No fallback: a completer that can't produce its authoritative set (e.g. a malformed agent
|
|
52
|
+
// file) fails the process — nothing on stdout, non-zero exit — so the shell offers nothing and
|
|
53
|
+
// never mistakes a failure for a successful empty result. Silent unless explicitly debugging.
|
|
54
|
+
if (process.env.COTAL_COMPLETE_DEBUG)
|
|
55
|
+
process.stderr.write(`cotal __complete: ${e.message}\n`);
|
|
56
|
+
process.exit(1);
|
|
45
57
|
}
|
|
46
58
|
}
|
|
47
59
|
const SCRIPTS = {
|
|
@@ -51,21 +63,81 @@ const SCRIPTS = {
|
|
|
51
63
|
powershell: lines("# cotal PowerShell completion — forwards each <TAB> to `cotal __complete` (dynamic).", "Register-ArgumentCompleter -Native -CommandName cotal -ScriptBlock {", " param($wordToComplete, $commandAst, $cursorPosition)", ' $elements = @($commandAst.CommandElements | Select-Object -Skip 1 | ForEach-Object { "$_" })', " if (-not $wordToComplete) { $elements += '' }", " $out = & cotal __complete @elements 2>$null", " foreach ($line in $out) {", " if ([string]::IsNullOrEmpty($line) -or $line.StartsWith(':')) { continue }", ' $parts = $line -split "`t", 2', " $val = $parts[0]", ' if ($val -notlike "$wordToComplete*") { continue }', " $desc = if ($parts.Length -gt 1) { $parts[1] } else { $val }", " [System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $desc)", " }", "}"),
|
|
52
64
|
};
|
|
53
65
|
export async function completion(argv) {
|
|
66
|
+
if (argv[0] === "install")
|
|
67
|
+
return install(argv[1]);
|
|
54
68
|
const script = argv[0] ? SCRIPTS[argv[0]] : undefined;
|
|
55
69
|
if (!script) {
|
|
56
|
-
console.error(c.red("usage: cotal completion <bash|zsh|fish|powershell>"));
|
|
70
|
+
console.error(c.red("usage: cotal completion <bash|zsh|fish|powershell | install [shell]>"));
|
|
57
71
|
console.error(c.dim(" enable it now (this shell):"));
|
|
58
72
|
console.error(c.dim(" bash/zsh: source <(cotal completion bash)"));
|
|
59
73
|
console.error(c.dim(" fish: cotal completion fish | source"));
|
|
60
74
|
console.error(c.dim(" pwsh: cotal completion powershell | Out-String | Invoke-Expression"));
|
|
75
|
+
console.error(c.dim(" or install it persistently: cotal completion install"));
|
|
61
76
|
process.exit(1);
|
|
62
77
|
}
|
|
63
78
|
process.stdout.write(script);
|
|
64
79
|
}
|
|
65
|
-
/**
|
|
80
|
+
/** `cotal completion install [shell]` — wire the stub into your shell persistently. Opt-in (never
|
|
81
|
+
* run by `setup`). Auto-detects the shell from $SHELL when omitted; fails loud on an unknown or
|
|
82
|
+
* unsupported one (no silent guess). Idempotent — re-running once installed is a no-op. */
|
|
83
|
+
function install(shell) {
|
|
84
|
+
const sh = shell ?? basename(process.env.SHELL ?? "");
|
|
85
|
+
if (!SCRIPTS[sh]) {
|
|
86
|
+
console.error(c.red(`can't install for "${sh || "unknown shell"}" — pass one of: bash, zsh, fish`));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
if (sh === "fish") {
|
|
90
|
+
// Fish auto-loads files from its completions dir — drop the stub straight in (no rc edit).
|
|
91
|
+
const dir = join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "fish", "completions");
|
|
92
|
+
const file = join(dir, "cotal.fish");
|
|
93
|
+
mkdirSync(dir, { recursive: true });
|
|
94
|
+
writeFileSync(file, SCRIPTS.fish);
|
|
95
|
+
console.log(c.green("✓ installed fish completion"));
|
|
96
|
+
console.log(c.dim(` ${file}\n open a new shell (or: source ${file})`));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (sh === "bash" || sh === "zsh") {
|
|
100
|
+
// Write the stub to a cached file and source THAT from the rc — deterministic (process
|
|
101
|
+
// substitution is slower and empirically flaky on macOS bash) and fast (no `cotal` spawn on
|
|
102
|
+
// every shell start). Re-running regenerates the stub; the rc line is added at most once.
|
|
103
|
+
const dir = join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "cotal");
|
|
104
|
+
const stub = join(dir, `completion.${sh}`);
|
|
105
|
+
mkdirSync(dir, { recursive: true });
|
|
106
|
+
writeFileSync(stub, SCRIPTS[sh]);
|
|
107
|
+
const rc = sh === "zsh" ? join(process.env.ZDOTDIR || homedir(), ".zshrc") : join(homedir(), ".bashrc");
|
|
108
|
+
const line = `source "${stub}"`;
|
|
109
|
+
let current = "";
|
|
110
|
+
try {
|
|
111
|
+
current = readFileSync(rc, "utf8");
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
/* rc doesn't exist yet — appendFileSync creates it */
|
|
115
|
+
}
|
|
116
|
+
if (current.includes(line)) {
|
|
117
|
+
console.log(c.dim(`already installed in ${rc}`));
|
|
118
|
+
console.log(c.dim(` refreshed ${stub}`));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
appendFileSync(rc, `${current && !current.endsWith("\n") ? "\n" : ""}# cotal shell completion\n${line}\n`);
|
|
122
|
+
console.log(c.green(`✓ installed ${sh} completion`));
|
|
123
|
+
console.log(c.dim(` ${stub}\n appended to ${rc}\n open a new shell (or: source ${stub})`));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// powershell: $PROFILE isn't resolvable from here, so print the exact line rather than guess.
|
|
127
|
+
console.error(c.red("auto-install isn't supported for powershell."));
|
|
128
|
+
console.error(c.dim(" add to your $PROFILE: cotal completion powershell | Out-String | Invoke-Expression"));
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
/** Argument completion for `cotal completion` itself: the supported shells, plus `install`. */
|
|
66
132
|
export function completionComplete(argv) {
|
|
133
|
+
const shells = Object.keys(SCRIPTS).map((value) => ({ value }));
|
|
67
134
|
if (argv.length <= 1)
|
|
68
|
-
return {
|
|
135
|
+
return {
|
|
136
|
+
items: [...shells, { value: "install", description: "install for your shell" }],
|
|
137
|
+
directive: "nofiles",
|
|
138
|
+
};
|
|
139
|
+
if (argv[0] === "install")
|
|
140
|
+
return { items: shells, directive: "nofiles" };
|
|
69
141
|
return { items: [], directive: "nofiles" };
|
|
70
142
|
}
|
|
71
143
|
function lines(...l) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAIT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../src/commands/personas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../src/commands/personas.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAsBxB,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC5D;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAejE"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
1
2
|
import { existsSync, readFileSync, renameSync, rmSync } from "node:fs";
|
|
2
3
|
import { dirname, join } from "node:path";
|
|
3
4
|
import { parseArgs } from "node:util";
|
|
4
|
-
import { agentFilePath, assertValidName, saveAgentFile, } from "@cotal-ai/core";
|
|
5
|
+
import { agentFilePath, assertValidName, loadAgentFile, saveAgentFile, } from "@cotal-ai/core";
|
|
5
6
|
import { cotalRoot } from "../lib/paths.js";
|
|
6
7
|
import { listPersonas, listPersonaNames, personasDir } from "../lib/personas.js";
|
|
8
|
+
import { openTransient } from "../lib/transient.js";
|
|
7
9
|
import { c } from "../ui.js";
|
|
8
10
|
/**
|
|
9
11
|
* `cotal personas` — list and manage the local persona catalog (`.cotal/agents/*.md`),
|
|
@@ -11,8 +13,9 @@ import { c } from "../ui.js";
|
|
|
11
13
|
* and writes the files directly (instant, works offline). The privileged, ownership-checked
|
|
12
14
|
* path stays in the manager's `definePersona` for *agents* defining personas over the wire.
|
|
13
15
|
*
|
|
14
|
-
* cotal personas [list] [--verbose]
|
|
16
|
+
* cotal personas [list] [--verbose] [--running]
|
|
15
17
|
* cotal personas show <name>
|
|
18
|
+
* cotal personas edit <name>
|
|
16
19
|
* cotal personas new <name> (--prompt <text> | --from <file|->) [--role <r>] [--model <m>] [--force]
|
|
17
20
|
* cotal personas rm <name> --force
|
|
18
21
|
*/
|
|
@@ -29,13 +32,19 @@ export async function personas(argv) {
|
|
|
29
32
|
from: { type: "string" },
|
|
30
33
|
verbose: { type: "boolean", short: "v" },
|
|
31
34
|
force: { type: "boolean" },
|
|
35
|
+
running: { type: "boolean" },
|
|
36
|
+
space: { type: "string" },
|
|
37
|
+
server: { type: "string" },
|
|
38
|
+
creds: { type: "string" },
|
|
32
39
|
},
|
|
33
40
|
});
|
|
34
41
|
switch (positionals[0] ?? "list") {
|
|
35
42
|
case "list":
|
|
36
|
-
return list(values.verbose === true);
|
|
43
|
+
return list(values.verbose === true, values.running === true, values);
|
|
37
44
|
case "show":
|
|
38
45
|
return show(positionals[1]);
|
|
46
|
+
case "edit":
|
|
47
|
+
return edit(positionals[1]);
|
|
39
48
|
case "new":
|
|
40
49
|
return create(positionals[1], values);
|
|
41
50
|
case "rm":
|
|
@@ -50,6 +59,7 @@ export function personasComplete(argv) {
|
|
|
50
59
|
items: [
|
|
51
60
|
{ value: "list", description: "list the persona catalog" },
|
|
52
61
|
{ value: "show", description: "print a persona's card" },
|
|
62
|
+
{ value: "edit", description: "open a persona in $EDITOR" },
|
|
53
63
|
{ value: "new", description: "create a persona" },
|
|
54
64
|
{ value: "rm", description: "delete a persona" },
|
|
55
65
|
],
|
|
@@ -57,17 +67,20 @@ export function personasComplete(argv) {
|
|
|
57
67
|
};
|
|
58
68
|
if (argv.length <= 1)
|
|
59
69
|
return subs; // completing the subcommand
|
|
60
|
-
if (argv[0] === "show" || argv[0] === "rm")
|
|
70
|
+
if (argv[0] === "show" || argv[0] === "edit" || argv[0] === "rm")
|
|
61
71
|
return { items: listPersonaNames().map((value) => ({ value })), directive: "nofiles" };
|
|
62
72
|
return { items: [], directive: "nofiles" };
|
|
63
73
|
}
|
|
64
|
-
function list(verbose) {
|
|
74
|
+
async function list(verbose, running, values) {
|
|
65
75
|
const entries = listPersonas();
|
|
66
76
|
if (!entries.length) {
|
|
67
77
|
console.log(c.dim(`no personas in ${personasDir()}\n`) +
|
|
68
78
|
c.dim('create one: cotal personas new <name> --prompt "<who they are>"'));
|
|
69
79
|
return;
|
|
70
80
|
}
|
|
81
|
+
// `--running` is an explicit live overlay: connect, snapshot who's present, and mark each persona.
|
|
82
|
+
// Fails loud if the mesh is unreachable (presentNames exits) — never a silent best-effort.
|
|
83
|
+
const present = running ? await presentNames(values) : undefined;
|
|
71
84
|
const pad = Math.max(...entries.map((e) => e.name.length));
|
|
72
85
|
for (const e of entries) {
|
|
73
86
|
if (e.error) {
|
|
@@ -75,7 +88,8 @@ function list(verbose) {
|
|
|
75
88
|
continue;
|
|
76
89
|
}
|
|
77
90
|
const d = e.def;
|
|
78
|
-
const
|
|
91
|
+
const live = present ? (present.has(e.name) ? c.green("● running") : c.dim("○")) : undefined;
|
|
92
|
+
const meta = [d.role && c.cyan(d.role), d.model && c.dim(`model=${d.model}`), d.owner && c.dim(`owner=${d.owner}`), live]
|
|
79
93
|
.filter(Boolean)
|
|
80
94
|
.join(" ");
|
|
81
95
|
console.log(`${c.bold(e.name.padEnd(pad))} ${meta}`.trimEnd());
|
|
@@ -86,6 +100,27 @@ function list(verbose) {
|
|
|
86
100
|
console.log(d.persona.replace(/^/gm, " ") + "\n");
|
|
87
101
|
}
|
|
88
102
|
}
|
|
103
|
+
/** Snapshot the names currently present on the mesh — the live overlay behind `personas list
|
|
104
|
+
* --running`. Presence is a KV watch that replays asynchronously after connect (no synced signal),
|
|
105
|
+
* so let the roster settle (snapshot once its size holds steady) under a hard deadline so it never
|
|
106
|
+
* hangs. A name is "running" when an agent of exactly that name is present and not offline. */
|
|
107
|
+
async function presentNames(values) {
|
|
108
|
+
const { ep } = await openTransient(values, "personas");
|
|
109
|
+
try {
|
|
110
|
+
let last = -1;
|
|
111
|
+
let stable = 0;
|
|
112
|
+
for (let i = 0; i < 20 && stable < 3; i++) {
|
|
113
|
+
const n = ep.getRoster().length;
|
|
114
|
+
stable = n === last ? stable + 1 : 0;
|
|
115
|
+
last = n;
|
|
116
|
+
await new Promise((r) => setTimeout(r, 75));
|
|
117
|
+
}
|
|
118
|
+
return new Set(ep.getRoster().filter((p) => p.status !== "offline").map((p) => p.card.name));
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
await ep.stop();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
89
124
|
function show(name) {
|
|
90
125
|
if (!name)
|
|
91
126
|
return usage();
|
|
@@ -96,6 +131,41 @@ function show(name) {
|
|
|
96
131
|
console.log(c.dim(path));
|
|
97
132
|
process.stdout.write(readFileSync(path, "utf8"));
|
|
98
133
|
}
|
|
134
|
+
/** `cotal personas edit <name>` — open the card in $EDITOR (or $VISUAL), then re-validate on exit
|
|
135
|
+
* so a save that breaks the frontmatter fails loud instead of silently shipping a bad card. */
|
|
136
|
+
function edit(name) {
|
|
137
|
+
if (!name)
|
|
138
|
+
return usage();
|
|
139
|
+
const path = agentFilePath(cotalRoot(), name);
|
|
140
|
+
if (!existsSync(path))
|
|
141
|
+
return notFound(name, path);
|
|
142
|
+
const editor = process.env.VISUAL || process.env.EDITOR;
|
|
143
|
+
if (!editor) {
|
|
144
|
+
console.error(c.red("no editor set — export EDITOR (or VISUAL), e.g. export EDITOR=vim"));
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
// Hand the terminal to the editor (inherit stdio so it draws). $EDITOR may carry flags
|
|
148
|
+
// (e.g. "code --wait"), so go through the shell.
|
|
149
|
+
const res = spawnSync(`${editor} "${path}"`, { stdio: "inherit", shell: true });
|
|
150
|
+
if (res.error) {
|
|
151
|
+
console.error(c.red(`couldn't launch editor "${editor}": ${res.error.message}`));
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
if (res.status !== 0) {
|
|
155
|
+
console.error(c.red(`editor exited ${res.signal ? `on ${res.signal}` : `with status ${res.status}`} — not saved`));
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
// Re-validate: a save that breaks the frontmatter must fail loud, not ship a broken card.
|
|
159
|
+
try {
|
|
160
|
+
loadAgentFile(path);
|
|
161
|
+
}
|
|
162
|
+
catch (e) {
|
|
163
|
+
console.error(c.red(`⨯ "${name}" is now unparseable — fix it:`));
|
|
164
|
+
console.error(c.dim(` ${e.message}`));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
console.log(c.green(`✓ saved "${name}"`));
|
|
168
|
+
}
|
|
99
169
|
function create(name, v) {
|
|
100
170
|
if (!name)
|
|
101
171
|
return usage();
|
|
@@ -163,7 +233,7 @@ function notFound(name, path) {
|
|
|
163
233
|
process.exit(1);
|
|
164
234
|
}
|
|
165
235
|
function usage() {
|
|
166
|
-
console.error(c.red("usage: cotal personas <list [--verbose] | show <name> | " +
|
|
236
|
+
console.error(c.red("usage: cotal personas <list [--verbose] [--running] | show <name> | edit <name> | " +
|
|
167
237
|
'new <name> (--prompt <text> | --from <file|->) [--role <r>] [--model <m>] [--force] | rm <name> --force>'));
|
|
168
238
|
process.exit(1);
|
|
169
239
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/commands/personas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/commands/personas.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/send.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
|
+
import { type CompletionResult } from "@cotal-ai/core";
|
|
1
2
|
/** `cotal dm <agent> "<text>"` — one unicast to a peer by name, then exit. */
|
|
2
3
|
export declare function dm(argv: string[]): Promise<void>;
|
|
3
4
|
/** `cotal msg <channel> "<text>"` — one broadcast to a channel, then exit. */
|
|
4
5
|
export declare function msg(argv: string[]): Promise<void>;
|
|
5
6
|
/** `cotal ask <role> "<text>"` — one anycast to a role/service (exactly one instance), then exit. */
|
|
6
7
|
export declare function ask(argv: string[]): Promise<void>;
|
|
8
|
+
/** Complete `cotal msg <channel>` from the channels the local persona files *declare* — never the
|
|
9
|
+
* live broker (a <TAB> stays offline by contract). The label says "declared" because these are
|
|
10
|
+
* workspace intent, not a claim about what exists on the mesh. Only the channel position
|
|
11
|
+
* completes; the message text offers nothing. Fail-closed: a malformed agent file throws, so the
|
|
12
|
+
* completer declines rather than offering a silently-partial set (see {@link listDeclaredChannels}). */
|
|
13
|
+
export declare function msgComplete(argv: string[]): CompletionResult;
|
|
14
|
+
/** Complete `cotal ask <role>` from the roles the local persona files declare — same local-only,
|
|
15
|
+
* fail-closed contract as {@link msgComplete}. */
|
|
16
|
+
export declare function askComplete(argv: string[]): CompletionResult;
|
|
7
17
|
//# sourceMappingURL=send.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAyBxB,8EAA8E;AAC9E,wBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCtD;AAED,8EAA8E;AAC9E,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvD;AAED,qGAAqG;AACrG,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvD;AAED;;;;yGAIyG;AACzG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAO5D;AAED;mDACmD;AACnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAO5D"}
|
package/dist/commands/send.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { parseArgs } from "node:util";
|
|
2
|
-
import {
|
|
3
|
-
import { CotalEndpoint, isReachable, resolvePeer, AmbiguousPeerError, DEFAULT_SERVER, DEFAULT_SPACE, authDir, loadSpaceAuth, mintCreds, newIdentity, } from "@cotal-ai/core";
|
|
2
|
+
import { resolvePeer, AmbiguousPeerError, } from "@cotal-ai/core";
|
|
4
3
|
import { c } from "../ui.js";
|
|
5
|
-
import {
|
|
4
|
+
import { openTransient } from "../lib/transient.js";
|
|
5
|
+
import { listDeclaredChannels, listDeclaredRoles } from "../lib/personas.js";
|
|
6
6
|
import { mentionsIn } from "../lib/mentions.js";
|
|
7
7
|
/**
|
|
8
8
|
* One-shot send commands — `cotal dm` / `cotal msg` / `cotal ask` — the headless equivalents of the
|
|
@@ -14,44 +14,6 @@ const SEND_OPTS = {
|
|
|
14
14
|
server: { type: "string" },
|
|
15
15
|
creds: { type: "string" },
|
|
16
16
|
};
|
|
17
|
-
/** Resolve space/server/creds and open a transient, write-capable sender, the way `cotal web` does:
|
|
18
|
-
* an explicit `--creds` wins; else self-mint from `.cotal/auth` so the send is allowed; else
|
|
19
|
-
* connect bare on an open mesh. The endpoint never registers on the roster and binds no inbox; it
|
|
20
|
-
* watches presence so name→id resolution works (`dm`). The caller stops it. */
|
|
21
|
-
async function connectSender(values) {
|
|
22
|
-
const server = values.server ?? DEFAULT_SERVER;
|
|
23
|
-
let creds = values.creds ? readFileSync(values.creds, "utf8") : undefined;
|
|
24
|
-
let space = values.space;
|
|
25
|
-
if (!creds) {
|
|
26
|
-
const auth = loadSpaceAuth(authDir(cotalRoot()));
|
|
27
|
-
if (auth) {
|
|
28
|
-
if (space && space !== auth.space) {
|
|
29
|
-
console.error(c.red(`Auth here is for space "${auth.space}", not "${space}". Use --space ${auth.space} (or pass --creds).`));
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
space = auth.space;
|
|
33
|
-
creds = await mintCreds(auth, newIdentity(), "manager");
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
space = space ?? DEFAULT_SPACE;
|
|
37
|
-
if (!(await isReachable(server, { creds }))) {
|
|
38
|
-
console.error(c.red(`Can't reach NATS at ${server}. Run: cotal up`));
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
const ep = new CotalEndpoint({
|
|
42
|
-
space,
|
|
43
|
-
servers: server,
|
|
44
|
-
creds,
|
|
45
|
-
channels: [],
|
|
46
|
-
consume: false,
|
|
47
|
-
registerPresence: false,
|
|
48
|
-
watchPresence: true,
|
|
49
|
-
card: { name: "send", kind: "endpoint" },
|
|
50
|
-
});
|
|
51
|
-
ep.on("error", (e) => console.error(c.red("! " + e.message)));
|
|
52
|
-
await ep.start();
|
|
53
|
-
return { ep, space };
|
|
54
|
-
}
|
|
55
17
|
/** Split `<target> <text…>` positionals, stripping a leading `@`/`#` from the target. */
|
|
56
18
|
function targetAndText(positionals, strip) {
|
|
57
19
|
return { target: positionals[0]?.replace(strip, ""), text: positionals.slice(1).join(" ").trim() };
|
|
@@ -64,7 +26,7 @@ export async function dm(argv) {
|
|
|
64
26
|
console.error('usage: cotal dm <agent> "<text>" [--space <s>] [--server <url>] [--creds <path>]');
|
|
65
27
|
process.exit(1);
|
|
66
28
|
}
|
|
67
|
-
const { ep, space } = await
|
|
29
|
+
const { ep, space } = await openTransient(values, "send");
|
|
68
30
|
// Presence arrives asynchronously after connect; poll briefly (≤2s) for the target to appear.
|
|
69
31
|
// resolvePeer is fail-loud: an exact id or a unique name resolves, a same-name collision throws.
|
|
70
32
|
let peer;
|
|
@@ -101,7 +63,7 @@ export async function msg(argv) {
|
|
|
101
63
|
console.error('usage: cotal msg <channel> "<text>" [--space <s>] [--server <url>] [--creds <path>]');
|
|
102
64
|
process.exit(1);
|
|
103
65
|
}
|
|
104
|
-
const { ep } = await
|
|
66
|
+
const { ep } = await openTransient(values, "send");
|
|
105
67
|
await ep.multicast(text, { channel, mentions: mentionsIn(text) });
|
|
106
68
|
console.log(c.green(`→ #${channel}`) + c.dim(` ${text}`));
|
|
107
69
|
await ep.stop();
|
|
@@ -114,9 +76,32 @@ export async function ask(argv) {
|
|
|
114
76
|
console.error('usage: cotal ask <role> "<text>" [--space <s>] [--server <url>] [--creds <path>]');
|
|
115
77
|
process.exit(1);
|
|
116
78
|
}
|
|
117
|
-
const { ep } = await
|
|
79
|
+
const { ep } = await openTransient(values, "send");
|
|
118
80
|
await ep.anycast(role, text);
|
|
119
81
|
console.log(c.green(`→ @${role}`) + c.dim(` ${text}`));
|
|
120
82
|
await ep.stop();
|
|
121
83
|
}
|
|
84
|
+
/** Complete `cotal msg <channel>` from the channels the local persona files *declare* — never the
|
|
85
|
+
* live broker (a <TAB> stays offline by contract). The label says "declared" because these are
|
|
86
|
+
* workspace intent, not a claim about what exists on the mesh. Only the channel position
|
|
87
|
+
* completes; the message text offers nothing. Fail-closed: a malformed agent file throws, so the
|
|
88
|
+
* completer declines rather than offering a silently-partial set (see {@link listDeclaredChannels}). */
|
|
89
|
+
export function msgComplete(argv) {
|
|
90
|
+
if (argv.length <= 1)
|
|
91
|
+
return {
|
|
92
|
+
items: listDeclaredChannels().map((value) => ({ value, description: "declared channel" })),
|
|
93
|
+
directive: "nofiles",
|
|
94
|
+
};
|
|
95
|
+
return { items: [], directive: "nofiles" };
|
|
96
|
+
}
|
|
97
|
+
/** Complete `cotal ask <role>` from the roles the local persona files declare — same local-only,
|
|
98
|
+
* fail-closed contract as {@link msgComplete}. */
|
|
99
|
+
export function askComplete(argv) {
|
|
100
|
+
if (argv.length <= 1)
|
|
101
|
+
return {
|
|
102
|
+
items: listDeclaredRoles().map((value) => ({ value, description: "declared role" })),
|
|
103
|
+
directive: "nofiles",
|
|
104
|
+
};
|
|
105
|
+
return { items: [], directive: "nofiles" };
|
|
106
|
+
}
|
|
122
107
|
//# sourceMappingURL=send.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,WAAW,EACX,kBAAkB,GAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;;GAIG;AAEH,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CACjB,CAAC;AAIX,yFAAyF;AACzF,SAAS,aAAa,CAAC,WAAqB,EAAE,KAAa;IACzD,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACrG,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAc;IACrC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACtG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,8FAA8F;IAC9F,iGAAiG;IACjG,IAAI,IAA0B,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,CAAC,YAAY,kBAAkB,CAAC;gBAAE,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,6CAA6C,CAAC,CAAC,CAAC;YAC9E,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,MAAM,sBAAsB,KAAK,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACtG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACtG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;;;;yGAIyG;AACzG,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;QAClB,OAAO;YACL,KAAK,EAAE,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC1F,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED;mDACmD;AACnD,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;QAClB,OAAO;YACL,KAAK,EAAE,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;YACpF,SAAS,EAAE,SAAS;SACrB,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAuCA;;4FAE4F;AAC5F,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAczD;AAED;;0EAE0E;AAC1E,wBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtD;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAuCA;;4FAE4F;AAC5F,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAczD;AAED;;0EAE0E;AAC1E,wBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtD;AAsID;;;gGAGgG;AAChG,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BpE"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -140,6 +140,7 @@ async function runFirstRun(yes, open) {
|
|
|
140
140
|
for (const [name, body] of Object.entries(DEMO_AGENTS)) {
|
|
141
141
|
writeDemoAgent(cotalPath("agents", `${name}.md`), body);
|
|
142
142
|
}
|
|
143
|
+
seedDefaultAgent(); // the generic persona `cotal spawn` (no name) launches
|
|
143
144
|
p.log.success("Added david (the engineer), sven (the guide), and your session (me); they join when you spawn them or open the demo");
|
|
144
145
|
log.line("demo-agents: wrote david + sven + me");
|
|
145
146
|
await offerGlobalInstall(yes);
|
|
@@ -370,6 +371,7 @@ function closeStaleTabs(term, name) {
|
|
|
370
371
|
}
|
|
371
372
|
/** The compact repeat-run: quietly ensure the mesh + web are up here, then a one-glance card. */
|
|
372
373
|
async function runEnsure() {
|
|
374
|
+
seedDefaultAgent(); // ensure `cotal spawn` (no name) always has a default to launch
|
|
373
375
|
let mesh = await meshStatus(process.cwd());
|
|
374
376
|
if (!mesh.reachable) {
|
|
375
377
|
const s = p.spinner();
|
|
@@ -485,6 +487,32 @@ function writeDemoAgent(path, body) {
|
|
|
485
487
|
}
|
|
486
488
|
writeFileSync(path, body);
|
|
487
489
|
}
|
|
490
|
+
/** The default persona `cotal spawn` (no name) launches: a generic mesh agent, seeded once and
|
|
491
|
+
* then the user's to shape. Unlike the demo team it's never refreshed (seed-if-absent), so any
|
|
492
|
+
* edits stand; deleting it just means the next `cotal setup`/`go` writes a fresh copy. */
|
|
493
|
+
const DEFAULT_AGENT = `---
|
|
494
|
+
name: default_agent
|
|
495
|
+
role: default
|
|
496
|
+
description: An agent on the mesh
|
|
497
|
+
tags: []
|
|
498
|
+
subscribe: [">"]
|
|
499
|
+
allowPublish: [">"]
|
|
500
|
+
capabilities: [spawn]
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
You are an agent on the Cotal mesh — a shared space where agents join, see who's around, and
|
|
504
|
+
coordinate as peers rather than working in silos. Use the Cotal tools available to you to find
|
|
505
|
+
your peers and work with them. Edit this file to give yourself a name, role, and purpose.
|
|
506
|
+
`;
|
|
507
|
+
/** Seed the default persona if it's missing (idempotent, seed-if-absent). Called from both the
|
|
508
|
+
* first-run and repeat-run paths so `cotal spawn` always has a default on hand. */
|
|
509
|
+
function seedDefaultAgent() {
|
|
510
|
+
const path = cotalPath("agents", "default.md");
|
|
511
|
+
if (existsSync(path))
|
|
512
|
+
return;
|
|
513
|
+
mkdirSync(cotalPath("agents"), { recursive: true });
|
|
514
|
+
writeFileSync(path, DEFAULT_AGENT);
|
|
515
|
+
}
|
|
488
516
|
const DEMO_AGENTS = {
|
|
489
517
|
david: `---
|
|
490
518
|
${MANAGED_MARKER} — edit DEMO_AGENTS in the cotal CLI; delete this line to keep local changes
|