@cursor/july 0.1.54 → 0.1.55

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.
Files changed (106) hide show
  1. package/dist/docs/404.html +2 -2
  2. package/dist/docs/ab.html +3 -3
  3. package/dist/docs/assets/{app.DAKcDclS.js → app.CVQxhV85.js} +1 -1
  4. package/dist/docs/assets/chunks/@localSearchIndexroot.BFpWSo6D.js +1 -0
  5. package/dist/docs/assets/chunks/{VPLocalSearchBox.BNIaCSfG.js → VPLocalSearchBox.QAPzJjql.js} +1 -1
  6. package/dist/docs/assets/chunks/{theme.B47GzJjc.js → theme.CSxTCOFu.js} +2 -2
  7. package/dist/docs/assets/{reference_cli.md.-V6J7Cl8.js → reference_cli.md.D_CCfG8R.js} +2 -0
  8. package/dist/docs/assets/templates_triage.md.DWuQ1bZz.js +9 -0
  9. package/dist/docs/assets/templates_triage.md.DWuQ1bZz.lean.js +1 -0
  10. package/dist/docs/building-with-agents.html +3 -3
  11. package/dist/docs/concepts.html +3 -3
  12. package/dist/docs/deployment.html +3 -3
  13. package/dist/docs/evals.html +3 -3
  14. package/dist/docs/example-agents/approval-buddy.html +3 -3
  15. package/dist/docs/example-agents/benny.html +3 -3
  16. package/dist/docs/example-agents/bugbot.html +3 -3
  17. package/dist/docs/example-agents/codebase-wiki.html +3 -3
  18. package/dist/docs/example-agents/codeowners-review.html +3 -3
  19. package/dist/docs/example-agents/concierge.html +3 -3
  20. package/dist/docs/example-agents/fsd.html +3 -3
  21. package/dist/docs/example-agents/index.html +3 -3
  22. package/dist/docs/example-agents/knowledge-base.html +3 -3
  23. package/dist/docs/example-agents/oncall.html +3 -3
  24. package/dist/docs/example-agents/security-reviewer.html +3 -3
  25. package/dist/docs/example-agents/slack-agent.html +3 -3
  26. package/dist/docs/example-agents/weather-agent.html +3 -3
  27. package/dist/docs/guides/agent-to-agent.html +3 -3
  28. package/dist/docs/guides/cloud-runtime.html +3 -3
  29. package/dist/docs/guides/github.html +3 -3
  30. package/dist/docs/guides/human-in-the-loop.html +3 -3
  31. package/dist/docs/guides/mcp-oauth.html +3 -3
  32. package/dist/docs/guides/opentelemetry.html +3 -3
  33. package/dist/docs/guides/slack.html +3 -3
  34. package/dist/docs/guides/webhooks.html +3 -3
  35. package/dist/docs/hashmap.json +1 -1
  36. package/dist/docs/hillclimbing.html +3 -3
  37. package/dist/docs/index.html +3 -3
  38. package/dist/docs/quickstart.html +3 -3
  39. package/dist/docs/reference/agent-config.html +3 -3
  40. package/dist/docs/reference/artifacts.html +3 -3
  41. package/dist/docs/reference/channels.html +3 -3
  42. package/dist/docs/reference/cli.html +6 -4
  43. package/dist/docs/reference/connections.html +3 -3
  44. package/dist/docs/reference/hooks.html +3 -3
  45. package/dist/docs/reference/http-api.html +3 -3
  46. package/dist/docs/reference/instructions.html +3 -3
  47. package/dist/docs/reference/playground.html +3 -3
  48. package/dist/docs/reference/project-layout.html +3 -3
  49. package/dist/docs/reference/prompt.html +3 -3
  50. package/dist/docs/reference/schedules.html +3 -3
  51. package/dist/docs/reference/sessions.html +3 -3
  52. package/dist/docs/reference/skills.html +3 -3
  53. package/dist/docs/reference/subagents.html +3 -3
  54. package/dist/docs/reference/tools.html +3 -3
  55. package/dist/docs/scaffolding-agents.html +3 -3
  56. package/dist/docs/storage.html +3 -3
  57. package/dist/docs/templates/triage.html +14 -16
  58. package/dist/docs/troubleshooting.html +3 -3
  59. package/dist/internal/cli-ax.d.ts.map +1 -1
  60. package/dist/internal/cli-ax.js +10 -1
  61. package/dist/internal/cli-deploy.js +1 -1
  62. package/dist/internal/cli-slack.d.ts +2 -0
  63. package/dist/internal/cli-slack.d.ts.map +1 -1
  64. package/dist/internal/cli-slack.js +35 -18
  65. package/dist/internal/init-project.d.ts +3 -0
  66. package/dist/internal/init-project.d.ts.map +1 -1
  67. package/dist/internal/init-project.js +77 -45
  68. package/dist/internal/slack-provision-client.js +1 -1
  69. package/dist/playground/assets/{index-BHAPd9KT.js → index-0oqXUkrR.js} +44 -44
  70. package/dist/playground/assets/index-tHCjJxv4.css +1 -0
  71. package/dist/playground/index.html +2 -2
  72. package/docs/reference/cli.md +2 -0
  73. package/docs/templates/triage.md +59 -101
  74. package/package.json +1 -1
  75. package/src/internal/cli-ax.ts +10 -1
  76. package/src/internal/cli-deploy.ts +2 -2
  77. package/src/internal/cli-slack.ts +57 -18
  78. package/src/internal/init-project.ts +93 -48
  79. package/src/internal/slack-provision-client.ts +1 -1
  80. package/templates/triage/README.md +27 -29
  81. package/templates/triage/agent/agent.ts +1 -0
  82. package/templates/triage/agent/channels/queue.ts +47 -0
  83. package/templates/triage/agent/channels/webhook.ts +50 -0
  84. package/templates/triage/agent/instructions.md +24 -13
  85. package/templates/triage/agent/lib/actuate.ts +759 -0
  86. package/templates/triage/agent/lib/parse-queue-event.ts +168 -0
  87. package/templates/triage/agent/lib/tracker.ts +5 -0
  88. package/templates/triage/agent/lib/types.ts +52 -0
  89. package/templates/triage/agent/lib/verify-webhook.ts +81 -0
  90. package/templates/triage/agent/skills/triage-rubric.md +6 -5
  91. package/templates/triage/agent/tools/record_triage.ts +24 -5
  92. package/templates/triage/evals/triage.eval.ts +25 -3
  93. package/templates/triage/overlays/jira/README.md +21 -0
  94. package/templates/triage/overlays/jira/agent/lib/tracker.ts +8 -0
  95. package/templates/triage/overlays/jira/agent/mcp-connections/tracker.ts +7 -0
  96. package/templates/triage/overlays/linear/README.md +21 -0
  97. package/templates/triage/overlays/linear/agent/lib/tracker.ts +8 -0
  98. package/templates/triage/overlays/linear/agent/mcp-connections/tracker.ts +7 -0
  99. package/templates/triage/package.json +1 -1
  100. package/dist/docs/assets/chunks/@localSearchIndexroot.C4uxzYEU.js +0 -1
  101. package/dist/docs/assets/templates_triage.md.CConZt1z.js +0 -11
  102. package/dist/docs/assets/templates_triage.md.CConZt1z.lean.js +0 -1
  103. package/dist/playground/assets/index-DpKH0HcT.css +0 -1
  104. package/templates/triage/agent/channels/intake.ts +0 -20
  105. package/templates/triage/agent/channels/slack.ts +0 -3
  106. /package/dist/docs/assets/{reference_cli.md.-V6J7Cl8.lean.js → reference_cli.md.D_CCfG8R.lean.js} +0 -0
