@myagentroam/node 0.10.51 → 0.10.53

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/connector.js CHANGED
@@ -890,8 +890,7 @@ export class NodeConnector {
890
890
  sessionId: input.sessionId,
891
891
  workspaceId: input.workspaceId,
892
892
  ...(task === undefined ? {} : { taskId: task.id, revision: task.revision }),
893
- actorUserId: run.initiatedByUserId,
894
- readonly: run.source === 'SCHEDULED'
893
+ actorUserId: run.initiatedByUserId
895
894
  });
896
895
  },
897
896
  notificationMcp: async (input) => {
@@ -29,7 +29,7 @@ const marctlInstructions = [
29
29
  'show --json fields: session.activity, session.model, session.effort, session.customTitle or session.runnerTitle, runs[] (id/status), queue.items[], and goal.status (goal may be null). Run status and Goal status are separate.',
30
30
  'Rename any authorized Workspace Session with sessions rename <session-id> --title <name> --json; parent relationships do not restrict renaming.',
31
31
  'show/config/history/graph/rename and schedule get/create/update may omit the Session ID to use the current Session. Without a current Session, specify an ID. send/goal/stop/wait always require explicit target IDs.',
32
- 'Use sessions schedule list/get/create/update for the same tasks as the built-in schedule MCP, which is hidden while this skill is available. list is Workspace-scoped. create requires --cron and text (-m/--message-file, up to 20,000 characters). update requires --expected-revision from get and at least cron or text. get returns task (null if absent), with id, revision, objective, cron, timezone and enabled; applied updates also return task. Reuse that task instead of probing its shape or refetching unchanged state. Schedule text is trimmed at both ends; compare after the same trimming; a conclusive update response needs no extra get. Other-owner edits return a PENDING proposal, not an applied change; scheduled execution is read-only. Follow existing approval rules and do not retry conflicts or uncertain writes blindly.',
32
+ 'Use sessions schedule list/get/create/update for the same tasks as the built-in schedule MCP, which is hidden while this skill is available. list is Workspace-scoped. create requires --cron and text (-m/--message-file, up to 20,000 characters). update requires --expected-revision from get and at least cron or text. get returns task (null if absent), with id, revision, objective, cron, timezone and enabled; applied updates also return task. Reuse that task instead of probing its shape or refetching unchanged state. Schedule text is trimmed at both ends; compare after the same trimming; a conclusive update response needs no extra get. Other-owner edits return a PENDING proposal, not an applied change. Scheduled execution uses normal user permissions. Follow existing approval rules and do not retry conflicts or uncertain writes blindly.',
33
33
  'Read results with sessions history <session-id> --limit 10 --json (default: latest 10 SEGMENTs, not messages; --limit 1..100). In segments[].items[], select kind === "assistant_message" and read payload.text; keep segment runId and user_message.payload.clientMessageId for queued-input correlation. Reuse the returned page; follow --cursor <nextCursor> only for missing evidence.',
34
34
  'Use sessions send <session-id> --steer -m "Additional context: focus on the resume path." --json for decision-changing updates rather than routine reports: it may switch the current execution. Node decides delivery from actual state; an idle Session receives ordinary input. Choose exactly one of --steer or --queue, even when idle; missing, conflicting, repeated, or obsolete options are rejected locally before input is read or a request is sent. Use --queue to place input in a subsequent turn; with an active Goal, ordinary queued input waits until the Goal exits. start/send return clientMessageId and the accepted/queued result. A queued result may refer to the currently active Run: associate queueItemId/clientMessageId with history before deciding that input finished. There are no queue-item edit/delete/reorder commands; show includes queue state.',
35
35
  'Wait with sessions wait <session-id> --run <run-id> --timeout 5m --json through the existing Watch. Prefer --timeout 5m when blocked on task completion; use 30s for a short deadline. Continue useful independent work before waiting. If exec returns a running process or cell, reuse its process/cell handle rather than starting another wait or polling show/list. Timeout or cancelled waiting does not stop the task. Use sessions stop <session-id> --run <run-id> --json only to stop that active Run; ownership rules still apply.',
@@ -39,8 +39,7 @@ export class ScheduleMcpBridge {
39
39
  args,
40
40
  environment: {
41
41
  MAR_SCHEDULE_MCP_ENDPOINT: this.#endpoint,
42
- MAR_SCHEDULE_MCP_TOKEN: token,
43
- MAR_SCHEDULE_MCP_READ_ONLY: capability.readonly ? '1' : '0'
42
+ MAR_SCHEDULE_MCP_TOKEN: token
44
43
  },
45
44
  allowedToolCallers: {
46
45
  [NODE_MCP.schedule.tools.get]: ['direct', 'programmatic'],
@@ -106,8 +105,6 @@ export class ScheduleMcpBridge {
106
105
  return;
107
106
  }
108
107
  if (request.tool === NODE_MCP.schedule.tools.create) {
109
- if (capability.readonly)
110
- throw new Error('SCHEDULE_READ_ONLY');
111
108
  if (task !== undefined)
112
109
  throw new Error('SCHEDULE_ALREADY_EXISTS');
113
110
  const args = record(request.arguments);
@@ -134,8 +131,6 @@ export class ScheduleMcpBridge {
134
131
  }
135
132
  if (request.tool !== NODE_MCP.schedule.tools.update)
136
133
  throw new Error('SCHEDULE_TOOL_INVALID');
137
- if (capability.readonly)
138
- throw new Error('SCHEDULE_READ_ONLY');
139
134
  if (task === undefined)
140
135
  throw new Error('SCHEDULE_NOT_FOUND');
141
136
  const args = record(request.arguments);
@@ -16,33 +16,31 @@ server.registerTool(NODE_MCP.schedule.tools.get, {
16
16
  description: 'Read the MAR scheduled task bound to this MAR-managed Workspace conversation, or null if none exists. ' +
17
17
  scopeNote
18
18
  }, async () => result(await request(NODE_MCP.schedule.tools.get, {})));
19
- if (process.env['MAR_SCHEDULE_MCP_READ_ONLY'] !== '1') {
20
- server.registerTool(NODE_MCP.schedule.tools.create, {
21
- description: 'Create the MAR scheduled task for this MAR-managed Workspace conversation. MAR runs it in this conversation for each admitted trigger using the connected Node time zone. ' +
22
- scopeNote,
23
- inputSchema: {
24
- objective: z.string().min(1).max(20_000).describe(objectiveDescription),
25
- cron: z
26
- .string()
27
- .min(9)
28
- .max(64)
29
- .describe('Five-field cron expression interpreted in the connected MAR Node time zone. It defines the schedule separately from the per-run task body.')
30
- }
31
- }, async (args) => result(await request(NODE_MCP.schedule.tools.create, args)));
32
- server.registerTool(NODE_MCP.schedule.tools.update, {
33
- description: 'Update the MAR scheduled task for this MAR-managed Workspace conversation. MAR runs the saved objective in this conversation for each admitted trigger using the connected Node time zone. ' +
34
- scopeNote,
35
- inputSchema: {
36
- objective: z.string().min(1).max(20_000).describe(objectiveDescription).optional(),
37
- cron: z
38
- .string()
39
- .min(9)
40
- .max(64)
41
- .describe('Replacement five-field cron expression in the connected MAR Node time zone.')
42
- .optional()
43
- }
44
- }, async (args) => result(await request(NODE_MCP.schedule.tools.update, args)));
45
- }
19
+ server.registerTool(NODE_MCP.schedule.tools.create, {
20
+ description: 'Create the MAR scheduled task for this MAR-managed Workspace conversation. MAR runs it in this conversation for each admitted trigger using the connected Node time zone. ' +
21
+ scopeNote,
22
+ inputSchema: {
23
+ objective: z.string().min(1).max(20_000).describe(objectiveDescription),
24
+ cron: z
25
+ .string()
26
+ .min(9)
27
+ .max(64)
28
+ .describe('Five-field cron expression interpreted in the connected MAR Node time zone. It defines the schedule separately from the per-run task body.')
29
+ }
30
+ }, async (args) => result(await request(NODE_MCP.schedule.tools.create, args)));
31
+ server.registerTool(NODE_MCP.schedule.tools.update, {
32
+ description: 'Update the MAR scheduled task for this MAR-managed Workspace conversation. MAR runs the saved objective in this conversation for each admitted trigger using the connected Node time zone. ' +
33
+ scopeNote,
34
+ inputSchema: {
35
+ objective: z.string().min(1).max(20_000).describe(objectiveDescription).optional(),
36
+ cron: z
37
+ .string()
38
+ .min(9)
39
+ .max(64)
40
+ .describe('Replacement five-field cron expression in the connected MAR Node time zone.')
41
+ .optional()
42
+ }
43
+ }, async (args) => result(await request(NODE_MCP.schedule.tools.update, args)));
46
44
  await server.connect(new StdioServerTransport());
47
45
  function request(tool, args) {
48
46
  return new Promise((resolve, reject) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myagentroam/node",
3
- "version": "0.10.51",
3
+ "version": "0.10.53",
4
4
  "description": "MyAgentRoam Node runtime CLI.",
5
5
  "license": "Apache-2.0 AND GPL-2.0-or-later",
6
6
  "type": "module",
@@ -37,10 +37,10 @@
37
37
  "playwright": "1.62.1",
38
38
  "ws": "^8.21.3",
39
39
  "zod": "4.4.3",
40
- "@myagentroam/agent": "0.10.51",
40
+ "@myagentroam/agent": "0.10.53",
41
41
  "@myagentroam/code-navigation": "0.10.1",
42
- "@myagentroam/protocol": "0.10.51",
43
- "@myagentroam/marctl": "0.10.10"
42
+ "@myagentroam/marctl": "0.10.11",
43
+ "@myagentroam/protocol": "0.10.53"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/ws": "^8.18.1"