viber-channel 0.8.28 → 0.8.30

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.
@@ -90,7 +90,8 @@ export function capabilitiesText(channelVersion: string | null = null): string {
90
90
  " → agent \"g1-dev\", team \"g1-solo\"",
91
91
  " runtime: claude|codex|gemma · permission: read-only|read-write (gemma: read-only",
92
92
  " only; all roles of one template must share one permission) · count optional;",
93
- " model: leave it OUT (runtime default) UNLESS the owner explicitly asks for one.",
93
+ " model/effort: leave them OUT (runtime default) UNLESS the owner explicitly asks",
94
+ " for one; claude only: model opus|sonnet|haiku|fable, effort low|medium|high|xhigh|max.",
94
95
  " CLEAN UP: .viber/agent-teams.json is SHARED by everyone launching from that",
95
96
  " folder — once launched, remove the entry you added (the running agent does not",
96
97
  " need it; only a new launch-team would).",
@@ -108,14 +109,19 @@ export function capabilitiesText(channelVersion: string | null = null): string {
108
109
  " VIBER_BASE_URL, else https://viber.dgypx.dev (the stable backend) — in dev pass both.",
109
110
  " An id matching no record prints \"no record <id>\" and EXITS 2: nothing",
110
111
  " was dissolved. Read the exit code directly, never through a pipe (| tail gives 0).",
111
- " It never kills its caller. LIMIT: an agent already dead whose stop it cannot prove",
112
- " is reported \"stop NOT proven, not revoked\" — revoke it from the web sidebar instead.",
112
+ " It never kills its caller. From app 0.7.23 it also revokes ORCHESTRATOR agents, and an",
113
+ " agent already dead (its recorded host gone) is proven stopped and revoked. Anything",
114
+ " still \"stop NOT proven, not revoked\" prints a \"cause: … — action: …\" line: do",
115
+ " what it says (kill a launcher, re-run dissolve, or web sidebar ⋯ → Revoke).",
113
116
  "",
114
117
  "ON THE WEB (owner, sidebar \"⋯\"): project row → Add agent (one named agent from a",
115
118
  "template role, into an existing or new team) / New team; team row → Add agent;",
116
119
  "agent row → Revoke (confirmation; works online or offline). Both launches need an",
117
- "ONLINE runner (the Viber app). Project page → clean up offline agents: revokes the",
118
- "offline instances and their conversations (never DMs), server re-checks each one.",
120
+ "ONLINE runner (the Viber app). Project page → \"Grand ménage\" (clean up offline agents):",
121
+ "revokes the offline instances, then PERMANENTLY deletes the agent↔agent DMs and agent",
122
+ "conversations whose agents are ALL revoked and none online, history included (also those",
123
+ "of agents revoked earlier, and old memberless pre-identity ones whose token died;",
124
+ "human↔agent DMs are kept). The server re-checks each one.",
119
125
  "Its only guard is live presence: right after a ws_server restart, wait ~30 s before",
120
126
  "cleaning up, or live agents not yet re-reported get revoked.",
121
127
  "",
@@ -136,8 +142,11 @@ export function capabilitiesText(channelVersion: string | null = null): string {
136
142
  " runtime REQUIRED claude | codex | gemma",
137
143
  " permission REQUIRED read-only | read-write (gemma: read-only only)",
138
144
  " rolePrompt REQUIRED non-empty, ≤ 600 chars AFTER {prefix} expands to 32 chars",
139
- " model optional ≤ 64 — leave it OUT (runtime default) unless the owner",
140
- " explicitly asks for a model",
145
+ " model optional claude: opus | sonnet | haiku | fable (a family, never a",
146
+ " version); other runtimes: ≤ 64, stored but not applied",
147
+ " effort optional claude only: low | medium | high | xhigh | max",
148
+ " model/effort: leave them OUT (runtime default) unless the",
149
+ " owner explicitly asks for one",
141
150
  " count optional integer 1..10",
142
151
  " name: non-empty, ≤ 80, unique per owner, case-insensitive (409 without code = taken).",
143
152
  " update: send ONLY the fields you change (name / spec / project_id) plus",
@@ -31,6 +31,7 @@ export interface SnapshotRole {
31
31
  permission: string;
32
32
  rolePrompt?: string;
33
33
  model?: string;
34
+ effort?: string;
34
35
  count?: number;
35
36
  }
36
37
 
@@ -74,6 +74,8 @@ export interface RegistryRole {
74
74
  permission: string;
75
75
  rolePrompt?: string;
76
76
  model?: string;
77
+ /** #656: claude reasoning effort, replayed as `--effort` on a relaunch. */
78
+ effort?: string;
77
79
  }
78
80
 
79
81
  export type RegistryEntryState = "active" | "closed";
@@ -53,6 +53,7 @@ export function relaunchArgs(entry: RegistryEntry): string[] {
53
53
  if (entry.team_name) args.push("--team", entry.team_name);
54
54
  if (entry.env) args.push("--env", entry.env);
55
55
  if (entry.role.model) args.push("--model", entry.role.model);
56
+ if (entry.role.effort) args.push("--effort", entry.role.effort);
56
57
  if (entry.conversation_id && RELOADS_CONVERSATION.has(runtime)) args.push("--conversation", entry.conversation_id);
57
58
  // Last: free text, nothing appended after it (same rule as the gateway's argv).
58
59
  if (entry.role.rolePrompt) args.push("--role", entry.role.rolePrompt);
@@ -54,9 +54,10 @@ export const TEAM_TEMPLATES_TOOL_DEF = {
54
54
  spec: {
55
55
  type: "object",
56
56
  description:
57
- "The roster, for create/update: { roles: [{ role, runtime, permission, rolePrompt, model?, count? }] } — same shape `get` returns. " +
57
+ "The roster, for create/update: { roles: [{ role, runtime, permission, rolePrompt, model?, effort?, count? }] } — same shape `get` returns. " +
58
58
  "On update a spec REPLACES the whole spec: send every role. " +
59
- "model: leave it OUT (the runtime picks its own default) UNLESS the owner explicitly asks for a model. " +
59
+ "model: leave it OUT (the runtime picks its own default) UNLESS the owner explicitly asks for a model; on claude it is a family: opus, sonnet, haiku or fable. " +
60
+ "effort (claude only): low, medium, high, xhigh or max — same rule, leave it OUT unless asked. " +
60
61
  "Full field rules: the capabilities tool.",
61
62
  },
62
63
  project_id: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viber-channel",
3
- "version": "0.8.28",
3
+ "version": "0.8.30",
4
4
  "description": "Voice + text MCP channel between a Claude Code session and the Viber UI (https://viber.dgypx.dev). Push transcripts to Claude; send_message tool delivers text back to the UI.",
5
5
  "type": "module",
6
6
  "bin": {