@@ -82,7 +82,7 @@ export function resolveDeployAuth(options) {
82
82
  }
83
83
  teamId = identity.teamId;
84
84
  const dim = stderrPalette().dim;
85
- err(`${dim(`Using team ${teamId}${identity.teamName === undefined ? "" : ` (${identity.teamName})`}the account's team; pass --team to override.`)}\n`);
85
+ err(`${dim(`Using team ${teamId}${identity.teamName === undefined ? "" : ` (${identity.teamName})`}`)}\n${dim(" the account's team pass --team to override.")}\n`);
86
86
  }
87
87
  return {
88
88
  client,
@@ -4,6 +4,7 @@
4
4
  * `init --manual` for hand-imported manifests.
5
5
  */
6
6
  import { runSlackDoctor } from "../channels/slack/index.js";
7
+ import { type TerminalPalette } from "./terminal-style.js";
7
8
  export interface SlackCliOptions {
8
9
  dir: string;
9
10
  name?: string;
@@ -40,6 +41,7 @@ export interface SlackCliOptions {
40
41
  doctorImpl?: typeof runSlackDoctor;
41
42
  out?: (text: string) => void;
42
43
  err?: (text: string) => void;
44
+ palette?: TerminalPalette;
43
45
  }
44
46
  export declare function cmdSlack(subcommand: string | undefined, options: SlackCliOptions): Promise<number>;
45
47
  export declare function cmdSlackCreate(options: SlackCliOptions): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAIL,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAsBpC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AA2CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AA4OD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAmLjB;AAiDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5E"}
1
+ {"version":3,"file":"cli-slack.d.ts","sourceRoot":"","sources":["../../src/internal/cli-slack.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAIL,cAAc,EAGf,MAAM,4BAA4B,CAAC;AAqBpC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,cAAc,CAAC;IACnC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AA2CD,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAgRD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAoLjB;AAiDD,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5E"}
@@ -25,6 +25,7 @@ import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
25
25
  import { loadAgentLocalEnv } from "./local-env.js";
26
26
  import { openBrowser } from "./open-browser.js";
27
27
  import { AgentServeSlackClient, SlackProvisionApiError, } from "./slack-provision-client.js";
28
+ import { stderrPalette } from "./terminal-style.js";
28
29
  const SLACK_HELP = `${CLI} slack — Slack channel pack helpers (Socket Mode)
29
30
 
30
31
  Usage:
@@ -241,7 +242,7 @@ function applySlackCreateFileIcon(ctx, source, appId) {
241
242
  */
242
243
  function prepareProvision(options) {
243
244
  return __awaiter(this, void 0, void 0, function* () {
244
- var _a, _b, _c, _d;
245
+ var _a, _b, _c, _d, _e;
245
246
  const out = (_a = options.out) !== null && _a !== void 0 ? _a : ((text) => void process.stdout.write(text));
246
247
  const err = errStream(options);
247
248
  const auth = yield resolveDeployAuth({
@@ -264,12 +265,31 @@ function prepareProvision(options) {
264
265
  json: options.json === true,
265
266
  out,
266
267
  err,
267
- openBrowserImpl: (_b = options.openBrowserImpl) !== null && _b !== void 0 ? _b : openBrowser,
268
- pollIntervalMs: (_c = options.connectPollIntervalMs) !== null && _c !== void 0 ? _c : DEFAULT_WIZARD_POLL_INTERVAL_MS,
269
- pollTimeoutMs: (_d = options.connectPollTimeoutMs) !== null && _d !== void 0 ? _d : DEFAULT_WIZARD_POLL_TIMEOUT_MS,
268
+ dim: ((_b = options.palette) !== null && _b !== void 0 ? _b : stderrPalette()).dim,
269
+ openBrowserImpl: (_c = options.openBrowserImpl) !== null && _c !== void 0 ? _c : openBrowser,
270
+ pollIntervalMs: (_d = options.connectPollIntervalMs) !== null && _d !== void 0 ? _d : DEFAULT_WIZARD_POLL_INTERVAL_MS,
271
+ pollTimeoutMs: (_e = options.connectPollTimeoutMs) !== null && _e !== void 0 ? _e : DEFAULT_WIZARD_POLL_TIMEOUT_MS,
270
272
  };
271
273
  });
272
274
  }
275
+ function writePendingAdminWait(ctx, poll) {
276
+ const appSuffix = poll.appId === undefined ? "" : ` (${poll.appId})`;
277
+ const requestUrl = poll.oauthAuthorizeUrl !== undefined && poll.oauthAuthorizeUrl.length > 0
278
+ ? poll.oauthAuthorizeUrl
279
+ : undefined;
280
+ ctx.err(`Waiting for a Slack admin to approve the app${appSuffix}.\n\n`);
281
+ if (requestUrl !== undefined) {
282
+ ctx.err(ctx.dim(` Slack will notify workspace owners once the request is in their queue.\n` +
283
+ ` Open this page to file it or send a reminder:\n\n`));
284
+ ctx.err(` ${requestUrl}\n\n`);
285
+ ctx.openBrowserImpl(requestUrl);
286
+ }
287
+ else {
288
+ ctx.err(ctx.dim(` Slack will notify workspace owners once the request is in their queue.\n\n`));
289
+ }
290
+ ctx.err(ctx.dim(` Keep this command running.\n` +
291
+ ` After an admin approves, click Retry in the dashboard.\n`));
292
+ }
273
293
  export function cmdSlackCreate(options) {
274
294
  return __awaiter(this, void 0, void 0, function* () {
275
295
  var _a, _b, _c;
@@ -298,7 +318,7 @@ export function cmdSlackCreate(options) {
298
318
  return 1;
299
319
  }
300
320
  if (wrote.length > 0 && !ctx.json) {
301
- ctx.err(`Scaffolded the Slack channel: ${wrote.join(", ")}\n`);
321
+ ctx.err(`${ctx.dim(`Scaffolded the Slack channel: ${wrote.join(", ")}`)}\n`);
302
322
  }
303
323
  const source = yield inferDeployGitSource(target.dir);
304
324
  let minted;
@@ -321,9 +341,10 @@ export function cmdSlackCreate(options) {
321
341
  catch (error) {
322
342
  return renderSlackApiError(error, ctx.err);
323
343
  }
324
- ctx.err(`Finish Slack setup in the browser:\n\n ${minted.url}\n\n` +
325
- `Sign in as the same Cursor account that ran this command. ` +
326
- `The CLI waits here (up to ${Math.round(ctx.pollTimeoutMs / 60000)} minutes).\n`);
344
+ const waitMinutes = Math.round(ctx.pollTimeoutMs / 60000);
345
+ ctx.err(`Finish Slack setup in the browser:\n\n ${minted.url}\n\n`);
346
+ ctx.err(ctx.dim(` Sign in as the same Cursor account that ran this command.\n` +
347
+ ` The CLI waits here (up to ${waitMinutes} minutes).\n`));
327
348
  ctx.openBrowserImpl(minted.url);
328
349
  const deadline = Date.now() + ctx.pollTimeoutMs;
329
350
  let sawPendingAdmin = false;
@@ -348,17 +369,12 @@ export function cmdSlackCreate(options) {
348
369
  }
349
370
  if (poll.status === "pending_admin_approval" && !sawPendingAdmin) {
350
371
  sawPendingAdmin = true;
351
- const appSuffix = poll.appId === undefined ? "" : ` (${poll.appId})`;
352
- ctx.err(`Waiting for a Slack admin to approve the app${appSuffix}. Keep this command running.\n` +
353
- `Managed install does not file the request. Open Slack to submit it; that same page lets you send a reminder to workspace owners.\n`);
354
- if (poll.oauthAuthorizeUrl !== undefined &&
355
- poll.oauthAuthorizeUrl.length > 0) {
356
- ctx.err(` ${poll.oauthAuthorizeUrl}\n`);
357
- }
358
- ctx.err("After an admin approves, click Retry in the dashboard.\n");
372
+ writePendingAdminWait(ctx, poll);
359
373
  }
360
374
  if (Date.now() >= deadline) {
361
- ctx.err(`Timed out waiting for Slack setup. Finish it in the browser, then re-run \`${CLI} slack create\`.\n ${minted.url}\n`);
375
+ ctx.err(`Timed out waiting for Slack setup.\n\n`);
376
+ ctx.err(ctx.dim(` Finish it in the browser, then re-run \`${CLI} slack create\`.\n\n`));
377
+ ctx.err(` ${minted.url}\n`);
362
378
  return 1;
363
379
  }
364
380
  yield sleep(ctx.pollIntervalMs);
@@ -391,7 +407,8 @@ export function cmdSlackCreate(options) {
391
407
  process.env[key] = value;
392
408
  }
393
409
  if (poll.localEnv.appToken === undefined) {
394
- ctx.err(`warning: Slack did not return an app-level token, so ${target.envKeys.app} was not written; re-run \`${CLI} slack create\` to recover it.\n`);
410
+ ctx.err(ctx.dim(`warning: Slack did not return an app-level token, so ${target.envKeys.app} was not written.\n` +
411
+ ` Re-run \`${CLI} slack create\` to recover it.\n`));
395
412
  }
396
413
  let iconStatus;
397
414
  if (poll.appId !== undefined) {
@@ -9,6 +9,8 @@ export interface InitProjectOptions {
9
9
  /** Model id override written into agent.ts. */
10
10
  model?: string;
11
11
  templateDir?: string;
12
+ overlayDir?: string;
13
+ templateName?: string;
12
14
  }
13
15
  export type InitFileAction = "create" | "exist";
14
16
  export interface InitFileEntry {
@@ -29,6 +31,7 @@ export type TemplateResolution = {
29
31
  ok: true;
30
32
  name: string;
31
33
  dir: string;
34
+ overlayDir?: string;
32
35
  } | {
33
36
  ok: false;
34
37
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"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"}
@@ -11,25 +11,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  });
12
12
  };
