@integrity-labs/agt-cli 0.15.38 → 0.16.0

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.
@@ -4057,7 +4057,7 @@ ${sections}`
4057
4057
  * like Ultimate Coder is installed for an agent.
4058
4058
  *
4059
4059
  * @param codeName Agent code_name
4060
- * @param plugin Plugin definition from the plugins table
4060
+ * @param plugin Integration definition from the integration_definitions table
4061
4061
  * @param contextValues Resolved context values from plugin_context
4062
4062
  * @param options.scriptSource How to install scripts: 'git-clone' (path) or 'npm' (package name)
4063
4063
  */
@@ -4888,6 +4888,13 @@ var SLACK_SCOPE_REGISTRY = [
4888
4888
  category: "users",
4889
4889
  risk: "medium"
4890
4890
  },
4891
+ {
4892
+ scope: "users.profile:write",
4893
+ name: "Write Bot Profile",
4894
+ description: "Update the bot's own profile (status emoji + status text). Used to surface live/offline state to operators without polling.",
4895
+ category: "users",
4896
+ risk: "low"
4897
+ },
4891
4898
  // ── Channel Management ───────────────────────────────────────────────────
4892
4899
  {
4893
4900
  scope: "channels:join",
@@ -5012,7 +5019,8 @@ var DEFAULT_SCOPES = [
5012
5019
  "mpim:read",
5013
5020
  "reactions:read",
5014
5021
  "reactions:write",
5015
- "users:read"
5022
+ "users:read",
5023
+ "users.profile:write"
5016
5024
  ];
5017
5025
  function getDefaultSlackScopes() {
5018
5026
  return [...DEFAULT_SCOPES];
@@ -5054,7 +5062,7 @@ var SCOPE_TO_EVENTS = {
5054
5062
  "metadata.message:read": ["message_metadata_posted"]
5055
5063
  };
5056
5064
  function generateSlackAppManifest(input) {
5057
- const { agent_name, description, long_description, scopes, socket_mode = true, redirect_urls, interactivity_request_url } = input;
5065
+ const { agent_name, description, long_description, scopes, socket_mode = true, redirect_urls, interactivity_request_url, slash_command_url } = input;
5058
5066
  const botDisplayName = agent_name.length > 35 ? agent_name.slice(0, 35) : agent_name;
5059
5067
  const botEvents = /* @__PURE__ */ new Set();
5060
5068
  for (const scope of scopes) {
@@ -5080,7 +5088,35 @@ function generateSlackAppManifest(input) {
5080
5088
  bot_user: {
5081
5089
  display_name: botDisplayName,
5082
5090
  always_online: true
5083
- }
5091
+ },
5092
+ // ENG-4596: register the /kill + /unkill slash commands when the
5093
+ // caller passed a URL AND the app requested the `commands` scope.
5094
+ // Slack rejects manifests where slash_commands is non-empty without
5095
+ // the matching scope, so the scope check is a guard.
5096
+ ...slash_command_url && scopes.includes("commands") ? {
5097
+ slash_commands: [
5098
+ {
5099
+ command: "/kill",
5100
+ url: slash_command_url,
5101
+ description: "Silence all agents in this thread (6h soft TTL).",
5102
+ usage_hint: "invoke as a thread reply",
5103
+ should_escape: false
5104
+ },
5105
+ {
5106
+ command: "/unkill",
5107
+ url: slash_command_url,
5108
+ description: "Resume agents in this thread.",
5109
+ usage_hint: "invoke as a thread reply",
5110
+ should_escape: false
5111
+ },
5112
+ {
5113
+ command: "/agent-status",
5114
+ url: slash_command_url,
5115
+ description: "Check whether this agent is online + last activity.",
5116
+ should_escape: false
5117
+ }
5118
+ ]
5119
+ } : {}
5084
5120
  },
5085
5121
  oauth_config: {
5086
5122
  ...redirect_urls && redirect_urls.length > 0 ? { redirect_urls } : {},
@@ -5542,6 +5578,29 @@ var charter_frontmatter_v1_default = {
5542
5578
  },
5543
5579
  additionalProperties: false
5544
5580
  },
5581
+ tools: {
5582
+ type: "object",
5583
+ description: "ENG-4588: gates on agent-driven actions (currently the skill-management MCP tools).",
5584
+ properties: {
5585
+ skills: {
5586
+ type: "object",
5587
+ properties: {
5588
+ write_team: {
5589
+ type: "boolean",
5590
+ default: false,
5591
+ description: "Allow the agent's MCP tools to write skill_definitions rows at team scope. Default false \u2014 agents start untrusted."
5592
+ },
5593
+ publish: {
5594
+ type: "boolean",
5595
+ default: false,
5596
+ description: "Skip the pending-publication review for agent-authored skills. Default false \u2014 drafts go to operator review (ENG-4589)."
5597
+ }
5598
+ },
5599
+ additionalProperties: false
5600
+ }
5601
+ },
5602
+ additionalProperties: false
5603
+ },
5545
5604
  created: {
5546
5605
  type: "string",
5547
5606
  format: "date"
@@ -5930,6 +5989,17 @@ ${desc}
5930
5989
 
5931
5990
  ## Change Log
5932
5991
  - ${today} v0.1: Initial charter
5992
+
5993
+ ## Optional permissions
5994
+
5995
+ These fields default to off. Add them to the YAML frontmatter above to enable.
5996
+
5997
+ \`\`\`yaml
5998
+ tools:
5999
+ skills:
6000
+ write_team: false # ENG-4588: allow agent MCP to write team-scoped skills
6001
+ publish: false # ENG-4588: skip operator review for agent-authored skills
6002
+ \`\`\`
5933
6003
  `;
