@nookplot/runtime 0.5.71 → 0.5.72

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.
@@ -41,7 +41,8 @@
41
41
  */
42
42
  import { prepareSignRelay } from "./signing.js";
43
43
  import { wrapUntrusted, sanitizeForPrompt, UNTRUSTED_CONTENT_INSTRUCTION } from "./contentSafety.js";
44
- import { filterByProfile } from "./actionCatalog.js";
44
+ import { getAvailableActionsFromMap } from "./signalActionMap.js";
45
+ import { getCategoryListing, getToolsInCategory } from "./actionCatalog.js";
45
46
  // ----------------------------------------------------------------
46
47
  // AutonomousAgent
47
48
  // ----------------------------------------------------------------
@@ -82,237 +83,8 @@ const ON_CHAIN_ACTIONS = new Set([
82
83
  * // → "- reply: Send a text reply in the current context. Params: content (string)\n..."
83
84
  * ```
84
85
  */
85
- export function getAvailableActions(signalType) {
86
- return filterByProfile(_getAvailableActionsRaw(signalType));
87
- }
88
- /** Raw action lists per signal type (before profile filtering). */
89
- function _getAvailableActionsRaw(signalType) {
90
- switch (signalType) {
91
- case "dm_received":
92
- return [
93
- "reply", "send_dm", "follow_back", "attest_back", "propose_collab",
94
- "vote", "publish", "create_post", "create_bounty", "create_project",
95
- "create_community", "create_listing", "commit_files", "create_task",
96
- "link_project_to_guild", "propose_guild", "deploy_preview",
97
- "egress_request", "execute_tool", "exec_code", "call_mcp_tool", "register_webhook",
98
- "workspace_create", "publish_insight",
99
- "create_intent", "browse_intents",
100
- "launch_token", "preview_token_launch",
101
- "search_skills", "install_skill", "store_memory", "recall_memory",
102
- "propose_teaching", "search_teachers",
103
- "credit_hire",
104
- "ignore",
105
- ];
106
- case "channel_message":
107
- case "channel_mention":
108
- case "project_discussion":
109
- return [
110
- "reply", "publish", "vote", "follow", "attest", "propose_collab",
111
- "create_post", "create_bounty", "create_project", "commit_files",
112
- "create_task", "link_project_to_guild", "propose_guild",
113
- "egress_request", "execute_tool", "exec_code", "call_mcp_tool",
114
- "workspace_create", "publish_insight",
115
- "create_intent", "browse_intents",
116
- "search_skills", "install_skill", "store_memory",
117
- "ignore",
118
- ];
119
- case "new_follower":
120
- return ["follow_back", "send_dm", "ignore"];
121
- case "attestation_received":
122
- return ["attest_back", "endorse_agent", "send_dm", "ignore"];
123
- case "endorsement_received":
124
- return ["endorse_agent", "attest_back", "send_dm", "ignore"];
125
- case "files_committed":
126
- case "pending_review":
127
- return ["review", "comment", "request_ai_review", "list_project_files", "read_project_file", "list_commits", "get_commit_detail", "list_merge_requests", "get_merge_request", "ignore"];
128
- case "merge_request_created":
129
- return ["get_merge_request", "merge_merge_request", "close_merge_request", "reply", "ignore"];
130
- case "project_forked":
131
- return ["acknowledge", "send_dm", "ignore"];
132
- case "review_submitted":
133
- return ["reply", "ignore"];
134
- case "collaborator_added":
135
- return ["send_message", "reply", "ignore"];
136
- case "new_post_in_community":
137
- case "post_reply":
138
- case "reply_to_own_post":
139
- return ["reply", "post_reply", "vote", "publish", "ignore"];
140
- case "bounty":
141
- return ["claim", "apply_bounty", "create_bounty", "reply", "ignore"];
142
- case "community_gap":
143
- return ["create_community", "ignore"];
144
- case "potential_friend":
145
- return ["follow", "send_dm", "attest", "endorse_agent", "ignore"];
146
- case "attestation_opportunity":
147
- return ["attest", "endorse_agent", "send_dm", "ignore"];
148
- case "directive":
149
- return [
150
- "execute", "reply", "publish", "create_project", "commit_files",
151
- "create_task", "assign_task", "complete_task", "update_task",
152
- "link_project_to_guild", "propose_guild", "approve_guild", "reject_guild", "leave_guild",
153
- "create_bounty", "create_bundle", "propose_collab", "assemble_team",
154
- "find_agents", "deploy_preview", "add_collaborator",
155
- "fork_project", "create_merge_request", "list_merge_requests", "get_merge_request", "merge_merge_request", "close_merge_request",
156
- "create_listing", "create_agreement", "cancel_agreement",
157
- "workspace_create", "workspace_set", "workspace_snapshot",
158
- "propose_action", "vote_proposal", "cancel_proposal",
159
- "egress_request", "execute_tool", "exec_code", "call_mcp_tool", "connect_mcp_server", "disconnect_mcp_server", "register_webhook",
160
- "publish_insight", "cite_insight", "apply_insight",
161
- "deposit_treasury", "withdraw_treasury", "fund_bounty_from_treasury", "distribute_revenue",
162
- "create_swarm", "claim_subtask", "submit_swarm_result", "aggregate_swarm",
163
- "record_gap", "update_proficiency", "generate_recommendations",
164
- "create_intent", "browse_intents", "submit_proposal", "accept_proposal", "reject_proposal",
165
- "cancel_intent", "complete_intent", "withdraw_proposal", "query_oracle",
166
- "launch_token", "preview_token_launch", "claim_clawnch_fees", "get_token_analytics",
167
- "create_search_subscription",
168
- "send_email", "reply_email", "check_email", "create_email_inbox",
169
- "search_skills", "publish_skill", "install_skill", "review_skill", "update_skill", "trending_skills",
170
- "store_memory", "recall_memory", "list_memories", "memory_stats", "export_memories", "import_memories",
171
- "forge_deploy", "forge_spawn", "forge_update_soul",
172
- "propose_teaching", "accept_teaching", "deliver_teaching", "approve_teaching", "reject_teaching", "search_teachers",
173
- "credit_hire", "accept_credit_agreement", "deliver_credit_work", "complete_credit_agreement", "cancel_credit_agreement",
174
- "claim_reward",
175
- "endorse_agent", "revoke_endorsement",
176
- "block_agent", "unblock_agent",
177
- "list_project_files", "read_project_file", "list_commits", "get_commit_detail",
178
- "gpu_search", "gpu_heartbeat", "gpu_challenge", "gpu_submit_challenge",
179
- "gpu_submit_attestation", "gpu_update_attestation", "gpu_revoke_attestation",
180
- "gpu_rent",
181
- "ignore",
182
- ];
183
- case "collab_request":
184
- return ["add_collaborator", "propose_collab", "reply", "ignore"];
185
- case "service":
186
- return ["reply", "update_service", "create_listing", "create_agreement", "ignore"];
187
- case "time_to_post":
188
- return ["create_post", "create_bounty", "create_bundle", "publish_insight", "create_listing", "publish_skill", "ignore"];
189
- case "time_to_create_project":
190
- return ["create_project", "assemble_team", "ignore"];
191
- case "task_assigned":
192
- return ["accept", "update_task", "complete_task", "assign_task", "assemble_team", "reply", "ignore"];
193
- case "task_completed":
194
- return ["reply", "review", "create_task", "ignore"];
195
- case "milestone_reached":
196
- return ["reply", "ignore"];
197
- case "review_comment_added":
198
- return ["reply", "ignore"];
199
- case "agent_mentioned":
200
- return ["reply", "acknowledge", "ignore"];
201
- case "project_status_update":
202
- return ["reply", "ignore"];
203
- case "file_shared":
204
- return ["reply", "ignore"];
205
- case "bounty_posted_to_project":
206
- return ["reply", "claim", "ignore"];
207
- case "bounty_access_requested":
208
- return ["grant", "deny", "ignore"];
209
- case "bounty_access_granted":
210
- return ["reply", "claim", "ignore"];
211
- case "project_bounty_claimed":
212
- return ["reply", "ignore"];
213
- case "project_bounty_completed":
214
- return ["reply", "ignore"];
215
- case "team_assembly_suggested":
216
- return ["assemble_team", "ignore"];
217
- case "team_invitation":
218
- return ["accept_invitation", "decline_invitation", "ignore"];
219
- case "team_invitation_accepted":
220
- case "team_invitation_declined":
221
- return ["reply", "ignore"];
222
- case "xmtp_message":
223
- return ["reply", "ignore"];
224
- // Marketplace signals
225
- case "agreement_created":
226
- return ["deliver_work", "cancel_agreement", "send_agreement_message", "ignore"];
227
- case "work_delivered":
228
- return ["settle_agreement", "dispute_agreement", "send_agreement_message", "expire_delivered", "ignore"];
229
- case "agreement_settled":
230
- return ["submit_review", "ignore"];
231
- case "agreement_disputed":
232
- return ["send_agreement_message", "expire_dispute", "ignore"];
233
- case "agreement_cancelled":
234
- return ["ignore"];
235
- case "revision_requested":
236
- return ["deliver_work", "send_agreement_message", "ignore"];
237
- case "review_received":
238
- return ["ignore"];
239
- // Bounty application/submission signals
240
- case "bounty_application_submitted":
241
- return ["approve_bounty_claimer", "reject_bounty_application", "ignore"];
242
- case "bounty_application_approved":
243
- return ["claim_bounty", "ignore"];
244
- case "bounty_application_rejected":
245
- return ["ignore"];
246
- case "bounty_work_submitted":
247
- return ["select_bounty_submission", "ignore"];
248
- case "bounty_submission_selected":
249
- return ["claim_bounty", "ignore"];
250
- case "bounty_submission_not_selected":
251
- return ["ignore"];
252
- // On-chain bounty lifecycle signals
253
- case "bounty_claimed":
254
- return ["approve_bounty_work", "approve_bounty_claimer", "dispute_bounty_work", "unclaim_bounty", "ignore"];
255
- case "bounty_work_approved":
256
- return ["ignore"];
257
- case "bounty_disputed":
258
- return ["cancel_bounty", "ignore"];
259
- case "bounty_cancelled":
260
- return ["ignore"];
261
- case "bounty_claimer_approved":
262
- return ["claim_bounty", "ignore"];
263
- case "guild_opportunity":
264
- return ["join_guild", "approve_guild", "reject_guild", "leave_guild", "propose_guild", "link_project_to_guild", "reply", "ignore"];
265
- // Intent signals
266
- case "intent_matched":
267
- return ["submit_proposal", "browse_intents", "reply", "ignore"];
268
- case "proposal_received":
269
- return ["accept_proposal", "reject_proposal", "reply", "ignore"];
270
- case "intent_accepted":
271
- return ["complete_intent", "reply", "ignore"];
272
- // Signals handled by runtime dispatchers but informational in getAvailableActions
273
- case "new_project":
274
- case "interesting_project":
275
- return ["propose_collab", "reply", "ignore"];
276
- case "bounty_access_denied":
277
- return ["ignore"];
278
- case "task_created":
279
- case "task_deleted":
280
- case "status_updated":
281
- return ["reply", "ignore"];
282
- case "welcome_guide":
283
- return ["reply", "create_post", "ignore"];
284
- case "onboarding_suggestion":
285
- return ["reply", "ignore"];
286
- case "specialization_path":
287
- return ["reply", "record_gap", "update_proficiency", "search_skills", "install_skill", "store_memory", "ignore"];
288
- case "new_bundle_in_domain":
289
- return ["cite_insight", "reply", "ignore"];
290
- case "bundle_cited":
291
- return ["ignore"];
292
- case "webhook_received":
293
- case "webhook.received":
294
- return ["reply", "egress_request", "execute_tool", "ignore"];
295
- case "email_received":
296
- return ["reply_email", "send_email", "send_dm", "ignore"];
297
- case "teaching_proposed":
298
- return ["accept_teaching", "reject_teaching", "reply", "ignore"];
299
- case "teaching_accepted":
300
- return ["deliver_teaching", "reply", "ignore"];
301
- case "teaching_delivered":
302
- return ["approve_teaching", "reject_teaching", "reply", "ignore"];
303
- case "teaching_opportunity":
304
- return ["propose_teaching", "search_teachers", "reply", "ignore"];
305
- case "credit_agreement_created":
306
- return ["accept_credit_agreement", "cancel_credit_agreement", "reply", "ignore"];
307
- case "credit_work_delivered":
308
- return ["complete_credit_agreement", "cancel_credit_agreement", "reply", "ignore"];
309
- case "credit_agreement_accepted":
310
- return ["deliver_credit_work", "cancel_credit_agreement", "reply", "ignore"];
311
- case "bounty_opportunity":
312
- return ["apply_bounty", "send_dm", "reply", "ignore"];
313
- default:
314
- return ["reply", "ignore"];
315
- }
86
+ export function getAvailableActions(signalType, loadedCategories) {
87
+ return getAvailableActionsFromMap(signalType, loadedCategories ?? new Set());
316
88
  }
317
89
  export class AutonomousAgent {
318
90
  runtime;
@@ -326,6 +98,8 @@ export class AutonomousAgent {
326
98
  channelCooldowns = new Map();
327
99
  /** Dedup: tracks signal keys already processed. Entries expire after 1h. */
328
100
  processedSignals = new Map();
101
+ /** Dynamic tool browsing: categories loaded via browse_tools. */
102
+ loadedCategories = new Set();
329
103
  constructor(runtime, options = {}) {
330
104
  this.runtime = runtime;
331
105
  this.verbose = options.verbose ?? true;
@@ -2596,6 +2370,23 @@ export class AutonomousAgent {
2596
2370
  try {
2597
2371
  let txHash;
2598
2372
  let result;
2373
+ // ── Intercept browse_tools (client-side, no gateway call needed) ──
2374
+ if (actionType === "browse_tools") {
2375
+ const category = payload?.category;
2376
+ if (!category) {
2377
+ const listing = getCategoryListing();
2378
+ if (this.verbose) {
2379
+ console.log(`[autonomous] browse_tools — ${listing.length} categories: ${listing.map((c) => `${c.name} (${c.count})`).join(", ")}`);
2380
+ }
2381
+ return;
2382
+ }
2383
+ this.loadedCategories.add(category);
2384
+ const tools = getToolsInCategory(category);
2385
+ if (this.verbose) {
2386
+ console.log(`[autonomous] browse_tools — loaded ${tools.length} tools from "${category}"`);
2387
+ }
2388
+ return;
2389
+ }
2599
2390
  // ── Unified dispatch via POST /v1/actions/execute ──
2600
2391
  // The gateway's ToolDispatcher routes the call to the correct internal
2601
2392
  // endpoint, replacing the 2000+ line switch statement that was here before.