13
13
  import { spawn } from "node:child_process";
14
- import { existsSync, readdirSync, readFileSync } from "node:fs";
14
+ import { existsSync, readFileSync } from "node:fs";
15
15
  import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
16
16
  import { basename, dirname, join, relative, resolve } from "node:path";
17
17
  import { CLI_COMMAND_NAME, PACKAGE_NAME, packageRootDir, packageVersion, } from "./distribution.js";
18
18
  import { makePalette, stdoutPalette, } from "./terminal-style.js";
19
+ const TRIAGE_OVERLAYS = {
20
+ "triage-linear": "linear",
21
+ "triage-jira": "jira",
22
+ };
23
+ function canonicalTemplateName(name) {
24
+ return name === "triage" ? "triage-linear" : name;
25
+ }
19
26
  export function availableTemplates() {
20
- const templatesDir = join(packageRootDir(), "templates");
21
- try {
22
- return readdirSync(templatesDir, { withFileTypes: true })
23
- .filter((entry) => entry.isDirectory())
24
- .map((entry) => entry.name)
25
- .sort();
26
- }
27
- catch (error) {
28
- if (hasErrorCode(error, "ENOENT")) {
29
- return [];
30
- }
31
- throw error;
32
- }
27
+ return Object.keys(TRIAGE_OVERLAYS).sort();
33
28
  }
