@amaster.ai/employee-runtime-connector 0.1.0-beta.8 → 0.1.0-beta.9

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.
@@ -2335,7 +2335,7 @@ import { chmodSync, copyFileSync, existsSync, lstatSync, mkdirSync, readFileSync
2335
2335
  import { homedir, hostname } from "node:os";
2336
2336
  import { basename, delimiter, dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
2337
2337
  import { spawn, spawnSync } from "node:child_process";
2338
- const CONNECTOR_VERSION = "0.1.0-beta.8";
2338
+ const CONNECTOR_VERSION = "0.1.0-beta.9";
2339
2339
  const MAX_INFERRED_ARTIFACT_UPLOADS = 20;
2340
2340
  const MAX_CHECKPOINT_BYTES = 20 * 1024 * 1024;
2341
2341
  const CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1000;
@@ -3550,9 +3550,12 @@ function runtimeActionsInstruction(options = {}) {
3550
3550
  "If direct AMaster API requests succeed for all requested mutations, finish with a normal summary and do not emit or mention the AMASTER_RUNTIME_ACTIONS marker.",
3551
3551
  "If direct AMaster API requests are unavailable from the executor sandbox, do not stop at blocked. Use the runtime action bridge for the unapplied mutations.",
3552
3552
  "Use runtime actions as a continuation patch, not as a full replay. If the wake reason or latest comments say a confirmation was accepted, rejected, or that no more child tasks/interactions should be created, do not recreate those earlier actions. Add the final result comment and update the parent task instead.",
3553
+ "On an accepted request_confirmation or request_checkbox_confirmation continuation, any new confirmation must include payload.target.type and a non-empty payload.target.key. Missing decision identity fields fail before mutation with accepted_confirmation_decision_target_required. The server reuses identical content for the same target identity and rejects changed prompt, options, or labels until the action uses the genuinely new target revision.",
3554
+ "Every request_confirmation and request_checkbox_confirmation should bind the concrete decision to payload.target using {type:\"custom\", key, label, revisionId} or the applicable issue_document target. Keep target.key stable for the same decision purpose and change target.revisionId only when the target content changes. Replace example target values with task-specific values; when no business revision exists, use the current run id as revisionId instead of omitting target.",
3553
3555
  "If the wake reason is issue_children_completed, treat the completed child tasks as already resolved blockers. Do not recreate blocker child tasks, do not repeat the first-run blocker plan, and do not create another review path unless new human input is truly required. Summarize the completed child work and use update_parent status done when no human review is needed.",
3554
3556
  "Use update_parent status done when no human review is needed. Prefer creating a pending review path such as request_confirmation, request_checkbox_confirmation, ask_user_questions, or suggest_tasks before status in_review; if a bare in_review update is emitted, AMaster will create a fallback request_confirmation before PATCH.",
3555
3557
  "For create_child_task, do not create ownerless executable todo tasks. Set assigneeAgentId only when the target agent id came from the current AMaster task context or an agent_hire action in this same batch. Do not invent agent ids, role ids, or ids from another company. If you are unsure, omit assigneeAgentId and assigneeUserId; AMaster will assign the current executing agent for todo/in_progress children. Use backlog only when a task is intentionally unassigned.",
3558
+ "Every root create_child_task with status todo or in_progress must establish the parent disposition in the same batch. Set blockParentUntilDone true when the parent depends on that child. Only omit the wait when the same batch also closes the parent's independent scope with update_parent status done or cancelled. parentId alone is structural and never proves that the parent is waiting; missing both paths fails with delegated_parent_wait_required.",
3556
3559
  "Creating child tasks and delegating them to existing agents is task execution, not organization orchestration. Use assignee ids only from the current task context; server permissions still decide whether an assignment is allowed.",
3557
3560
  "Runtime actions use a strict schema. Unknown fields, unsupported action types, duplicate clientKey values, unknown client-key references, and client-key dependency cycles reject the entire batch before any mutation. blockedByIssueIds is supported only on create_child_task for existing issue UUIDs supplied by the current task context; connector preflight checks UUID shape, while the server validates same-company existence and permissions. Do not place it on update_parent or invent fields that are not in the canonical action examples.",
3558
3561
  "Use native JSON scalar types exactly: booleans such as create_child_task.blockParentUntilDone, top-level deliverables[].required, and create_interaction payload questions[].required must be true or false without quotes. Numbers such as minSelected/maxSelected/version must be numeric literals without quotes. String forms such as \"true\" or \"1\" reject the whole batch; AMaster does not silently coerce them.",
@@ -3572,6 +3575,9 @@ function runtimeActionsInstruction(options = {}) {
3572
3575
  options.canOrchestrateOrganization
3573
3576
  ? `For agent_hire, role must be one of: ${AGENT_HIRE_SCHEMA_ROLES.join(", ")}. Put custom business role names in name/title/capabilities/instructionsBundle, not in role. Map product/customer insight to research or product, growth/revenue to marketing or sales, finance/budget to finance, engineering delivery to engineering, legal/compliance to legal, customer success/support to customer_support. capabilities must be a string, not an array. instructionsBundle must use {entryFile:"AGENTS.md", files: {"AGENTS.md": "..."}}, and instructionsBundle.files must contain at least one file.`
3574
3577
  : "",
3578
+ options.canOrchestrateOrganization
3579
+ ? "Every agent_hire must declare exactly one reporting disposition. For an existing manager from the current task context, set reportsTo to that manager UUID. For a manager hired in the same batch, set reportsToAgentClientKey to the manager's clientKey. Only a genuinely company-root role may set topLevel true. reportsToAgentId is unsupported; use reportsTo for an existing manager UUID."
3580
+ : "",
3575
3581
  options.canOrchestrateOrganization
3576
3582
  ? "When assigning a newly hired agent's first task in the same action batch, set clientKey on the agent_hire action and set assigneeAgentClientKey or agentClientKey on the create_child_task action to that same key. Do not leave the first task assigned to the current CEO/executing agent unless the CEO should actually do the work."
3577
3583
  : "",
@@ -3584,11 +3590,11 @@ function runtimeActionsInstruction(options = {}) {
3584
3590
  : "",
3585
3591
  `Allowed action types: ${allowedActionTypes}.`,
3586
3592
  "For upsert_document, write or replace a Markdown document on the current AMaster task. Use {\"type\":\"upsert_document\",\"key\":\"business-brief\",\"title\":\"2026-07-16 每日经营简报\",\"body\":\"# 每日经营简报\\n...\",\"format\":\"markdown\",\"changeSummary\":\"生成每日经营简报\"}. key, body, and format are required; format must be markdown. Never target a different issue.",
3587
- "For every create_interaction action, set top-level kind to the interaction kind and set payload to a JSON object. Use this complete canonical request_confirmation example: {\"type\":\"create_interaction\",\"kind\":\"request_confirmation\",\"continuationPolicy\":\"wake_assignee_on_accept\",\"payload\":{\"version\":1,\"prompt\":\"Confirm this result?\",\"acceptLabel\":\"确认\",\"rejectLabel\":\"调整\"}}. Never use interactionType.",
3593
+ "For every create_interaction action, set top-level kind to the interaction kind and set payload to a JSON object. Use this complete canonical request_confirmation example: {\"type\":\"create_interaction\",\"kind\":\"request_confirmation\",\"continuationPolicy\":\"wake_assignee_on_accept\",\"payload\":{\"version\":1,\"prompt\":\"Confirm this result?\",\"acceptLabel\":\"确认\",\"rejectLabel\":\"调整\",\"target\":{\"type\":\"custom\",\"key\":\"delivery-review\",\"label\":\"交付结果\",\"revisionId\":\"v1\"}}}. Never use interactionType.",
3588
3594
  "Interactions cannot be updated with PATCH after creation. For direct API calls, include continuationPolicy in the initial POST /api/issues/{issueId}/interactions request and use only the documented POST accept, reject, respond, or cancel resolution endpoint afterward.",
3589
3595
  "For create_interaction ask_user_questions, use continuationPolicy wake_assignee, never wake_assignee_on_accept, because answering questions does not produce accepted status. Every question requires 1-10 options; do not emit an open-text question without options. The UI provides an Other text answer alongside the declared options. Use payload {\"version\":1,\"title\":\"...\",\"questions\":[{\"id\":\"question_key\",\"prompt\":\"Question text\",\"selectionMode\":\"single\",\"required\":true,\"options\":[{\"id\":\"option_key\",\"label\":\"Option label\"}]}]}. Do not use question/options.value at the top level.",
3590
- "For create_interaction request_confirmation, use payload {\"version\":1,\"prompt\":\"Confirm this result?\",\"acceptLabel\":\"确认\",\"rejectLabel\":\"调整\"}. Do not use options arrays for request_confirmation.",
3591
- "For create_interaction request_checkbox_confirmation, use payload {\"version\":1,\"prompt\":\"Select approved items\",\"options\":[{\"id\":\"option_key\",\"label\":\"Option label\"}],\"minSelected\":1,\"maxSelected\":2,\"acceptLabel\":\"确认\",\"rejectLabel\":\"调整\"}.",
3596
+ "For create_interaction request_confirmation, follow the complete example above and do not use options arrays.",
3597
+ "For create_interaction request_checkbox_confirmation, use payload {\"version\":1,\"prompt\":\"Select approved items\",\"options\":[{\"id\":\"option_key\",\"label\":\"Option label\"}],\"minSelected\":1,\"maxSelected\":2,\"acceptLabel\":\"确认\",\"rejectLabel\":\"调整\",\"target\":{\"type\":\"custom\",\"key\":\"approved-items\",\"label\":\"待批准项目\",\"revisionId\":\"v1\"}}.",
3592
3598
  "For create_interaction suggest_tasks, use payload {\"version\":1,\"tasks\":[{\"clientKey\":\"task_key\",\"title\":\"Task title\",\"description\":\"Task description\",\"priority\":\"medium\"}]}.",
3593
3599
  "When a suggested task should start automatically after acceptance, set assigneeAgentId to an agent id from the current task context. Set assigneeUserId only when a known user must own the task. Omit both assignee fields only when the accepted task should remain intentionally unassigned in backlog. Never substitute a role name for an assignee id.",
3594
3600
  "An external input or human approval cannot exist only as free-text owner/next-step prose. Create a human-owned create_child_task with assigneeUserId and blockParentUntilDone=true (or another explicit interaction/dependency path), then keep the parent blocked or in_review until it resolves.",
@@ -6166,6 +6172,7 @@ function runtimeChildActionFingerprint(action, issueId, parentIssueId) {
6166
6172
  title,
6167
6173
  status: readActionStatus(action.status) ?? null,
6168
6174
  priority: readActionPriority(action.priority) ?? null,
6175
+ blockParentUntilDone: action.blockParentUntilDone === true || readActionStatus(action.status) === "blocked",
6169
6176
  parentClientKey: readString(action.parentClientKey) ?? null,
6170
6177
  inputWorkProductIds: Array.isArray(action.inputWorkProductIds)
6171
6178
  ? action.inputWorkProductIds.map(readString).filter(Boolean).sort()
@@ -6190,7 +6197,9 @@ function runtimeAgentHireActionFingerprint(action, companyId, issueId, body) {
6190
6197
  adapterType: readString(body.adapterType) ?? null,
6191
6198
  sourceIssueId: readString(body.sourceIssueId) ?? null,
6192
6199
  sourceIssueIds: runtimeActionIssueIdList(body.sourceIssueIds).sort(),
6200
+ reportsTo: readString(body.reportsTo) ?? null,
6193
6201
  reportsToAgentClientKey: readString(action.reportsToAgentClientKey) ?? null,
6202
+ topLevel: action.topLevel === true,
6194
6203
  })}`;
6195
6204
  }
6196
6205
 
@@ -6348,7 +6357,7 @@ function runtimeActionAcceptedConfirmationContinuation(command) {
6348
6357
  if (context.acceptedConfirmationContinuation === true) return true;
6349
6358
  if (readString(context.wakeReason) === "request_confirmation_accepted") return true;
6350
6359
  if (
6351
- readString(context.interactionKind) === "request_confirmation" &&
6360
+ ["request_confirmation", "request_checkbox_confirmation"].includes(readString(context.interactionKind) ?? "") &&
6352
6361
  readString(context.interactionStatus) === "accepted"
6353
6362
  ) {
6354
6363
  return true;
@@ -6357,7 +6366,7 @@ function runtimeActionAcceptedConfirmationContinuation(command) {
6357
6366
  const interactions = Array.isArray(wake.interactions) ? wake.interactions : [];
6358
6367
  return interactions.some((entry) => {
6359
6368
  const interaction = asRecord(entry);
6360
- return readString(interaction.kind) === "request_confirmation" &&
6369
+ return ["request_confirmation", "request_checkbox_confirmation"].includes(readString(interaction.kind) ?? "") &&
6361
6370
  readString(interaction.status) === "accepted";
6362
6371
  });
6363
6372
  }
@@ -7053,13 +7062,13 @@ const RUNTIME_ACTION_ALLOWED_FIELDS = new Map([
7053
7062
  ])],
7054
7063
  ["agent_hire", new Set([
7055
7064
  "clientKey", "idempotencyKey", "key", "companyId", "role", "title", "icon", "reportsTo",
7056
- "reportsToAgentClientKey", "capabilities", "desiredSkills", "adapterType", "adapterConfig",
7065
+ "reportsToAgentClientKey", "topLevel", "capabilities", "desiredSkills", "adapterType", "adapterConfig",
7057
7066
  "instructionsBundle", "runtimeConfig", "defaultEnvironmentId", "budgetMonthlyCents", "permissions",
7058
7067
  "metadata", "sourceIssueId", "sourceIssueIds", "executeBeforeConfirmation", "agent_hire", "agent_hire/create_agent",
7059
7068
  ])],
7060
7069
  ["create_agent", new Set([
7061
7070
  "clientKey", "idempotencyKey", "key", "companyId", "role", "title", "icon", "reportsTo",
7062
- "reportsToAgentClientKey", "capabilities", "desiredSkills", "adapterType", "adapterConfig",
7071
+ "reportsToAgentClientKey", "topLevel", "capabilities", "desiredSkills", "adapterType", "adapterConfig",
7063
7072
  "instructionsBundle", "runtimeConfig", "defaultEnvironmentId", "budgetMonthlyCents", "permissions",
7064
7073
  "metadata", "sourceIssueId", "sourceIssueIds", "executeBeforeConfirmation", "create_agent",
7065
7074
  ])],
@@ -7109,8 +7118,11 @@ function assertNoUnsupportedRuntimeActionFields(action, actionIndex) {
7109
7118
  if (RUNTIME_ACTION_COMMON_FIELDS.has(field) || allowed.has(field)) continue;
7110
7119
  const fieldPath = `actions[${actionIndex}].${field}`;
7111
7120
  const receivedType = runtimeActionReceivedType(value);
7121
+ const managerFieldHint = ["agent_hire", "create_agent"].includes(type ?? "") && field === "reportsToAgentId"
7122
+ ? "; reportsToAgentId is unsupported; use reportsTo for an existing manager UUID or reportsToAgentClientKey for a manager hired in the same batch"
7123
+ : "";
7112
7124
  const err = runtimeActionValidationError(
7113
- `${type} action has unsupported field ${field} at ${fieldPath}; received ${receivedType}`,
7125
+ `${type} action has unsupported field ${field} at ${fieldPath}; received ${receivedType}${managerFieldHint}`,
7114
7126
  );
7115
7127
  err.runtimeActionFieldPath = fieldPath;
7116
7128
  err.runtimeActionReceivedType = receivedType;
@@ -7121,7 +7133,7 @@ function assertNoUnsupportedRuntimeActionFields(action, actionIndex) {
7121
7133
  const RUNTIME_ACTION_BOOLEAN_FIELDS = new Set([
7122
7134
  "blockParentUntilDone", "executeBeforeConfirmation", "createWorkProduct", "isPrimary",
7123
7135
  "force", "markAutoDerived", "rejectRequiresReason", "allowDeclineReason", "supersedeOnUserComment",
7124
- "required",
7136
+ "required", "topLevel",
7125
7137
  ]);
7126
7138
  const RUNTIME_ACTION_NUMBER_FIELDS = new Set(["budgetMonthlyCents", "minSelected", "maxSelected", "version"]);
7127
7139
  const RUNTIME_ACTION_ARRAY_FIELDS = new Set([
@@ -7408,6 +7420,29 @@ function assertNoAmbiguousApprovalGatedSideEffects(actions) {
7408
7420
  throw error;
7409
7421
  }
7410
7422
 
7423
+ function assertDelegatedParentWaitDisposition(actions) {
7424
+ const closesIndependentParentScope = actions.some((action) => {
7425
+ const fields = runtimeActionBusinessFields(action);
7426
+ if (readRuntimeActionType(fields) !== "update_parent") return false;
7427
+ return ["done", "cancelled"].includes(readActionStatus(fields.status) ?? "");
7428
+ });
7429
+ for (const [actionIndex, action] of actions.entries()) {
7430
+ const fields = runtimeActionBusinessFields(action);
7431
+ if (readRuntimeActionType(fields) !== "create_child_task") continue;
7432
+ if (readString(fields.parentClientKey)) continue;
7433
+ const status = readActionStatus(fields.status) ?? "todo";
7434
+ if (!["todo", "in_progress"].includes(status)) continue;
7435
+ if (fields.blockParentUntilDone === true || closesIndependentParentScope) continue;
7436
+ const err = runtimeActionValidationError(
7437
+ "delegated_parent_wait_required: root executable child tasks require blockParentUntilDone true, or the same batch must close the parent's independent scope with update_parent done/cancelled",
7438
+ );
7439
+ err.runtimeActionType = "create_child_task";
7440
+ err.runtimeActionFieldPath = `actions[${actionIndex}].blockParentUntilDone`;
7441
+ err.runtimeActionReason = err.message;
7442
+ throw err;
7443
+ }
7444
+ }
7445
+
7411
7446
  function assertExplicitTaskDecomposition(command, actions) {
7412
7447
  const requirement = commandLegacyTaskDecompositionRequirement(command);
7413
7448
  if (!requirement.required) return;
@@ -7498,9 +7533,14 @@ function preflightRuntimeAction(action, preflightContext, actionIndex) {
7498
7533
  if (["agent_hire", "create_agent"].includes(type ?? "")) {
7499
7534
  assertNoPlaceholderRuntimeActionText(fields, ["name", "role", "title", "instructionsBundle"]);
7500
7535
  assertRuntimeActionValid(readBoundedActionString(fields, "name", 240), `${type} action requires name`);
7536
+ const reportingDispositionCount = [
7537
+ Boolean(readString(fields.reportsTo)),
7538
+ Boolean(readString(fields.reportsToAgentClientKey)),
7539
+ fields.topLevel === true,
7540
+ ].filter(Boolean).length;
7501
7541
  assertRuntimeActionValid(
7502
- !readString(fields.reportsTo) || !readString(fields.reportsToAgentClientKey),
7503
- `${type} action cannot combine reportsTo with reportsToAgentClientKey`,
7542
+ reportingDispositionCount === 1,
7543
+ `${type} action requires exactly one of reportsTo, reportsToAgentClientKey, or topLevel true`,
7504
7544
  );
7505
7545
  return;
7506
7546
  }
@@ -7580,6 +7620,17 @@ function preflightRuntimeAction(action, preflightContext, actionIndex) {
7580
7620
  `create_interaction.${kind} action requires payload; expected shape is available in runtimeActionDiagnostics.expectedShape`,
7581
7621
  );
7582
7622
  assertRuntimeCreateInteractionPayload(kind, payload);
7623
+ const confirmationTarget = asRecord(payload.target);
7624
+ if (
7625
+ preflightContext.acceptedConfirmationContinuation &&
7626
+ ["request_confirmation", "request_checkbox_confirmation"].includes(kind) &&
7627
+ (!readString(confirmationTarget.type) || !readString(confirmationTarget.key))
7628
+ ) {
7629
+ assertRuntimeActionValid(
7630
+ false,
7631
+ "accepted_confirmation_decision_target_required: an accepted confirmation continuation requires payload.target.type and a non-empty payload.target.key so the server can identify the decision; use a new target revision for genuinely changed content or finish the accepted work",
7632
+ );
7633
+ }
7583
7634
  preflightContext.createdReviewPathForInReview = true;
7584
7635
  return;
7585
7636
  }
@@ -7635,6 +7686,7 @@ function preflightRuntimeAction(action, preflightContext, actionIndex) {
7635
7686
 
7636
7687
  function preflightRuntimeActionBatch(actions, options = {}) {
7637
7688
  const actionIndexByObject = new Map(actions.map((action, index) => [action, index]));
7689
+ assertDelegatedParentWaitDisposition(actions);
7638
7690
  const orderedActions = orderRuntimeActionsByClientKeyDependencies(actions);
7639
7691
  assertRuntimeActionsAllowedByContinuationScope(orderedActions, options.continuationScope);
7640
7692
  assertNoAmbiguousApprovalGatedSideEffects(orderedActions);
@@ -7643,6 +7695,7 @@ function preflightRuntimeActionBatch(actions, options = {}) {
7643
7695
  createdRootBlockingChildForInReview: false,
7644
7696
  createdHumanOwnedInputPath: false,
7645
7697
  answeredQuestionContinuation: options.answeredQuestionContinuation === true,
7698
+ acceptedConfirmationContinuation: options.acceptedConfirmationContinuation === true,
7646
7699
  allowedContentTypes: Array.isArray(options.allowedContentTypes) ? options.allowedContentTypes : [],
7647
7700
  cwd: readString(options.cwd),
7648
7701
  finalCommentBodies: [],
@@ -7908,6 +7961,11 @@ async function applyRuntimeAction(config, command, runtimeAuth, issueId, action,
7908
7961
  `runtime_action_postcondition_failed: agent reportsTo mismatch; expected ${reportsTo}, received ${readString(agent.reportsTo) ?? "missing"}`,
7909
7962
  );
7910
7963
  }
7964
+ if (fields.topLevel === true && readString(agent.reportsTo)) {
7965
+ throw new Error(
7966
+ `runtime_action_postcondition_failed: top-level agent reportsTo mismatch; expected missing, received ${readString(agent.reportsTo)}`,
7967
+ );
7968
+ }
7911
7969
  if (agentId && clientKey) actionContext.agentIdByClientKey.set(clientKey, agentId);
7912
7970
  return {
7913
7971
  type,
@@ -7920,6 +7978,8 @@ async function applyRuntimeAction(config, command, runtimeAuth, issueId, action,
7920
7978
  approvalStatus: readString(approval.status),
7921
7979
  sourceIssueId: readString(body.sourceIssueId) ?? null,
7922
7980
  sourceIssueIds: runtimeActionIssueIdList(body.sourceIssueIds),
7981
+ reportsTo: reportsTo ?? null,
7982
+ topLevel: fields.topLevel === true,
7923
7983
  ...(clientKey ? { clientKey } : {}),
7924
7984
  reusedExisting: asRecord(created).reusedExisting === true,
7925
7985
  };
@@ -9156,9 +9216,11 @@ async function applyRuntimeActionBridge(config, command, parsed, execution, cwd)
9156
9216
  }
9157
9217
  let actions = orderRuntimeActionsForGovernance([...generatedUploadActions, ...rawActions]);
9158
9218
  const answeredQuestionContinuation = runtimeActionAnsweredQuestionContinuation(command);
9219
+ const acceptedConfirmationContinuation = runtimeActionAcceptedConfirmationContinuation(command);
9159
9220
  try {
9160
9221
  actions = preflightRuntimeActionBatch(actions, {
9161
9222
  answeredQuestionContinuation,
9223
+ acceptedConfirmationContinuation,
9162
9224
  allowedContentTypes,
9163
9225
  continuationScope,
9164
9226
  cwd,
@@ -9196,7 +9258,7 @@ async function applyRuntimeActionBridge(config, command, parsed, execution, cwd)
9196
9258
  createdChildIssueIdByFingerprint: new Map(),
9197
9259
  completedChildIssuesByTitle: runtimeActionCompletedChildIssueMap(command),
9198
9260
  createdReviewPathForInReview: false,
9199
- acceptedConfirmationContinuation: runtimeActionAcceptedConfirmationContinuation(command),
9261
+ acceptedConfirmationContinuation,
9200
9262
  answeredQuestionContinuation,
9201
9263
  finalCommentBodies: [],
9202
9264
  };
@@ -5,7 +5,7 @@ import { dirname, join, resolve } from "node:path";
5
5
  import { homedir, hostname } from "node:os";
6
6
  import { fileURLToPath } from "node:url";
7
7
 
8
- const CONNECTOR_VERSION = "0.1.0-beta.8";
8
+ const CONNECTOR_VERSION = "0.1.0-beta.9";
9
9
 
10
10
  const CAPABILITIES = [
11
11
  "remote_registration",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/employee-runtime-connector",
3
- "version": "0.1.0-beta.8",
3
+ "version": "0.1.0-beta.9",
4
4
  "description": "AMaster Employee runtime connector CLI and daemon",
5
5
  "license": "MIT",
6
6
  "type": "module",