crewly 1.20.328 → 1.20.329

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 (27) hide show
  1. package/config/skills/agent/core/publish-app/SKILL.md +9 -0
  2. package/dist/backend/backend/src/constants.d.ts +2 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +2 -0
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/services/decisions/recurring-change-handoff.d.ts +10 -0
  7. package/dist/backend/backend/src/services/decisions/recurring-change-handoff.d.ts.map +1 -1
  8. package/dist/backend/backend/src/services/decisions/recurring-change-handoff.js +17 -2
  9. package/dist/backend/backend/src/services/decisions/recurring-change-handoff.js.map +1 -1
  10. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +11 -0
  11. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +41 -3
  13. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  14. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts +14 -1
  15. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js +26 -2
  17. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js.map +1 -1
  18. package/dist/backend/build-info.json +2 -2
  19. package/dist/cli/backend/src/constants.d.ts +2 -0
  20. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  21. package/dist/cli/backend/src/constants.js +2 -0
  22. package/dist/cli/backend/src/constants.js.map +1 -1
  23. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts +14 -1
  24. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -1
  25. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js +26 -2
  26. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js.map +1 -1
  27. package/package.json +1 -1
@@ -7,7 +7,10 @@
7
7
  * nothing inside it can be re-included. When (and only when) git reports the
8
8
  * tickets folder as ignored, this appends a small block to the project's
9
9
  * `.gitignore` that re-includes `.crewly/`, re-ignores everything in it, then
10
- * re-includes `tickets/`. Existing lines are never touched.
10
+ * re-includes `tickets/`. Existing lines are never touched, and any existing
11
+ * `!.crewly/...` negations (e.g. `!.crewly/wiki/`) are re-emitted after the
12
+ * block's `.crewly/*` so the block cannot re-ignore what the project already
13
+ * tracks.
11
14
  *
12
15
  * @module services/project-tickets/ticket-tracking
13
16
  */
@@ -26,6 +29,16 @@ export type TicketTrackingOutcome =
26
29
  | 'still-ignored';
27
30
  /** Git runner (injectable for tests). */
28
31
  export type GitRunner = (cwd: string, args: string[]) => Promise<GitResult>;
32
+ /**
33
+ * Build the block to append: the header, `!.crewly/` and `.crewly/*`, then the
34
+ * project's existing `.crewly` negations, then the tickets re-includes. The
35
+ * block's own `.crewly/*` comes after the project's rules, so without the
36
+ * re-emitted negations it would hide everything they had re-included.
37
+ *
38
+ * @param current - Current `.gitignore` text
39
+ * @returns Block lines, in order
40
+ */
41
+ export declare function buildTicketsBlock(current: string): string[];
29
42
  /**
30
43
  * Make sure git tracks the project's tickets folder, appending the
31
44
  * re-include block to `<project>/.gitignore` when it is ignored.
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-tracking.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGrE,qDAAqD;AACrD,MAAM,MAAM,qBAAqB;AAC/B,4CAA4C;AAC1C,YAAY;AACd,2EAA2E;GACzE,iBAAiB;AACnB,kCAAkC;GAChC,SAAS;AACX,yDAAyD;GACvD,WAAW;AACb,2EAA2E;GACzE,eAAe,CAAC;AAEpB,yCAAyC;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAoB5E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyBvH"}
1
+ {"version":3,"file":"ticket-tracking.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGrE,qDAAqD;AACrD,MAAM,MAAM,qBAAqB;AAC/B,4CAA4C;AAC1C,YAAY;AACd,2EAA2E;GACzE,iBAAiB;AACnB,kCAAkC;GAChC,SAAS;AACX,yDAAyD;GACvD,WAAW;AACb,2EAA2E;GACzE,eAAe,CAAC;AAEpB,yCAAyC;AACzC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAoB5E;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAU3D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,SAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyBvH"}
@@ -7,7 +7,10 @@
7
7
  * nothing inside it can be re-included. When (and only when) git reports the
8
8
  * tickets folder as ignored, this appends a small block to the project's
9
9
  * `.gitignore` that re-includes `.crewly/`, re-ignores everything in it, then
10
- * re-includes `tickets/`. Existing lines are never touched.
10
+ * re-includes `tickets/`. Existing lines are never touched, and any existing
11
+ * `!.crewly/...` negations (e.g. `!.crewly/wiki/`) are re-emitted after the
12
+ * block's `.crewly/*` so the block cannot re-ignore what the project already
13
+ * tracks.
11
14
  *
12
15
  * @module services/project-tickets/ticket-tracking
13
16
  */
@@ -34,6 +37,27 @@ async function isTicketsFolderIgnored(projectPath, git) {
34
37
  return false;
35
38
  return null;
36
39
  }
40
+ /**
41
+ * Build the block to append: the header, `!.crewly/` and `.crewly/*`, then the
42
+ * project's existing `.crewly` negations, then the tickets re-includes. The
43
+ * block's own `.crewly/*` comes after the project's rules, so without the
44
+ * re-emitted negations it would hide everything they had re-included.
45
+ *
46
+ * @param current - Current `.gitignore` text
47
+ * @returns Block lines, in order
48
+ */
49
+ export function buildTicketsBlock(current) {
50
+ const block = PROJECT_TICKET_CONSTANTS.GITIGNORE_BLOCK;
51
+ const own = new Set(block);
52
+ const kept = [];
53
+ for (const raw of current.split(/\r?\n/)) {
54
+ const line = raw.trim();
55
+ if (!/^!\/?\.crewly\//.test(line) || own.has(line) || kept.includes(line))
56
+ continue;
57
+ kept.push(line);
58
+ }
59
+ return [...block.slice(0, 3), ...kept, ...block.slice(3)];
60
+ }
37
61
  /**
38
62
  * Make sure git tracks the project's tickets folder, appending the
39
63
  * re-include block to `<project>/.gitignore` when it is ignored.
@@ -76,7 +100,7 @@ export async function ensureTicketsTracked(projectPath, git = runGit) {
76
100
  const alreadyThere = current.split(/\r?\n/).some((l) => l.trim() === marker);
77
101
  if (!alreadyThere) {
78
102
  const lead = current.length === 0 ? '' : current.endsWith('\n') ? '\n' : '\n\n';
79
- await fs.appendFile(gitignorePath, `${lead}${block.join('\n')}\n`, 'utf8');
103
+ await fs.appendFile(gitignorePath, `${lead}${buildTicketsBlock(current).join('\n')}\n`, 'utf8');
80
104
  }
81
105
  return (await isTicketsFolderIgnored(root, git)) === false ? 'unignored' : 'still-ignored';
82
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-tracking.js","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAkB,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAkBrE,iEAAiE;AACjE,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;;;;GAMG;AACH,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,GAAc;IACvE,MAAM,KAAK,GAAG,GAAG,wBAAwB,CAAC,iBAAiB,IAAI,UAAU,EAAE,CAAC;IAC5E,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,MAAiB,MAAM;IACrF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAEvE,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC;IAE7C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,eAAe,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;IAC7E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAChF,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,CAAC,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"ticket-tracking.js","sourceRoot":"","sources":["../../../../../../backend/src/services/project-tickets/ticket-tracking.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewly",
3
- "version": "1.20.328",
3
+ "version": "1.20.329",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
6
6
  "workspaces": [