@cat-factory/integrations 0.12.4 → 0.14.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.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/environments/EnvironmentConnectionService.d.ts +30 -1
- package/dist/modules/environments/EnvironmentConnectionService.d.ts.map +1 -1
- package/dist/modules/environments/EnvironmentConnectionService.js +39 -0
- package/dist/modules/environments/EnvironmentConnectionService.js.map +1 -1
- package/dist/modules/environments/HttpEnvironmentProvider.d.ts +5 -1
- package/dist/modules/environments/HttpEnvironmentProvider.d.ts.map +1 -1
- package/dist/modules/environments/HttpEnvironmentProvider.js +20 -0
- package/dist/modules/environments/HttpEnvironmentProvider.js.map +1 -1
- package/dist/modules/environments/environments.logic.d.ts +14 -1
- package/dist/modules/environments/environments.logic.d.ts.map +1 -1
- package/dist/modules/environments/environments.logic.js +37 -1
- package/dist/modules/environments/environments.logic.js.map +1 -1
- package/dist/modules/providers/UserSecretService.d.ts +33 -0
- package/dist/modules/providers/UserSecretService.d.ts.map +1 -0
- package/dist/modules/providers/UserSecretService.js +93 -0
- package/dist/modules/providers/UserSecretService.js.map +1 -0
- package/dist/modules/providers/userSecretKinds.d.ts +21 -0
- package/dist/modules/providers/userSecretKinds.d.ts.map +1 -0
- package/dist/modules/providers/userSecretKinds.js +55 -0
- package/dist/modules/providers/userSecretKinds.js.map +1 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.d.ts +5 -1
- package/dist/modules/runners/HttpRunnerPoolProvider.d.ts.map +1 -1
- package/dist/modules/runners/HttpRunnerPoolProvider.js +19 -0
- package/dist/modules/runners/HttpRunnerPoolProvider.js.map +1 -1
- package/dist/modules/runners/RunnerPoolConnectionService.d.ts +11 -1
- package/dist/modules/runners/RunnerPoolConnectionService.d.ts.map +1 -1
- package/dist/modules/runners/RunnerPoolConnectionService.js +30 -0
- package/dist/modules/runners/RunnerPoolConnectionService.js.map +1 -1
- package/dist/modules/tasks/GitHubIssuesProvider.d.ts.map +1 -1
- package/dist/modules/tasks/GitHubIssuesProvider.js +18 -1
- package/dist/modules/tasks/GitHubIssuesProvider.js.map +1 -1
- package/dist/modules/tasks/JiraProvider.d.ts +7 -0
- package/dist/modules/tasks/JiraProvider.d.ts.map +1 -1
- package/dist/modules/tasks/JiraProvider.js +55 -1
- package/dist/modules/tasks/JiraProvider.js.map +1 -1
- package/dist/modules/tasks/TaskImportService.d.ts +11 -1
- package/dist/modules/tasks/TaskImportService.d.ts.map +1 -1
- package/dist/modules/tasks/TaskImportService.js +10 -1
- package/dist/modules/tasks/TaskImportService.js.map +1 -1
- package/dist/modules/tasks/TaskLinkService.d.ts +20 -1
- package/dist/modules/tasks/TaskLinkService.d.ts.map +1 -1
- package/dist/modules/tasks/TaskLinkService.js +0 -0
- package/dist/modules/tasks/TaskLinkService.js.map +1 -1
- package/dist/modules/tasks/github-issues.logic.d.ts +12 -1
- package/dist/modules/tasks/github-issues.logic.d.ts.map +1 -1
- package/dist/modules/tasks/github-issues.logic.js +69 -0
- package/dist/modules/tasks/github-issues.logic.js.map +1 -1
- package/dist/modules/tasks/jira.logic.d.ts +32 -1
- package/dist/modules/tasks/jira.logic.d.ts.map +1 -1
- package/dist/modules/tasks/jira.logic.js +64 -0
- package/dist/modules/tasks/jira.logic.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import type { Block, SourceTask, TaskSourceKind } from '@cat-factory/kernel';
|
|
1
|
+
import type { Block, Position, SourceTask, TaskSourceKind } from '@cat-factory/kernel';
|
|
2
2
|
import type { BlockRepository } from '@cat-factory/kernel';
|
|
3
3
|
import type { BoardWritePort } from '@cat-factory/kernel';
|
|
4
4
|
import type { TaskRepository } from '@cat-factory/kernel';
|
|
5
|
+
import type { TaskImportService } from './TaskImportService.js';
|
|
5
6
|
export interface TaskLinkServiceDependencies {
|
|
6
7
|
boardService: BoardWritePort;
|
|
7
8
|
blockRepository: BlockRepository;
|
|
8
9
|
taskRepository: TaskRepository;
|
|
10
|
+
/** Imports the epic + child issues (the epic-spawn path needs the detailed content). */
|
|
11
|
+
importService: TaskImportService;
|
|
9
12
|
}
|
|
10
13
|
/** A board task created from an imported issue, plus the now-linked issue. */
|
|
11
14
|
export interface TaskFromIssue {
|
|
12
15
|
block: Block;
|
|
13
16
|
task: SourceTask;
|
|
14
17
|
}
|
|
18
|
+
/** The result of spawning an epic: the epic node + the child task blocks created. */
|
|
19
|
+
export interface SpawnedEpic {
|
|
20
|
+
epic: Block;
|
|
21
|
+
tasks: Block[];
|
|
22
|
+
}
|
|
15
23
|
export declare class TaskLinkService {
|
|
16
24
|
private readonly deps;
|
|
17
25
|
constructor(deps: TaskLinkServiceDependencies);
|
|
@@ -26,5 +34,16 @@ export declare class TaskLinkService {
|
|
|
26
34
|
* `createdBy` (the signed-in user) flows onto the new task for notification routing.
|
|
27
35
|
*/
|
|
28
36
|
createTaskFromIssue(workspaceId: string, containerId: string, source: TaskSourceKind, externalId: string, createdBy?: string | null): Promise<TaskFromIssue>;
|
|
37
|
+
/**
|
|
38
|
+
* Spawn an epic and its children onto the board. Imports the epic issue, creates an
|
|
39
|
+
* `epic`-level grouping node from it, then imports + materialises each child issue as a
|
|
40
|
+
* board task inside `containerId` (each joined to the epic via `epicId`). Finally it
|
|
41
|
+
* seeds `dependsOn` edges from the issues' normalized links ("blocked by" / "depends on"
|
|
42
|
+
* / "blocks"), resolving link endpoints against the just-created blocks. Edges to issues
|
|
43
|
+
* outside the imported set are skipped, and the board's cycle guard protects against bad
|
|
44
|
+
* data (a rejected edge is ignored, never fatal). The board (`epicId` + `dependsOn`) is
|
|
45
|
+
* the source of truth after the spawn; the issue projections back agent context.
|
|
46
|
+
*/
|
|
47
|
+
spawnEpic(workspaceId: string, source: TaskSourceKind, epicRef: string, containerId: string, createdBy?: string | null, position?: Position): Promise<SpawnedEpic>;
|
|
29
48
|
}
|
|
30
49
|
//# sourceMappingURL=TaskLinkService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskLinkService.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/TaskLinkService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"TaskLinkService.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/TaskLinkService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAe,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAU/D,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,cAAc,CAAA;IAC5B,eAAe,EAAE,eAAe,CAAA;IAChC,cAAc,EAAE,cAAc,CAAA;IAC9B,wFAAwF;IACxF,aAAa,EAAE,iBAAiB,CAAA;CACjC;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAA;IACX,KAAK,EAAE,KAAK,EAAE,CAAA;CACf;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,2BAA2B,EAAI;IAElE,wEAAwE;IAClE,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAarB;IAED;;;;;;;OAOG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,aAAa,CAAC,CAgCxB;IAED;;;;;;;;;OASG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,WAAW,CAAC,CAwFtB;CACF"}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskLinkService.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskLinkService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"TaskLinkService.js","sourceRoot":"","sources":["../../../src/modules/tasks/TaskLinkService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TaskSearchRepoScope, TaskSourceDescriptor } from '@cat-factory/kernel';
|
|
1
|
+
import type { TaskDependencyLink, TaskSearchRepoScope, TaskSourceDescriptor } from '@cat-factory/kernel';
|
|
2
2
|
/**
|
|
3
3
|
* What the connect UI renders. GitHub issues piggyback on the workspace's
|
|
4
4
|
* existing GitHub App installation, so there are NO credential fields — the
|
|
@@ -32,6 +32,17 @@ export interface GitHubIssueExternalId {
|
|
|
32
32
|
export declare function parseGitHubIssueExternalId(externalId: string): GitHubIssueExternalId | null;
|
|
33
33
|
/** The canonical web URL for an issue external id. */
|
|
34
34
|
export declare function githubIssueUrl(id: GitHubIssueExternalId): string;
|
|
35
|
+
/**
|
|
36
|
+
* Parse dependency references out of a GitHub issue body. Scans line by line for the
|
|
37
|
+
* recognised phrases ("blocked by", "depends on", "blocks"), each governing the issue
|
|
38
|
+
* references that follow it — a bare `#123` (resolved against the issue's own repo) or a
|
|
39
|
+
* cross-repo `owner/repo#123`. Each reference is attributed to the NEAREST phrase that
|
|
40
|
+
* precedes it, so a mixed line like `Depends on #5 but blocks #9` classifies #5 and #9
|
|
41
|
+
* independently. Returns normalized {@link TaskDependencyLink}s with canonical
|
|
42
|
+
* `owner/repo#number` external ids. Lenient by design: anything it doesn't recognise is
|
|
43
|
+
* simply skipped (GitHub bodies are free-form), and `relates` is never inferred here.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseIssueDependencyLinks(body: string, contextOwner: string, contextRepo: string): TaskDependencyLink[];
|
|
35
46
|
/**
|
|
36
47
|
* Build the GitHub issue-search text, scoping it to a single repo when a service's
|
|
37
48
|
* repo is known. The `repo:owner/name` qualifier keeps hits from leaking in from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-issues.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/github-issues.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"github-issues.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/github-issues.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAU5B;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,oBAQtC,CAAA;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAEvE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAShE;AAED,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAI3F;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAEhE;AAWD;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,kBAAkB,EAAE,CA0CtB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAK9F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,mBAAmB,GAC1B,MAAM,GAAG,IAAI,CAQf"}
|
|
@@ -64,6 +64,75 @@ export function parseGitHubIssueExternalId(externalId) {
|
|
|
64
64
|
export function githubIssueUrl(id) {
|
|
65
65
|
return `https://github.com/${id.owner}/${id.repo}/issues/${id.number}`;
|
|
66
66
|
}
|
|
67
|
+
// Dependency-reference phrases recognised in a GitHub issue body. GitHub has no native
|
|
68
|
+
// "blocked by"/"depends on" field, so the convention is a line like `Blocked by #12` or
|
|
69
|
+
// `Depends on owner/repo#34`. We map each phrase to a normalized link direction.
|
|
70
|
+
const DEP_PHRASES = [
|
|
71
|
+
{ re: /\bblocked\s+by\b/i, type: 'blockedBy' },
|
|
72
|
+
{ re: /\bdepends?\s+on\b/i, type: 'dependsOn' },
|
|
73
|
+
{ re: /\bblocks\b/i, type: 'blocks' },
|
|
74
|
+
];
|
|
75
|
+
/**
|
|
76
|
+
* Parse dependency references out of a GitHub issue body. Scans line by line for the
|
|
77
|
+
* recognised phrases ("blocked by", "depends on", "blocks"), each governing the issue
|
|
78
|
+
* references that follow it — a bare `#123` (resolved against the issue's own repo) or a
|
|
79
|
+
* cross-repo `owner/repo#123`. Each reference is attributed to the NEAREST phrase that
|
|
80
|
+
* precedes it, so a mixed line like `Depends on #5 but blocks #9` classifies #5 and #9
|
|
81
|
+
* independently. Returns normalized {@link TaskDependencyLink}s with canonical
|
|
82
|
+
* `owner/repo#number` external ids. Lenient by design: anything it doesn't recognise is
|
|
83
|
+
* simply skipped (GitHub bodies are free-form), and `relates` is never inferred here.
|
|
84
|
+
*/
|
|
85
|
+
export function parseIssueDependencyLinks(body, contextOwner, contextRepo) {
|
|
86
|
+
if (!body)
|
|
87
|
+
return [];
|
|
88
|
+
const out = [];
|
|
89
|
+
const seen = new Set();
|
|
90
|
+
// Match `owner/repo#123` or a bare `#123`.
|
|
91
|
+
const refRe = new RegExp(`(?:(${SEG})/(${SEG}))?#(\\d+)`, 'g');
|
|
92
|
+
for (const rawLine of body.split(/\r?\n/)) {
|
|
93
|
+
const line = rawLine.trim();
|
|
94
|
+
if (!line)
|
|
95
|
+
continue;
|
|
96
|
+
// Locate every recognised phrase on the line with its position, so each reference can be
|
|
97
|
+
// attributed to the nearest phrase that precedes it (not just the first phrase on the line).
|
|
98
|
+
const phraseHits = [];
|
|
99
|
+
for (const p of DEP_PHRASES) {
|
|
100
|
+
const g = new RegExp(p.re.source, 'gi');
|
|
101
|
+
let pm;
|
|
102
|
+
while ((pm = g.exec(line)) !== null) {
|
|
103
|
+
phraseHits.push({ index: pm.index, type: p.type });
|
|
104
|
+
if (pm.index === g.lastIndex)
|
|
105
|
+
g.lastIndex++; // never spin on a zero-width match
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!phraseHits.length)
|
|
109
|
+
continue;
|
|
110
|
+
phraseHits.sort((a, b) => a.index - b.index);
|
|
111
|
+
refRe.lastIndex = 0;
|
|
112
|
+
let m;
|
|
113
|
+
while ((m = refRe.exec(line)) !== null) {
|
|
114
|
+
// The governing phrase is the last one that starts before this reference.
|
|
115
|
+
let governing;
|
|
116
|
+
for (const h of phraseHits) {
|
|
117
|
+
if (h.index < m.index)
|
|
118
|
+
governing = h.type;
|
|
119
|
+
else
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (!governing)
|
|
123
|
+
continue;
|
|
124
|
+
const owner = m[1] ?? contextOwner;
|
|
125
|
+
const repo = m[2] ?? contextRepo;
|
|
126
|
+
const externalId = githubIssueExternalId({ owner, repo, number: Number(m[3]) });
|
|
127
|
+
const key = `${governing}:${externalId}`;
|
|
128
|
+
if (seen.has(key))
|
|
129
|
+
continue;
|
|
130
|
+
seen.add(key);
|
|
131
|
+
out.push({ type: governing, externalId });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return out;
|
|
135
|
+
}
|
|
67
136
|
/**
|
|
68
137
|
* Build the GitHub issue-search text, scoping it to a single repo when a service's
|
|
69
138
|
* repo is known. The `repo:owner/name` qualifier keeps hits from leaking in from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-issues.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/github-issues.logic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github-issues.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/github-issues.logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TaskSearchResult, TaskSourceDescriptor } from '@cat-factory/kernel';
|
|
1
|
+
import type { TaskDependencyLink, TaskSearchResult, TaskSourceDescriptor } from '@cat-factory/kernel';
|
|
2
2
|
/** What the connect UI renders, and which credentials the provider needs. */
|
|
3
3
|
export declare const JIRA_DESCRIPTOR: TaskSourceDescriptor;
|
|
4
4
|
/**
|
|
@@ -16,6 +16,37 @@ export declare function parseJiraSearchResults(json: unknown, base: string): Tas
|
|
|
16
16
|
* input but canonically upper-case). Returns null when nothing parses.
|
|
17
17
|
*/
|
|
18
18
|
export declare function parseJiraRef(input: string): string | null;
|
|
19
|
+
/** Build the JQL that lists an epic's / parent's direct children, newest first. */
|
|
20
|
+
export declare function buildJiraChildrenJql(key: string): string;
|
|
21
|
+
/** Whether a Jira issue type name denotes an epic (case-insensitive). */
|
|
22
|
+
export declare function isJiraEpicType(issueTypeName: string | undefined): boolean;
|
|
23
|
+
/** One entry of a Jira issue's `issuelinks` field (the shape we read). */
|
|
24
|
+
export interface JiraIssueLink {
|
|
25
|
+
type?: {
|
|
26
|
+
name?: string;
|
|
27
|
+
inward?: string;
|
|
28
|
+
outward?: string;
|
|
29
|
+
};
|
|
30
|
+
inwardIssue?: {
|
|
31
|
+
key?: string;
|
|
32
|
+
};
|
|
33
|
+
outwardIssue?: {
|
|
34
|
+
key?: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Map a Jira issue's `issuelinks` onto normalized {@link TaskDependencyLink}s. Jira link
|
|
39
|
+
* types are phrased from the perspective of the OTHER issue: an `inwardIssue` reached via
|
|
40
|
+
* the type's `inward` phrase, an `outwardIssue` via the `outward` phrase. We classify by
|
|
41
|
+
* the phrase text:
|
|
42
|
+
* - inward "is blocked by" → this issue is `blockedBy` the inward issue
|
|
43
|
+
* - inward "is depended on by" → the inward issue depends on this → this `blocks` it
|
|
44
|
+
* - outward "blocks" → this issue `blocks` the outward issue
|
|
45
|
+
* - outward "depends on" → this issue is `blockedBy` the outward issue
|
|
46
|
+
* Anything we don't recognise as a blocking relation is recorded as `relates` (the
|
|
47
|
+
* importer skips those for sequencing). Lenient: malformed entries are dropped.
|
|
48
|
+
*/
|
|
49
|
+
export declare function mapJiraIssueLinks(links: unknown): TaskDependencyLink[];
|
|
19
50
|
/**
|
|
20
51
|
* Convert an Atlassian Document Format node tree into lightweight Markdown: the
|
|
21
52
|
* same `#`/`##`/`###` headings, `- ` list items and blank-line block boundaries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/jira.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"jira.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/tasks/jira.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAS5B,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,oBAuB7B,CAAA;AAOD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AASD,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAgBtF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWzD;AAED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEzE;AAED,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,EAAE,CAgCtE;AAcD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAUnD"}
|
|
@@ -82,6 +82,70 @@ export function parseJiraRef(input) {
|
|
|
82
82
|
return issues[1].toUpperCase();
|
|
83
83
|
return null;
|
|
84
84
|
}
|
|
85
|
+
/** Build the JQL that lists an epic's / parent's direct children, newest first. */
|
|
86
|
+
export function buildJiraChildrenJql(key) {
|
|
87
|
+
// `parent = KEY` matches both next-gen epic children and classic sub-tasks; the legacy
|
|
88
|
+
// `"Epic Link" = KEY` covers classic-project epic children that don't use `parent`.
|
|
89
|
+
const k = escapeJql(key.trim());
|
|
90
|
+
return `(parent = "${k}" OR "Epic Link" = "${k}") ORDER BY created ASC`;
|
|
91
|
+
}
|
|
92
|
+
/** Whether a Jira issue type name denotes an epic (case-insensitive). */
|
|
93
|
+
export function isJiraEpicType(issueTypeName) {
|
|
94
|
+
return !!issueTypeName && /epic/i.test(issueTypeName);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Map a Jira issue's `issuelinks` onto normalized {@link TaskDependencyLink}s. Jira link
|
|
98
|
+
* types are phrased from the perspective of the OTHER issue: an `inwardIssue` reached via
|
|
99
|
+
* the type's `inward` phrase, an `outwardIssue` via the `outward` phrase. We classify by
|
|
100
|
+
* the phrase text:
|
|
101
|
+
* - inward "is blocked by" → this issue is `blockedBy` the inward issue
|
|
102
|
+
* - inward "is depended on by" → the inward issue depends on this → this `blocks` it
|
|
103
|
+
* - outward "blocks" → this issue `blocks` the outward issue
|
|
104
|
+
* - outward "depends on" → this issue is `blockedBy` the outward issue
|
|
105
|
+
* Anything we don't recognise as a blocking relation is recorded as `relates` (the
|
|
106
|
+
* importer skips those for sequencing). Lenient: malformed entries are dropped.
|
|
107
|
+
*/
|
|
108
|
+
export function mapJiraIssueLinks(links) {
|
|
109
|
+
if (!Array.isArray(links))
|
|
110
|
+
return [];
|
|
111
|
+
const out = [];
|
|
112
|
+
const seen = new Set();
|
|
113
|
+
for (const raw of links) {
|
|
114
|
+
const inwardKey = raw?.inwardIssue?.key;
|
|
115
|
+
const outwardKey = raw?.outwardIssue?.key;
|
|
116
|
+
const inwardPhrase = (raw?.type?.inward ?? '').toLowerCase();
|
|
117
|
+
const outwardPhrase = (raw?.type?.outward ?? '').toLowerCase();
|
|
118
|
+
// The inward issue is reached via the inward phrase ("is blocked by" / "is depended on by").
|
|
119
|
+
// "is blocked by X" → this is blockedBy X; "is depended on by X" → X depends on this, so
|
|
120
|
+
// this BLOCKS X (NOT `dependsOn` — that direction is the exact reverse).
|
|
121
|
+
if (inwardKey) {
|
|
122
|
+
const type = /block/.test(inwardPhrase)
|
|
123
|
+
? 'blockedBy'
|
|
124
|
+
: /depend/.test(inwardPhrase)
|
|
125
|
+
? 'blocks'
|
|
126
|
+
: 'relates';
|
|
127
|
+
pushLink(out, seen, type, inwardKey);
|
|
128
|
+
}
|
|
129
|
+
// The outward issue is reached via the outward phrase ("blocks" / "depends on").
|
|
130
|
+
if (outwardKey) {
|
|
131
|
+
const type = /block/.test(outwardPhrase)
|
|
132
|
+
? 'blocks'
|
|
133
|
+
: /depend/.test(outwardPhrase)
|
|
134
|
+
? // "this depends on outward" → this is blocked by the outward issue.
|
|
135
|
+
'blockedBy'
|
|
136
|
+
: 'relates';
|
|
137
|
+
pushLink(out, seen, type, outwardKey);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
function pushLink(out, seen, type, externalId) {
|
|
143
|
+
const key = `${type}:${externalId}`;
|
|
144
|
+
if (seen.has(key))
|
|
145
|
+
return;
|
|
146
|
+
seen.add(key);
|
|
147
|
+
out.push({ type, externalId });
|
|
148
|
+
}
|
|
85
149
|
/**
|
|
86
150
|
* Convert an Atlassian Document Format node tree into lightweight Markdown: the
|
|
87
151
|
* same `#`/`##`/`###` headings, `- ` list items and blank-line block boundaries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/jira.logic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jira.logic.js","sourceRoot":"","sources":["../../../src/modules/tasks/jira.logic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/integrations",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "External-system integration domain logic for the Agent Architecture Board (GitHub, documents, tasks, environments, runners).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^6.0.209",
|
|
28
|
-
"@cat-factory/contracts": "0.
|
|
29
|
-
"@cat-factory/kernel": "0.
|
|
28
|
+
"@cat-factory/contracts": "0.19.0",
|
|
29
|
+
"@cat-factory/kernel": "0.18.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "7.0.1-rc",
|