@integrity-labs/agt-cli 0.28.1080 → 0.28.1081

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/bin/agt.js CHANGED
@@ -40,7 +40,7 @@ import {
40
40
  success,
41
41
  table,
42
42
  warn
43
- } from "../chunk-W4NEUOMU.js";
43
+ } from "../chunk-3O2US5IG.js";
44
44
  import {
45
45
  getProjectDir,
46
46
  isSessionResumeDisabled,
@@ -5474,7 +5474,7 @@ import { execFileSync, execSync } from "child_process";
5474
5474
  import { existsSync as existsSync11, realpathSync as realpathSync2 } from "fs";
5475
5475
  import chalk18 from "chalk";
5476
5476
  import ora16 from "ora";
5477
- var cliVersion = true ? "0.28.1080" : "dev";
5477
+ var cliVersion = true ? "0.28.1081" : "dev";
5478
5478
  async function fetchLatestVersion() {
5479
5479
  const host2 = getHost();
5480
5480
  if (!host2) return null;
@@ -6734,7 +6734,7 @@ function handleError(err) {
6734
6734
  }
6735
6735
 
6736
6736
  // src/bin/agt.ts
6737
- var cliVersion2 = true ? "0.28.1080" : "dev";
6737
+ var cliVersion2 = true ? "0.28.1081" : "dev";
6738
6738
  var program = new Command();
6739
6739
  program.name("agt").description("Augmented CLI \u2014 agent provisioning and management").version(cliVersion2).option("--json", "Emit machine-readable JSON output (suppress spinners and colors)").option("--skip-update-check", "Skip the automatic update check on startup");
6740
6740
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -7122,7 +7122,7 @@ function exchangeFailureKind(err) {
7122
7122
  }
7123
7123
 
7124
7124
  // src/lib/api-client.ts
7125
- var agtCliVersion = true ? "0.28.1080" : "dev";
7125
+ var agtCliVersion = true ? "0.28.1081" : "dev";
7126
7126
  var lastConfigHash = null;
7127
7127
  function setConfigHash(hash) {
7128
7128
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -12095,4 +12095,4 @@ export {
12095
12095
  managerInstallSystemUnitCommand,
12096
12096
  managerUninstallSystemUnitCommand
12097
12097
  };
12098
- //# sourceMappingURL=chunk-W4NEUOMU.js.map
12098
+ //# sourceMappingURL=chunk-3O2US5IG.js.map
@@ -67,7 +67,7 @@ import {
67
67
  safeWriteJsonAtomic,
68
68
  setConfigHash,
69
69
  tripClass
70
- } from "../chunk-W4NEUOMU.js";
70
+ } from "../chunk-3O2US5IG.js";
71
71
  import {
72
72
  getProjectDir as getProjectDir2,
73
73
  getReadyTasks,
@@ -14899,7 +14899,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
14899
14899
  var lastVersionCheckAt = 0;
14900
14900
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
14901
14901
  var lastResponsivenessProbeAt = 0;
14902
- var agtCliVersion = true ? "0.28.1080" : "dev";
14902
+ var agtCliVersion = true ? "0.28.1081" : "dev";
14903
14903
  function resolveBrewPath(execFileSync3) {
14904
14904
  try {
14905
14905
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -21168,6 +21168,23 @@ var SupportClient = class _SupportClient {
21168
21168
  var listSchema = external_exports.object({
21169
21169
  limit: external_exports.number().int().positive().optional().describe("Max rows to return (page size, clamped server-side). Not a scope - reads are always your own org.")
21170
21170
  });
21171
+ var NO_REQUESTER_REASONS = [
21172
+ "agent_initiated",
21173
+ "requester_declined_contact",
21174
+ "no_identifiable_user"
21175
+ ];
21176
+ var NO_REQUESTER_REASON_DESCRIPTION = 'Required when you pass neither requester_email nor requester_user_id: say why there is no requester. "agent_initiated" = you are filing this on your own initiative, no person asked; "requester_declined_contact" = a person asked but did not agree to be contacted; "no_identifiable_user" = a person asked but you cannot tell who. Never pass this together with a requester.';
21177
+ function requesterChoiceError(args) {
21178
+ const hasRequester = Boolean(args.requester_email?.trim() || args.requester_user_id?.trim());
21179
+ const hasReason = Boolean(args.no_requester_reason);
21180
+ if (hasRequester && hasReason) {
21181
+ return "Not sent: pass either a requester (requester_email or requester_user_id) or no_requester_reason, not both.";
21182
+ }
21183
+ if (!hasRequester && !hasReason) {
21184
+ return `Not sent: say who this request is for. Pass requester_email (only with that person's consent) or requester_user_id, so Ninjafy can reply to them. If there is no one to reply to, pass no_requester_reason: "agent_initiated" (nobody asked, you are filing it yourself), "requester_declined_contact" (they asked but did not agree to be contacted) or "no_identifiable_user" (you cannot tell who asked). Then call this again.`;
21185
+ }
21186
+ return null;
21187
+ }
21171
21188
  var fileRequestSchema = external_exports.object({
21172
21189
  title: external_exports.string().min(1).describe("Short summary of the bug or request."),
21173
21190
  description: external_exports.string().min(1).describe("Full detail: what happened / what is wanted, and any reproduction steps."),
@@ -21177,7 +21194,8 @@ var fileRequestSchema = external_exports.object({
21177
21194
  ),
21178
21195
  requester_user_id: external_exports.string().uuid().optional().describe(
21179
21196
  "Optional Ninjafy user id (UUID) of the requester, used to look up their email for the resolved-notification when you have an id but not an address."
21180
- )
21197
+ ),
21198
+ no_requester_reason: external_exports.enum(NO_REQUESTER_REASONS).optional().describe(NO_REQUESTER_REASON_DESCRIPTION)
21181
21199
  });
21182
21200
  var searchKbSchema = external_exports.object({
21183
21201
  query: external_exports.string().trim().min(1).describe('What to look up in the knowledge base (e.g. "agent keeps restarting", "connect Slack").'),
@@ -21387,9 +21405,11 @@ server.tool(
21387
21405
  );
21388
21406
  server.tool(
21389
21407
  "support_file_support_request",
21390
- "File a BUG report to Ninjafy support when you hit a platform problem you cannot resolve from your own org (Ninjafy was formerly Augmented Team; either name means this platform). It goes to the Ninjafy support queue, not your org. Pass { title, description }. Returns { ok, status } - relay the outcome to the user.",
21408
+ "File a BUG report to Ninjafy support when you hit a platform problem you cannot resolve from your own org (Ninjafy was formerly Augmented Team; either name means this platform). It goes to the Ninjafy support queue, not your org. Pass { title, description } plus EITHER the requester (requester_email, only with their consent, or requester_user_id) OR no_requester_reason saying why there is none. Returns { ok, status } - relay the outcome to the user.",
21391
21409
  fileRequestSchema.shape,
21392
21410
  async (args) => {
21411
+ const choiceError = requesterChoiceError(args);
21412
+ if (choiceError) return { content: [{ type: "text", text: choiceError }], isError: true };
21393
21413
  try {
21394
21414
  return ok(await client.fileSupportRequest(args));
21395
21415
  } catch (err) {
@@ -21399,9 +21419,11 @@ server.tool(
21399
21419
  );
21400
21420
  server.tool(
21401
21421
  "support_file_feature_request",
21402
- 'File a FEATURE or new-integration request to Ninjafy support, formerly Augmented Team (goes to the support queue, not your org). Use `provider` for an integration ask (e.g. "notion"). Pass { title, description, provider? }. Returns { ok, status }.',
21422
+ 'File a FEATURE or new-integration request to Ninjafy support, formerly Augmented Team (goes to the support queue, not your org). Use `provider` for an integration ask (e.g. "notion"). Pass { title, description, provider? } plus EITHER the requester (requester_email, only with their consent, or requester_user_id) OR no_requester_reason saying why there is none. Returns { ok, status }.',
21403
21423
  fileRequestSchema.shape,
21404
21424
  async (args) => {
21425
+ const choiceError = requesterChoiceError(args);
21426
+ if (choiceError) return { content: [{ type: "text", text: choiceError }], isError: true };
21405
21427
  try {
21406
21428
  return ok(await client.fileFeatureRequest(args));
21407
21429
  } catch (err) {
package/dist/mcp/index.js CHANGED
@@ -46685,6 +46685,23 @@ var FEATURE_REQUEST_TYPES = [
46685
46685
  "bug",
46686
46686
  "other"
46687
46687
  ];
46688
+ var NO_REQUESTER_REASONS = [
46689
+ "agent_initiated",
46690
+ "requester_declined_contact",
46691
+ "no_identifiable_user"
46692
+ ];
46693
+ var NO_REQUESTER_REASON_DESCRIPTION = 'Required when you pass neither requester_email nor requester_user_id: say why there is no requester. "agent_initiated" = you are filing this on your own initiative, no person asked; "requester_declined_contact" = a person asked but did not agree to be contacted; "no_identifiable_user" = a person asked but you cannot tell who. Never pass this together with a requester.';
46694
+ function requesterChoiceError(args) {
46695
+ const hasRequester = Boolean(args.requester_email?.trim() || args.requester_user_id?.trim());
46696
+ const hasReason = Boolean(args.no_requester_reason);
46697
+ if (hasRequester && hasReason) {
46698
+ return "Not sent: pass either a requester (requester_email or requester_user_id) or no_requester_reason, not both.";
46699
+ }
46700
+ if (!hasRequester && !hasReason) {
46701
+ return `Not sent: say who this request is for. Pass requester_email (only with that person's consent) or requester_user_id, so Ninjafy can reply to them. If there is no one to reply to, pass no_requester_reason: "agent_initiated" (nobody asked, you are filing it yourself), "requester_declined_contact" (they asked but did not agree to be contacted) or "no_identifiable_user" (you cannot tell who asked). Then call this again.`;
46702
+ }
46703
+ return null;
46704
+ }
46688
46705
  function describeFeatureRequestResult(resp) {
46689
46706
  if (resp.status === "created") {
46690
46707
  return {
@@ -48627,7 +48644,7 @@ server.tool(
48627
48644
  );
48628
48645
  server.tool(
48629
48646
  "request_feature",
48630
- 'Send a feature request to Ninjafy support (formerly Augmented Team \u2014 the same platform either way, so use this whichever name the user says) \u2014 most often to ask for a NEW third-party integration that is not in your toolkit yet (set feature_type="integration" and put the service name in provider). Also accepts general product feedback (other feature_type values). Use this when a user needs a capability you do not have and that you cannot configure yourself. Do not use it for things you can already do or set up. If the request came from a specific end user, you can pass their requester_email (only with their consent) so Ninjafy can email them directly when it is resolved.',
48647
+ 'Send a feature request to Ninjafy support (formerly Augmented Team \u2014 the same platform either way, so use this whichever name the user says) \u2014 most often to ask for a NEW third-party integration that is not in your toolkit yet (set feature_type="integration" and put the service name in provider). Also accepts general product feedback (other feature_type values). Use this when a user needs a capability you do not have and that you cannot configure yourself. Do not use it for things you can already do or set up. Say who the request is for: pass the requester_email of the person who asked (only with their consent) or their requester_user_id, so Ninjafy can reply to them; if there is no one to reply to, pass no_requester_reason instead. One of the two is required.',
48631
48648
  {
48632
48649
  feature_type: external_exports.enum(FEATURE_REQUEST_TYPES).describe(
48633
48650
  'What kind of request this is. Use "integration" to ask for a new third-party integration/toolkit; otherwise: tool, channel, capability, bug, or other.'
@@ -48647,9 +48664,14 @@ server.tool(
48647
48664
  ),
48648
48665
  requester_user_id: external_exports.string().uuid().optional().describe(
48649
48666
  "Optional Ninjafy user id (UUID) of the requester, used to look up their email for the resolved-notification when you have an id but not an address. Omit unless you know the actual Ninjafy user id."
48650
- )
48667
+ ),
48668
+ no_requester_reason: external_exports.enum(NO_REQUESTER_REASONS).optional().describe(NO_REQUESTER_REASON_DESCRIPTION)
48651
48669
  },
48652
48670
  async (params) => {
48671
+ const choiceError = requesterChoiceError(params);
48672
+ if (choiceError) {
48673
+ return { content: [{ type: "text", text: choiceError }], isError: true };
48674
+ }
48653
48675
  if (!AGT_AGENT_CODE_NAME) {
48654
48676
  return {
48655
48677
  content: [{ type: "text", text: "Error: AGT_AGENT_CODE_NAME not configured." }],
@@ -48666,6 +48688,7 @@ server.tool(
48666
48688
  ...params.provider ? { provider: params.provider } : {},
48667
48689
  ...params.requester_email ? { requester_email: params.requester_email } : {},
48668
48690
  ...params.requester_user_id ? { requester_user_id: params.requester_user_id } : {},
48691
+ ...params.no_requester_reason ? { no_requester_reason: params.no_requester_reason } : {},
48669
48692
  ...params.acknowledged_catalogue_alternative ? { acknowledged_catalogue_alternative: true } : {}
48670
48693
  });
48671
48694
  } catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.1080",
3
+ "version": "0.28.1081",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {