@orderful/droid 0.42.0 → 0.43.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.
Files changed (31) hide show
  1. package/.claude-plugin/plugin.json +2 -0
  2. package/CHANGELOG.md +12 -0
  3. package/dist/bin/droid.js +183 -16
  4. package/dist/commands/repos.d.ts.map +1 -1
  5. package/dist/commands/tui/views/ReposManagementScreen.d.ts.map +1 -1
  6. package/dist/commands/tui/views/ReposViewerScreen.d.ts.map +1 -1
  7. package/dist/lib/types.d.ts +2 -0
  8. package/dist/lib/types.d.ts.map +1 -1
  9. package/dist/tools/meeting/.claude-plugin/plugin.json +1 -1
  10. package/dist/tools/meeting/TOOL.yaml +1 -1
  11. package/dist/tools/meeting/skills/meeting/SKILL.md +15 -7
  12. package/dist/tools/release/.claude-plugin/plugin.json +22 -0
  13. package/dist/tools/release/TOOL.yaml +21 -0
  14. package/dist/tools/release/commands/release.md +28 -0
  15. package/dist/tools/release/skills/release/SKILL.md +73 -0
  16. package/dist/tools/release/skills/release/references/templates.md +83 -0
  17. package/dist/tools/release/skills/release/references/workflows.md +129 -0
  18. package/package.json +1 -1
  19. package/src/commands/repos.ts +29 -0
  20. package/src/commands/tui/views/ReposManagementScreen.tsx +177 -16
  21. package/src/commands/tui/views/ReposViewerScreen.tsx +5 -0
  22. package/src/lib/types.ts +2 -0
  23. package/src/tools/meeting/.claude-plugin/plugin.json +1 -1
  24. package/src/tools/meeting/TOOL.yaml +1 -1
  25. package/src/tools/meeting/skills/meeting/SKILL.md +15 -7
  26. package/src/tools/release/.claude-plugin/plugin.json +22 -0
  27. package/src/tools/release/TOOL.yaml +21 -0
  28. package/src/tools/release/commands/release.md +28 -0
  29. package/src/tools/release/skills/release/SKILL.md +73 -0
  30. package/src/tools/release/skills/release/references/templates.md +83 -0
  31. package/src/tools/release/skills/release/references/workflows.md +129 -0
@@ -25,6 +25,7 @@
25
25
  "./src/tools/meeting/skills/meeting/SKILL.md",
26
26
  "./src/tools/plan/skills/plan/SKILL.md",
27
27
  "./src/tools/project/skills/project/SKILL.md",
28
+ "./src/tools/release/skills/release/SKILL.md",
28
29
  "./src/tools/share/skills/share/SKILL.md",
29
30
  "./src/tools/status-update/skills/status-update/SKILL.md",
30
31
  "./src/tools/tech-design/skills/tech-design/SKILL.md",
@@ -40,6 +41,7 @@
40
41
  "./src/tools/meeting/commands/meeting.md",
41
42
  "./src/tools/plan/commands/plan.md",
42
43
  "./src/tools/project/commands/project.md",
44
+ "./src/tools/release/commands/release.md",
43
45
  "./src/tools/share/commands/share.md",
44
46
  "./src/tools/status-update/commands/status-update.md",
45
47
  "./src/tools/tech-design/commands/tech-design.md",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @orderful/droid
2
2
 
3
+ ## 0.43.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#256](https://github.com/Orderful/droid/pull/256) [`a90fd0d`](https://github.com/Orderful/droid/commit/a90fd0d7640c2fbf3ee9645e58aa7cc6e5b698ff) Thanks [@frytyler](https://github.com/frytyler)! - Add release tool for ceremony automation — create release PRs, check status, and notify Slack. Extends RepoConfig with optional release_branch and production_branch fields for config-driven release repos.
8
+
9
+ ## 0.42.1
10
+
11
+ ### Patch Changes
12
+
13
+ - [#254](https://github.com/Orderful/droid/pull/254) [`9b1bb79`](https://github.com/Orderful/droid/commit/9b1bb797b257660c8f36df41260a3c7684ac5c72) Thanks [@frytyler](https://github.com/frytyler)! - Meeting search defaults to latest matching meeting instead of all matches. Use `--all` flag to search across all recurring meetings.
14
+
3
15
  ## 0.42.0
4
16
 
5
17
  ### Minor Changes
package/dist/bin/droid.js CHANGED
@@ -3999,7 +3999,10 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
3999
3999
  const [newRepoName, setNewRepoName] = useState7("");
4000
4000
  const [newRepoPath, setNewRepoPath] = useState7("");
4001
4001
  const [newRepoDesc, setNewRepoDesc] = useState7("");
4002
- const [repoToDelete, setRepoToDelete] = useState7(null);
4002
+ const [activeRepo, setActiveRepo] = useState7(null);
4003
+ const [actionIndex, setActionIndex] = useState7(0);
4004
+ const [editReleaseBranch, setEditReleaseBranch] = useState7("");
4005
+ const [editProductionBranch, setEditProductionBranch] = useState7("");
4003
4006
  const handleAddRepo = () => {
4004
4007
  if (!newRepoName || !newRepoPath) {
4005
4008
  setMessage({ text: "Name and path are required", type: "error" });
@@ -4022,12 +4025,26 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4022
4025
  removeRepo(repoName);
4023
4026
  setRepos(getRepos());
4024
4027
  setMessage({ text: `Removed ${repoName}`, type: "success" });
4025
- setRepoToDelete(null);
4028
+ setActiveRepo(null);
4026
4029
  setScreen("list");
4027
4030
  if (selectedIndex >= repos2.length - 1) {
4028
4031
  setSelectedIndex(Math.max(0, repos2.length - 2));
4029
4032
  }
4030
4033
  };
4034
+ const handleSaveReleaseBranches = () => {
4035
+ if (!activeRepo) return;
4036
+ const updated = {
4037
+ ...activeRepo,
4038
+ release_branch: editReleaseBranch || void 0,
4039
+ production_branch: editReleaseBranch ? editProductionBranch || "master" : void 0
4040
+ };
4041
+ addRepo(updated);
4042
+ setRepos(getRepos());
4043
+ const label = editReleaseBranch ? `Set release: ${editReleaseBranch} \u2192 ${editProductionBranch || "master"}` : "Cleared release branches";
4044
+ setMessage({ text: `${activeRepo.name}: ${label}`, type: "success" });
4045
+ setActiveRepo(null);
4046
+ setScreen("list");
4047
+ };
4031
4048
  useInput7((input, key) => {
4032
4049
  if (message) setMessage(null);
4033
4050
  if (key.escape) {
@@ -4045,11 +4062,34 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4045
4062
  if (selectedIndex === repos2.length) {
4046
4063
  setScreen("add-name");
4047
4064
  } else if (selectedIndex < repos2.length) {
4048
- setRepoToDelete(repos2[selectedIndex].name);
4049
- setScreen("confirm-delete");
4065
+ setActiveRepo(repos2[selectedIndex]);
4066
+ setActionIndex(0);
4067
+ setScreen("repo-actions");
4050
4068
  }
4051
4069
  }
4052
4070
  }, { isActive: screen === "list" });
4071
+ useInput7((input, key) => {
4072
+ if (key.escape) {
4073
+ setActiveRepo(null);
4074
+ setScreen("list");
4075
+ return;
4076
+ }
4077
+ if (key.upArrow) {
4078
+ setActionIndex((prev) => Math.max(0, prev - 1));
4079
+ }
4080
+ if (key.downArrow) {
4081
+ setActionIndex((prev) => Math.min(1, prev + 1));
4082
+ }
4083
+ if (key.return && activeRepo) {
4084
+ if (actionIndex === 0) {
4085
+ setEditReleaseBranch(activeRepo.release_branch || "");
4086
+ setEditProductionBranch(activeRepo.production_branch || "");
4087
+ setScreen("edit-release-branch");
4088
+ } else {
4089
+ setScreen("confirm-delete");
4090
+ }
4091
+ }
4092
+ }, { isActive: screen === "repo-actions" });
4053
4093
  useInput7((input, key) => {
4054
4094
  if (key.escape) {
4055
4095
  setNewRepoName("");
@@ -4068,13 +4108,22 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4068
4108
  setScreen("add-path");
4069
4109
  }
4070
4110
  }, { isActive: screen === "add-desc" });
4111
+ useInput7((input, key) => {
4112
+ if (key.escape) {
4113
+ setScreen("repo-actions");
4114
+ }
4115
+ }, { isActive: screen === "edit-release-branch" });
4116
+ useInput7((input, key) => {
4117
+ if (key.escape) {
4118
+ setScreen("edit-release-branch");
4119
+ }
4120
+ }, { isActive: screen === "edit-production-branch" });
4071
4121
  useInput7((input, key) => {
4072
4122
  if (key.escape || input === "n") {
4073
- setRepoToDelete(null);
4074
- setScreen("list");
4123
+ setScreen("repo-actions");
4075
4124
  }
4076
- if (input === "y" && repoToDelete) {
4077
- handleDeleteRepo(repoToDelete);
4125
+ if (input === "y" && activeRepo) {
4126
+ handleDeleteRepo(activeRepo.name);
4078
4127
  }
4079
4128
  }, { isActive: screen === "confirm-delete" });
4080
4129
  if (screen === "add-name") {
@@ -4153,13 +4202,93 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4153
4202
  /* @__PURE__ */ jsx15(Box14, { marginTop: 1, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "enter save \xB7 esc back" }) })
4154
4203
  ] });
