viber-channel 0.8.29 → 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).",
@@ -116,8 +117,11 @@ export function capabilitiesText(channelVersion: string | null = null): string {
116
117
  "ON THE WEB (owner, sidebar \"⋯\"): project row → Add agent (one named agent from a",
117
118
  "template role, into an existing or new team) / New team; team row → Add agent;",
118
119
  "agent row → Revoke (confirmation; works online or offline). Both launches need an",
119
- "ONLINE runner (the Viber app). Project page → clean up offline agents: revokes the",
120
- "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.",
121
125
  "Its only guard is live presence: right after a ws_server restart, wait ~30 s before",
122
126
  "cleaning up, or live agents not yet re-reported get revoked.",
123
127
  "",
@@ -138,8 +142,11 @@ export function capabilitiesText(channelVersion: string | null = null): string {
138
142
  " runtime REQUIRED claude | codex | gemma",
139
143
  " permission REQUIRED read-only | read-write (gemma: read-only only)",
140
144
  " rolePrompt REQUIRED non-empty, ≤ 600 chars AFTER {prefix} expands to 32 chars",
141
- " model optional ≤ 64 — leave it OUT (runtime default) unless the owner",
142
- " 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",
143
150
  " count optional integer 1..10",
144
151
  " name: non-empty, ≤ 80, unique per owner, case-insensitive (409 without code = taken).",
145
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.29",
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": {