34
29
  export function resolveTemplate(name) {
35
30
  if (!/^[a-z][a-z0-9-]*$/.test(name)) {
@@ -38,20 +33,20 @@ export function resolveTemplate(name) {
38
33
  message: "template name must match /^[a-z][a-z0-9-]*$/",
39
34
  };
40
35
  }
41
- const available = availableTemplates();
42
- if (!available.includes(name)) {
43
- const detail = available.length === 0
44
- ? "no templates ship with this build"
45
- : `available: ${available.join(", ")}`;
36
+ const resolved = canonicalTemplateName(name);
37
+ const overlay = TRIAGE_OVERLAYS[resolved];
38
+ if (overlay !== undefined) {
39
+ const dir = join(packageRootDir(), "templates", "triage");
46
40
  return {
47
- ok: false,
48
- message: `unknown template "${name}" (${detail})`,
41
+ ok: true,
42
+ name: resolved,
43
+ dir,
44
+ overlayDir: join(dir, "overlays", overlay),
49
45
  };
50
46
  }
51
47
  return {
52
- ok: true,
53
- name,
54
- dir: join(packageRootDir(), "templates", name),
48
+ ok: false,
49
+ message: `unknown template "${name}" (available: ${availableTemplates().join(", ")})`,
55
50
  };
56
51
  }
57
52
  /**
@@ -79,6 +74,11 @@ export function checkInitTarget(rootDir, template) {
79
74
  if (marker === template) {
80
75
  return { ok: true };
81
76
  }
77
+ if (marker !== undefined &&
78
+ template !== undefined &&
79
+ canonicalTemplateName(marker) === canonicalTemplateName(template)) {
80
+ return { ok: true };
81
+ }
82
82
  if (template === undefined) {
83
83
  return {
84
84
  ok: false,
@@ -121,7 +121,7 @@ const SCAFFOLD_EMPTY_DIRS = [
121
121
  ];
122
122
  export function initProject(options) {
123
123
  return __awaiter(this, void 0, void 0, function* () {
124
- var _a, _b;
124
+ var _a, _b, _c;
125
125
  const rootDir = resolve(options.dir);
126
126
  const projectName = basename(rootDir);
127
127
  const name = (_a = options.name) !== null && _a !== void 0 ? _a : projectName;
@@ -145,25 +145,29 @@ export function initProject(options) {
145
145
  });
146
146
  if (options.templateDir !== undefined) {
147
147
  const templateDir = options.templateDir;
148
- const entries = yield readdir(templateDir, {
149
- recursive: true,
150
- withFileTypes: true,
151
- });
152
- const relativePaths = entries
153
- .filter((entry) => entry.isFile())
154
- .map((entry) => relative(templateDir, join(entry.parentPath, entry.name)))
155
- .sort();
156
- for (const rel of relativePaths) {
157
- const source = join(templateDir, rel);
158
- if (rel === "package.json") {
159
- const packageJson = JSON.parse(yield readFile(source, "utf8"));
160
- packageJson.name = projectName;
161
- packageJson.dependencies[PACKAGE_NAME] = `^${packageVersion()}`;
162
- packageJson.cursorAgentTemplate = basename(templateDir);
163
- yield write(rel, `${JSON.stringify(packageJson, null, 2)}\n`);
164
- }
165
- else {
166
- yield write(rel, yield readFile(source));
148
+ const overlayDir = options.overlayDir;
149
+ const overlayPaths = overlayDir ? yield listTemplateFiles(overlayDir) : [];
150
+ const overlaySet = new Set(overlayPaths);
151
+ const corePaths = (yield listTemplateFiles(templateDir)).filter((rel) => !overlaySet.has(rel));
152
+ const templateName = (_c = options.templateName) !== null && _c !== void 0 ? _c : basename(templateDir);
153
+ for (const rel of corePaths) {
154
+ yield writeTemplateFile({
155
+ write,
156
+ sourceDir: templateDir,
157
+ rel,
158
+ projectName,
159
+ templateName,
160
+ });
161
+ }
162
+ if (overlayDir !== undefined) {
163
+ for (const rel of overlayPaths) {
164
+ yield writeTemplateFile({
165
+ write,
166
+ sourceDir: overlayDir,
167
+ rel,
168
+ projectName,
169
+ templateName,
170
+ });
167
171
  }
168
172
  }
169
173
  return {
@@ -268,6 +272,33 @@ export default memoryHook();
268
272
  };
269
273
  });
270
274
  }
275
+ function listTemplateFiles(root) {
276
+ return __awaiter(this, void 0, void 0, function* () {
277
+ const entries = yield readdir(root, {
278
+ recursive: true,
279
+ withFileTypes: true,
280
+ });
281
+ return entries
282
+ .filter((entry) => entry.isFile())
283
+ .map((entry) => relative(root, join(entry.parentPath, entry.name)))
284
+ .filter((rel) => rel.split(/[\\/]/)[0] !== "overlays")
285
+ .sort();
286
+ });
287
+ }
288
+ function writeTemplateFile(input) {
289
+ return __awaiter(this, void 0, void 0, function* () {
290
+ const source = join(input.sourceDir, input.rel);
291
+ if (input.rel === "package.json") {
292
+ const packageJson = JSON.parse(yield readFile(source, "utf8"));
293
+ packageJson.name = input.projectName;
294
+ packageJson.dependencies[PACKAGE_NAME] = `^${packageVersion()}`;
295
+ packageJson.cursorAgentTemplate = input.templateName;
296
+ yield input.write(input.rel, `${JSON.stringify(packageJson, null, 2)}\n`);
297
+ return;
298
+ }
299
+ yield input.write(input.rel, yield readFile(source));
300
+ });
301
+ }
271
302
  export function isEexist(error) {
272
303
  return hasErrorCode(error, "EEXIST");
273
304
  }
@@ -551,7 +582,8 @@ export function printInitGuide() {
551
582
 
552
583
  Scaffold a project, then open the playground:
553
584
  npx ${PACKAGE_NAME} init ./my-agent # installs deps + links agent-sdk onto PATH
554
- npx ${PACKAGE_NAME} init ./my-triage --template triage # start from a template (agent-sdk templates: triage)
585
+ npx ${PACKAGE_NAME} init ./my-triage --template triage-linear # comment on Linear issues
586
+ npx ${PACKAGE_NAME} init ./my-triage --template triage-jira # comment on Jira issues
555
587
  cd ./my-agent && agent-sdk dev # or: npx ${PACKAGE_NAME} dev
556
588
 
557
589
  Recommended loop once the project exists (from the project directory):
@@ -296,7 +296,7 @@ function mapErrorResponse(response, bodyText, context) {
296
296
  case 401:
297
297
  return new SlackProvisionApiError("The Cursor API key was rejected. Run `agent-sdk login` again or update CURSOR_API_KEY.", { status: 401 });
298
298
  case 403:
299
- return new SlackProvisionApiError(`${serverError !== null && serverError !== void 0 ? serverError : "Not authorized"} Slack provisioning needs team membership and the cloud-agent entitlement on that team.`, { status: 403 });
299
+ return new SlackProvisionApiError(serverError !== null && serverError !== void 0 ? serverError : "Not authorized for this team", { status: 403 });
300
300
  case 404: {
301
301
  // Fastify's route-not-found envelope means we hit the wrong host
302
302
  // (api2 vs api.cursor.com), not a closed gate.