4155
4204
  }
4156
- if (screen === "confirm-delete" && repoToDelete) {
4157
- const repo = repos2.find((r) => r.name === repoToDelete);
4205
+ if (screen === "repo-actions" && activeRepo) {
4206
+ const actions = ["Edit release branches", "Remove repository"];
4207
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", padding: 2, children: [
4208
+ /* @__PURE__ */ jsx15(Text15, { color: colors.text, bold: true, children: activeRepo.name }),
4209
+ /* @__PURE__ */ jsx15(Box14, { marginTop: 0, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: activeRepo.path }) }),
4210
+ activeRepo.release_branch && /* @__PURE__ */ jsx15(Box14, { marginTop: 0, children: /* @__PURE__ */ jsxs14(Text15, { color: colors.textDim, children: [
4211
+ "Release: ",
4212
+ activeRepo.release_branch,
4213
+ " \u2192 ",
4214
+ activeRepo.production_branch || "master"
4215
+ ] }) }),
4216
+ /* @__PURE__ */ jsx15(Box14, { flexDirection: "column", marginTop: 1, children: actions.map((action, index) => /* @__PURE__ */ jsx15(Box14, { children: /* @__PURE__ */ jsxs14(
4217
+ Text15,
4218
+ {
4219
+ color: actionIndex === index ? colors.primary : index === 1 ? colors.error : colors.text,
4220
+ bold: actionIndex === index,
4221
+ children: [
4222
+ actionIndex === index ? "> " : " ",
4223
+ action
4224
+ ]
4225
+ }
4226
+ ) }, action)) }),
4227
+ /* @__PURE__ */ jsx15(Box14, { marginTop: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "\u2191\u2193 navigate \xB7 enter select \xB7 esc back" }) })
4228
+ ] });
4229
+ }
4230
+ if (screen === "edit-release-branch" && activeRepo) {
4231
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", padding: 2, children: [
4232
+ /* @__PURE__ */ jsxs14(Text15, { color: colors.text, bold: true, children: [
4233
+ "Edit Release Branches \u2014 ",
4234
+ activeRepo.name
4235
+ ] }),
4236
+ /* @__PURE__ */ jsxs14(Box14, { marginTop: 1, children: [
4237
+ /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: 'Release branch (e.g. "dev", blank to clear): ' }),
4238
+ /* @__PURE__ */ jsx15(
4239
+ TextInput3,
4240
+ {
4241
+ value: editReleaseBranch,
4242
+ onChange: setEditReleaseBranch,
4243
+ onSubmit: () => {
4244
+ if (editReleaseBranch) {
4245
+ setScreen("edit-production-branch");
4246
+ } else {
4247
+ handleSaveReleaseBranches();
4248
+ }
4249
+ },
4250
+ placeholder: activeRepo.release_branch || "dev"
4251
+ }
4252
+ )
4253
+ ] }),
4254
+ /* @__PURE__ */ jsx15(Box14, { marginTop: 1, children: /* @__PURE__ */ jsxs14(Text15, { color: colors.textDim, children: [
4255
+ "enter ",
4256
+ editReleaseBranch ? "next" : "clear & save",
4257
+ " \xB7 esc back"
4258
+ ] }) })
4259
+ ] });
4260
+ }
4261
+ if (screen === "edit-production-branch" && activeRepo) {
4262
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", padding: 2, children: [
4263
+ /* @__PURE__ */ jsxs14(Text15, { color: colors.text, bold: true, children: [
4264
+ "Edit Release Branches \u2014 ",
4265
+ activeRepo.name
4266
+ ] }),
4267
+ /* @__PURE__ */ jsxs14(Box14, { marginTop: 1, children: [
4268
+ /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "Release branch: " }),
4269
+ /* @__PURE__ */ jsx15(Text15, { color: colors.text, children: editReleaseBranch })
4270
+ ] }),
4271
+ /* @__PURE__ */ jsxs14(Box14, { marginTop: 1, children: [
4272
+ /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "Production branch: " }),
4273
+ /* @__PURE__ */ jsx15(
4274
+ TextInput3,
4275
+ {
4276
+ value: editProductionBranch,
4277
+ onChange: setEditProductionBranch,
4278
+ onSubmit: handleSaveReleaseBranches,
4279
+ placeholder: "master"
4280
+ }
4281
+ )
4282
+ ] }),
4283
+ /* @__PURE__ */ jsx15(Box14, { marginTop: 1, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "enter save \xB7 esc back" }) })
4284
+ ] });
4285
+ }
4286
+ if (screen === "confirm-delete" && activeRepo) {
4158
4287
  return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", padding: 2, children: [
4159
4288
  /* @__PURE__ */ jsx15(Text15, { color: colors.text, bold: true, children: "Remove Repository" }),
4160
4289
  /* @__PURE__ */ jsxs14(Box14, { marginTop: 1, flexDirection: "column", children: [
4161
- /* @__PURE__ */ jsx15(Text15, { color: colors.text, children: repo?.name }),
4162
- /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repo?.path })
4290
+ /* @__PURE__ */ jsx15(Text15, { color: colors.text, children: activeRepo.name }),
4291
+ /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: activeRepo.path })
4163
4292
  ] }),