5934
6004
  }
5935
6005
 
@@ -6047,6 +6117,24 @@ function runSemanticRules(file, charter) {
6047
6117
  }
6048
6118
  }
6049
6119
  }
6120
+ if (charter.risk_tier === "High" && charter.tools?.skills?.publish === true) {
6121
+ diagnostics.push({
6122
+ file,
6123
+ code: "CHARTER.SEMANTIC.HIGH_RISK_SKILL_PUBLISH",
6124
+ path: "tools.skills.publish",
6125
+ severity: "warning",
6126
+ message: "High-risk agents should not have tools.skills.publish enabled \u2014 keep operator review on agent-authored skills"
6127
+ });
6128
+ }
6129
+ if (charter.risk_tier === "High" && charter.tools?.skills?.write_team === true) {
6130
+ diagnostics.push({
6131
+ file,
6132
+ code: "CHARTER.SEMANTIC.HIGH_RISK_SKILL_WRITE_TEAM",
6133
+ path: "tools.skills.write_team",
6134
+ severity: "warning",
6135
+ message: "High-risk agents should not be granted tools.skills.write_team \u2014 they can pollute the shared team catalog"
6136
+ });
6137
+ }
6050
6138
  return diagnostics;
6051
6139
  }
6052
6140
 
@@ -6490,15 +6578,15 @@ function getTemplate(id) {
6490
6578
  return DEPLOYMENT_TEMPLATES.find((t) => t.id === id);
6491
6579
  }
6492
6580
 
6493
- // ../../packages/core/dist/plugins/context-validator.js
6581
+ // ../../packages/core/dist/integrations/context-validator.js
6494
6582
  import Ajv20202 from "ajv/dist/2020.js";
6495
6583
  import addFormats2 from "ajv-formats";
6496
6584
 
6497
- // ../../packages/core/dist/plugins/context-meta-schema.json
6585
+ // ../../packages/core/dist/integrations/context-meta-schema.json
6498
6586
  var context_meta_schema_default = {
6499
6587
  $schema: "https://json-schema.org/draft/2020-12/schema",
6500
6588
  $id: "https://augmented.dev/schemas/plugin-context.meta.schema.json",
6501
- title: "Plugin Context Schema (meta)",
6589
+ title: "Integration Context Schema (meta)",
6502
6590
  description: "Meta-schema for the constrained subset of JSON Schema that plugin authors may declare for their plugin context. Anything outside this subset is rejected at PUT time. See ENG-4341 / docs/plugins/plugin-context-rfc.md.",
6503
6591
  type: "object",
6504
6592
  required: ["type", "properties"],
@@ -6608,7 +6696,7 @@ var context_meta_schema_default = {
6608
6696
  }
6609
6697
  };
6610
6698
 
6611
- // ../../packages/core/dist/plugins/context-validator.js
6699
+ // ../../packages/core/dist/integrations/context-validator.js
6612
6700
  var ajv2 = new Ajv20202({ allErrors: true, strict: false });
6613
6701
  addFormats2(ajv2);
6614
6702
  var compiledMetaSchema = ajv2.compile(context_meta_schema_default);
@@ -7366,4 +7454,4 @@ export {
7366
7454
  managerInstallCommand,
7367
7455
  managerUninstallCommand
7368
7456
  };
7369
- //# sourceMappingURL=chunk-XJSQKRFV.js.map
7457
+ //# sourceMappingURL=chunk-LU6L2J32.js.map