4164
4293
  /* @__PURE__ */ jsx15(Box14, { marginTop: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.error, children: "Remove this repository from the registry?" }) }),
4165
4294
  /* @__PURE__ */ jsx15(Box14, { marginTop: 1, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: "y yes \xB7 n no" }) })
@@ -4182,7 +4311,13 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4182
4311
  }
4183
4312
  ) }),
4184
4313
  /* @__PURE__ */ jsx15(Box14, { paddingLeft: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repo.path }) }),
4185
- repo.description && /* @__PURE__ */ jsx15(Box14, { paddingLeft: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repo.description }) })
4314
+ repo.description && /* @__PURE__ */ jsx15(Box14, { paddingLeft: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repo.description }) }),
4315
+ repo.release_branch && /* @__PURE__ */ jsx15(Box14, { paddingLeft: 2, children: /* @__PURE__ */ jsxs14(Text15, { color: colors.textDim, children: [
4316
+ "Release: ",
4317
+ repo.release_branch,
4318
+ " \u2192 ",
4319
+ repo.production_branch || "master"
4320
+ ] }) })
4186
4321
  ] }, repo.name)),
4187
4322
  /* @__PURE__ */ jsx15(Box14, { marginTop: repos2.length > 0 ? 2 : 0, children: /* @__PURE__ */ jsxs14(
4188
4323
  Text15,
@@ -4196,7 +4331,7 @@ function ReposManagementScreen({ onComplete: _onComplete, onCancel }) {
4196
4331
  }
4197
4332
  ) })
4198
4333
  ] }),
4199
- /* @__PURE__ */ jsx15(Box14, { marginTop: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repos2.length > 0 && selectedIndex < repos2.length ? "enter remove \xB7 esc back" : "\u2191\u2193 navigate \xB7 enter select \xB7 esc back" }) })
4334
+ /* @__PURE__ */ jsx15(Box14, { marginTop: 2, children: /* @__PURE__ */ jsx15(Text15, { color: colors.textDim, children: repos2.length > 0 && selectedIndex < repos2.length ? "enter edit \xB7 esc back" : "\u2191\u2193 navigate \xB7 enter select \xB7 esc back" }) })
4200
4335
  ] });
4201
4336
  }
4202
4337
 
@@ -4218,7 +4353,13 @@ function ReposViewerScreen({ onClose }) {
4218
4353
  "Path: ",
4219
4354
  repo.path
4220
4355
  ] }) }),
4221
- repo.description && /* @__PURE__ */ jsx16(Box15, { marginTop: 0, children: /* @__PURE__ */ jsx16(Text16, { color: colors.textDim, children: repo.description }) })
4356
+ repo.description && /* @__PURE__ */ jsx16(Box15, { marginTop: 0, children: /* @__PURE__ */ jsx16(Text16, { color: colors.textDim, children: repo.description }) }),
4357
+ repo.release_branch && /* @__PURE__ */ jsx16(Box15, { marginTop: 0, children: /* @__PURE__ */ jsxs15(Text16, { color: colors.textDim, children: [
4358
+ "Release: ",
4359
+ repo.release_branch,
4360
+ " \u2192 ",
4361
+ repo.production_branch || "master"
4362
+ ] }) })
4222
4363
  ] }, repo.name)) }),
4223
4364
  /* @__PURE__ */ jsx16(Box15, { marginTop: 2, children: /* @__PURE__ */ jsx16(Text16, { color: colors.textDim, children: "esc back" }) })
4224
4365
  ] });
@@ -5010,6 +5151,10 @@ async function reposListCommand(options) {
5010
5151
  if (repo.description) {
5011
5152
  console.log(chalk10.gray(` ${repo.description}`));
5012
5153
  }
5154
+ if (repo.release_branch) {
5155
+ const prod = repo.production_branch || "master";
5156
+ console.log(chalk10.gray(` Release: ${repo.release_branch} \u2192 ${prod}`));
5157
+ }
5013
5158
  console.log();
5014
5159
  }
5015
5160
  }
@@ -5050,6 +5195,26 @@ async function reposAddCommand(name, path, description) {
5050
5195
  ]);
5051
5196
  repoDescription = answers.description || void 0;
5052
5197
  }
5198
+ const releaseAnswers = await inquirer4.prompt([
5199
+ {
5200
+ type: "input",
5201
+ name: "release_branch",
5202
+ message: 'Release branch (optional, e.g. "dev"):'
5203
+ }
5204
+ ]);
5205
+ const releaseBranch = releaseAnswers.release_branch || void 0;
5206
+ let productionBranch;
5207
+ if (releaseBranch) {
5208
+ const prodAnswers = await inquirer4.prompt([
5209
+ {
5210
+ type: "input",
5211
+ name: "production_branch",
5212
+ message: "Production branch:",
5213
+ default: "master"
5214
+ }
5215
+ ]);
5216
+ productionBranch = prodAnswers.production_branch || "master";
5217
+ }
5053
5218
  if (!repoName || !repoPath) {
5054
5219
  console.error(chalk10.red("Name and path are required"));
5055
5220
  return;
@@ -5057,7 +5222,9 @@ async function reposAddCommand(name, path, description) {
5057
5222
  const repo = {
5058
5223
  name: repoName,
5059
5224
  path: repoPath,
5060
- description: repoDescription
5225
+ description: repoDescription,
5226
+ ...releaseBranch && { release_branch: releaseBranch },
5227
+ ...productionBranch && { production_branch: productionBranch }
5061
5228
  };
5062
5229
  addRepo(repo);
5063
5230
  const expandedPath = getRepoPath(repoName);
@@ -1 +1 @@
1
- {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"AAWA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDrE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE"}
1
+ {"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"AAWA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAuFf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDrE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReposManagementScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposManagementScreen.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CAoRtG"}
1
+ {"version":3,"file":"ReposManagementScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposManagementScreen.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAYD,wBAAgB,qBAAqB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CA6atG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReposViewerScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposViewerScreen.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAwCpE"}
1
+ {"version":3,"file":"ReposViewerScreen.d.ts","sourceRoot":"","sources":["../../../../src/commands/tui/views/ReposViewerScreen.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CA6CpE"}
@@ -38,6 +38,8 @@ export interface RepoConfig {
38
38
  name: string;
39
39
  path: string;
40
40
  description?: string;
41
+ release_branch?: string;
42
+ production_branch?: string;
41
43
  }
42
44
  export type ToolConfig = Record<string, unknown>;
43
45
  export interface IntegrationSlackConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,WAAW,iBAAiB;CAC7B;AAID,QAAA,MAAM,WAAW,iBAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,CAAC;AACjC,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;AAE9B;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAGD,oBAAY,aAAa;IACvB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAGD,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,yBAAyB,CAAC,EAAE,OAAO,CAAC;QAEpC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;KACtE,CAAC;CACH;AAGD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,GAClB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAEhC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAG1B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC9C"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-meeting",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Work with meeting notes, summaries, and transcripts. List recent meetings, search content, generate context-aware summaries, export to codex. Backed by Granola MCP.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: meeting
2
2
  description: "Work with meeting notes, summaries, and transcripts. List recent meetings, search content, generate context-aware summaries, export to codex. Backed by Granola MCP."
3
- version: 0.1.0
3
+ version: 0.1.1
4
4
  status: beta
5
5
 
6
6
  includes:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: meeting
3
3
  description: "Work with meeting notes, summaries, and transcripts. Use when user asks about meetings, wants to review notes, search decisions, or export to codex. User prompts like 'what did we discuss today', 'summarise the tech design review', 'export my meeting with Thea to codex'."
4
- argument-hint: "[search {query} | summary {title} | summarize {title} | export {title} | decisions | last week]"
4
+ argument-hint: "[search {query} [--all] | summary {title} | summarize {title} | export {title} | decisions | last week]"
5
5
  allowed-tools: [Read, Write, Edit, Glob, Grep, Bash(droid:*)]
6
6
  ---
7
7
 
@@ -41,7 +41,7 @@ If connected, proceed.
41
41
  |---------|--------|
42
42
  | `/meeting` | List recent meetings (this week) |
43
43
  | `/meeting last week` | List meetings from last week |
44
- | `/meeting search {query}` | Natural language search across all meetings |
44
+ | `/meeting search {query}` | Search meetings (latest match by default; use `--all` for all matches) |
45
45
  | `/meeting summary {title}` | Quick summary from Granola (fast, no context cost) |
46
46
  | `/meeting summarize {title}` | Context-aware summary using transcript + loaded project/codex context |
47
47
  | `/meeting export {title}` | Export meeting to codex |
@@ -61,12 +61,20 @@ Natural language is the primary interface. Users should not need these commands.
61
61
  2. Call with `time_range`: `"this_week"` (default) or `"last_week"`
62
62
  3. Present results as a table: title, date, participants
63
63
 
64
- ### Search (`/meeting search {query}`)
64
+ ### Search (`/meeting search {query}` / `/meeting search {query} --all`)
65
65
 
66
- 1. Use `ToolSearch` to load `mcp__granola__query_granola_meetings`
67
- 2. Call with user's query
68
- 3. Preserve citation links in the response
69
- 4. Present the response to the user
66
+ **Default behaviour: latest match.** Recurring meetings (dailies, weeklies) return multiple hits. Searching all of them is rarely what the user wants — they usually mean the most recent one.
67
+
68
+ 1. Use `ToolSearch` to load `mcp__granola__list_meetings` and `mcp__granola__query_granola_meetings`
69
+ 2. Call `list_meetings` with `time_range: "this_week"` (or `"last_week"` / `"last_30_days"` if no matches)
70
+ 3. Fuzzy-match the query against meeting titles in the list
71
+ 4. **If multiple meetings match the query title:**
72
+ - **Without `--all`:** Scope the Granola query to only the **most recent** matching meeting ID (pass `document_ids`). Mention: "Showing results from {date}'s {title}. Use `--all` to search across all {N} matches."
73
+ - **With `--all`:** Query across all matching meeting IDs (pass all IDs in `document_ids`). Mention: "Searching across {N} {title} meetings."
74
+ 5. **If only one meeting matches:** Query that single meeting (pass `document_ids`)
75
+ 6. **If no title matches but query looks like a topic:** Fall back to a broad Granola query without `document_ids` (original behaviour)
76
+ 7. Preserve citation links in the response
77
+ 8. Present the response to the user
70
78
 
71
79
  ### Quick summary (`/meeting summary {title}`)
72
80
 
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "droid-release",
3
+ "version": "0.1.0",
4
+ "description": "Release ceremony automation — create release PRs, check status, notify Slack.",
5
+ "author": {
6
+ "name": "Orderful",
7
+ "url": "https://github.com/orderful"
8
+ },
9
+ "repository": "https://github.com/orderful/droid",
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "droid",
13
+ "ai",
14
+ "release"
15
+ ],
16
+ "skills": [
17
+ "./skills/release/SKILL.md"
18
+ ],
19
+ "commands": [
20
+ "./commands/release.md"
21
+ ]
22
+ }
@@ -0,0 +1,21 @@
1
+ name: release
2
+ description: "Release ceremony automation — create release PRs, check status, notify Slack."
3
+ version: 0.1.0
4
+ status: alpha
5
+
6
+ includes:
7
+ skills:
8
+ - name: release
9
+ required: true
10
+ commands:
11
+ - name: release
12
+ is_alias: false
13
+ agents: []
14
+
15
+ dependencies: []
16
+
17
+ config_schema:
18
+ slack_channel:
19
+ type: string
20
+ description: "Slack channel for release notifications"
21
+ default: "#release-management"
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: release
3
+ description: "Release ceremony automation"
4
+ argument-hint: "[start [repo] | status | complete [repo]]"
5
+ ---
6
+
7
+ # /release
8
+
9
+ **User invoked:** `/release $ARGUMENTS`
10
+
11
+ **Your task:** Invoke the **release skill** with these arguments.
12
+
13
+ ## Examples
14
+
15
+ - `/release start` → Create release PR for current repo
16
+ - `/release start orderful-workspace` → Create release PR for a specific repo
17
+ - `/release status` → Check CI state across release repos
18
+ - `/release complete` → Post "release complete" to Slack
19
+
20
+ ## Quick Reference
21
+
22
+ ```
23
+ /release start [repo] # Create release PR + notify Slack
24
+ /release status # CI state across repos
25
+ /release complete [repo] # Notify Slack, close out release
26
+ ```
27
+
28
+ See the **release skill** for complete documentation.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: release
3
+ description: "Release ceremony automation for dev-to-master releases. Use when starting a release, checking release status, or completing a release. User prompts like 'start a release', 'release status', 'release complete'."
4
+ argument-hint: "[start [repo] | status | complete [repo]]"
5
+ allowed-tools: [Read, Write, Glob, Grep, Bash, Edit]
6
+ ---
7
+
8
+ # Release Skill
9
+
10
+ Automate dev → master release ceremonies: create release PRs, notify Slack, and track status.
11
+
12
+ ## When to Use
13
+
14
+ - User wants to start a release (create PR from dev → master)
15
+ - User asks about release status (open PRs, CI checks)
16
+ - User says "release complete" or wants to close out a release
17
+ - Natural language like "start a release", "what's the release status?"
18
+
19
+ ## When NOT to Use
20
+
21
+ - Deploying to environments (this is about merging dev → master, not deployment)
22
+ - Feature branch management (this is for release branches only)
23
+ - Hotfixes or cherry-picks (manual process)
24
+
25
+ ## Prerequisites
26
+
27
+ 1. **`gh` CLI** — authenticated with access to target repos
28
+ 2. **Slack integration** — `droid integrations slack post` configured (optional, falls back to terminal)
29
+
30
+ ## Configuration
31
+
32
+ Read config at the start of every command:
33
+
34
+ ```bash
35
+ droid config --get tools.release
36
+ droid config --get repos
37
+ ```
38
+
39
+ - **Repos:** Filter `repos` array for entries with `release_branch` set — these are release repos
40
+ - **Slack channel:** From `tools.release.slack_channel` (default: `#release-management`)
41
+ - **Repo detection:** Match cwd against repo paths, or ask user if ambiguous
42
+
43
+ If no repos have `release_branch` set, tell user:
44
+ > "No release repos configured. Run `droid repos add` and set a release branch to get started."
45
+
46
+ ## Commands
47
+
48
+ | Command | Action |
49
+ |---------|--------|
50
+ | `/release start [repo]` | Create release PR + notify Slack |
51
+ | `/release status` | Check open release PRs + CI state |
52
+ | `/release complete [repo]` | Post completion to Slack |
53
+
54
+ See `references/workflows.md` for detailed step-by-step procedures and exact `gh` commands.
55
+
56
+ See `references/templates.md` for Slack message and PR body templates.
57
+
58
+ ## Repo Detection
59
+
60
+ 1. Get cwd and match against configured repo paths
61
+ 2. If match found and repo has `release_branch`, use it
62
+ 3. If no match or multiple release repos, ask user to pick
63
+ 4. Use `release_branch` as source and `production_branch` (default: `master`) as target
64
+
65
+ ## Error Handling
66
+
67
+ | Error | Action |
68
+ |-------|--------|
69
+ | No release repos configured | Suggest `droid repos add` with release branch |
70
+ | `gh` CLI not authenticated | Suggest `gh auth login` |
71
+ | Slack not configured | Print message to terminal, suggest `droid integrations setup slack` |
72
+ | Release PR already exists | Show existing PR, ask if user wants to proceed |
73
+ | CI checks failing | Show status, do not auto-merge |