@2amtech/hai 0.0.3 → 0.0.5
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/README.md +17 -18
- package/dist/cli.js +0 -0
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pull.js +24 -12
- package/dist/commands/pull.js.map +1 -1
- package/dist/helpers/init.js.map +1 -1
- package/dist/helpers/preflight.d.ts +1 -1
- package/dist/helpers/preflight.js +1 -1
- package/dist/helpers/preflight.js.map +1 -1
- package/dist/helpers/pull.d.ts +1 -0
- package/dist/helpers/pull.js +2 -0
- package/dist/helpers/pull.js.map +1 -1
- package/dist/plugins/atlassian/adf/convert.d.ts +4 -0
- package/dist/plugins/atlassian/adf/convert.js +171 -0
- package/dist/plugins/atlassian/adf/convert.js.map +1 -0
- package/dist/plugins/atlassian/adf/marks.d.ts +4 -0
- package/dist/plugins/atlassian/adf/marks.js +34 -0
- package/dist/plugins/atlassian/adf/marks.js.map +1 -0
- package/dist/plugins/atlassian/adf/tables.d.ts +11 -0
- package/dist/plugins/atlassian/adf/tables.js +73 -0
- package/dist/plugins/atlassian/adf/tables.js.map +1 -0
- package/dist/plugins/atlassian/adf/types.d.ts +14 -0
- package/dist/plugins/atlassian/adf/types.js +2 -0
- package/dist/plugins/atlassian/adf/types.js.map +1 -0
- package/dist/plugins/atlassian/adf-to-markdown.d.ts +2 -11
- package/dist/plugins/atlassian/adf-to-markdown.js +1 -120
- package/dist/plugins/atlassian/adf-to-markdown.js.map +1 -1
- package/dist/plugins/atlassian/confluence-client.d.ts +1 -1
- package/dist/plugins/atlassian/confluence-client.js +49 -21
- package/dist/plugins/atlassian/confluence-client.js.map +1 -1
- package/dist/plugins/vscode-copilot/agents.js.map +1 -1
- package/dist/plugins/vscode-copilot/index.js.map +1 -1
- package/dist/plugins/vscode-copilot/prompts.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/wizard/summary-step.d.ts +1 -1
- package/dist/wizard/summary-step.js +5 -3
- package/dist/wizard/summary-step.js.map +1 -1
- package/package.json +9 -7
- package/dist/commands/mcp/specs.d.ts +0 -2
- package/dist/commands/mcp/specs.js +0 -325
- package/dist/commands/mcp/specs.js.map +0 -1
package/README.md
CHANGED
|
@@ -66,8 +66,8 @@ All providers register the HAI MCP server and install the full set of prompts an
|
|
|
66
66
|
|
|
67
67
|
### Atlassian provider
|
|
68
68
|
|
|
69
|
-
-
|
|
70
|
-
-
|
|
69
|
+
- **Jira**: Fetches active and done tickets by project, supports recursive linked-issue fetching, custom fields, and comments
|
|
70
|
+
- **Confluence**: Fetches pages by space (optionally scoped to an ancestor page), converts Atlassian Document Format (ADF) to Markdown, and preserves page hierarchy
|
|
71
71
|
|
|
72
72
|
## Prompts
|
|
73
73
|
|
|
@@ -149,27 +149,26 @@ Running `hai init` creates a `hai.json` at the project root (should be gitignore
|
|
|
149
149
|
|
|
150
150
|
```json
|
|
151
151
|
{
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
152
|
+
"plugins": [
|
|
153
|
+
{
|
|
154
|
+
"plugin": "atlassian",
|
|
155
|
+
"provides": ["tickets", "specs"],
|
|
156
|
+
"host": "https://your-org.atlassian.net",
|
|
157
|
+
"email": "you@example.com",
|
|
158
|
+
"token": "...",
|
|
159
|
+
"projects": ["PROJ"],
|
|
160
|
+
"spaces": ["TEAM"]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"plugin": "claude-code",
|
|
164
|
+
"provides": ["ai"]
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
167
|
}
|
|
168
168
|
```
|
|
169
169
|
|
|
170
170
|
Use `hai init` again to reconfigure at any time.
|
|
171
171
|
|
|
172
|
-
|
|
173
172
|
## License
|
|
174
173
|
|
|
175
174
|
```
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/commands/init.js
CHANGED
|
@@ -60,7 +60,7 @@ export default function InitCommand() {
|
|
|
60
60
|
}
|
|
61
61
|
const currentStep = steps[0];
|
|
62
62
|
if (!currentStep) {
|
|
63
|
-
return React.createElement(SummaryStep, { aiAlreadyInitialized: initResult?.aiAlreadyInitialized ?? false });
|
|
63
|
+
return (React.createElement(SummaryStep, { aiAlreadyInitialized: initResult?.aiAlreadyInitialized ?? false }));
|
|
64
64
|
}
|
|
65
65
|
const { capability, label } = STEP_MAP[currentStep];
|
|
66
66
|
return (React.createElement(ProviderStep, { key: currentStep, capability: capability, label: label, onComplete: (plugin, data) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/commands/init.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/commands/init.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,uBAAuB,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAC,qBAAqB,EAAC,MAAM,oBAAoB,CAAC;AAEzD,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAI7D,MAAM,aAAa,GAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAEzD,MAAM,QAAQ,GAA8D;IAC3E,EAAE,EAAE,EAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAC;IAC5C,OAAO,EAAE,EAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAC;IAC1D,KAAK,EAAE,EAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAC;CACrD,CAAC;AAEF,SAAS,kBAAkB,CAC1B,UAA0B,EAC1B,MAAwB;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,OAAO,KAAK,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,MAAwB;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,EAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,EAAC,GAAG,MAAM,CAAC;YAClD,OAAO,EAAC,GAAG,IAAI,EAAC,CAAC;QAClB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,EACrB,UAAU,EACV,KAAK,EACL,UAAU,GAKV;IACA,MAAM,EAAC,MAAM,EAAC,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,CACN,oBAAC,gBAAgB,IAChB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,EACvD,UAAU,EAAE,SAAS,GACpB,CACF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAElD,OAAO,CACN,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QAC1B,oBAAC,IAAI;YACJ,oBAAC,IAAI,IAAC,IAAI;gBAAE,KAAK;qBAAU;YAC3B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,IAAE,MAAM,CAAC,IAAI,CAAQ,CACjC;QACP,oBAAC,MAAM,CAAC,QAAQ,IACf,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,QAAQ,EACtB,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAC3C,CACG,CACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,WAAW;IAClC,MAAM,EAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAC,GAAG,gBAAgB,EAAE,CAAC;IAC3D,MAAM,EAAC,QAAQ,EAAC,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAoB,IAAI,CAAC,CAAC;IAEtE,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,CACN,oBAAC,OAAO,IAAC,KAAK,EAAC,gDAAgD,GAAG,CAClE,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,CACN,oBAAC,WAAW,IACX,oBAAoB,EAAE,UAAU,EAAE,oBAAoB,IAAI,KAAK,GAC9D,CACF,CAAC;IACH,CAAC;IAED,MAAM,EAAC,UAAU,EAAE,KAAK,EAAC,GAAG,QAAQ,CAAC,WAAW,CAAE,CAAC;IAEnD,OAAO,CACN,oBAAC,YAAY,IACZ,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAC3B,CAAC;YAEF,MAAM,YAAY,GAAG,cAAc;gBAClC,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC;gBACnC,CAAC,CAAC,EAAE,CAAC;YAEN,MAAM,cAAc,GAAG;gBACtB,MAAM,EAAE,MAAM,CAAC,EAAE;gBACjB,QAAQ,EAAE,cAAc;oBACvB,CAAC,CAAC,KAAK,CAAC,IAAI,CACV,IAAI,GAAG,CAAC;wBACP,GAAG,cAAc,CAAC,QAAQ;wBAC1B,UAAU;qBACV,CAAC,CACD;oBACH,CAAC,CAAC,CAAC,UAAU,CAAC;gBACf,GAAG,YAAY;gBACf,GAAG,IAAI;aACP,CAAC;YAEF,2EAA2E;YAC3E,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO;iBACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;iBACnC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACR,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CACrB,CAAC;gBACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAExD,MAAM,aAAa,GAAG;gBACrB,GAAG,MAAM;gBACT,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,cAAc,CAAC;aAC5C,CAAC;YAEF,SAAS,CAAC,aAAa,CAAC,CAAC;YAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,KAAK,UAAU,CAAC,aAAa,CAAC;qBAC5B,KAAK,CAAC,CAAC,CAAC,EAAE;oBACV,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACb,CAAC,CAAC;qBACD,IAAI,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;qBAChD,IAAI,CAAC,MAAM,CAAC,EAAE;oBACd,aAAa,CAAC,MAAM,CAAC,CAAC;oBACtB,WAAW,CAAC,KAAK,CAAC,CAAC;oBACnB,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC,GACA,CACF,CAAC;AACH,CAAC"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { Text } from 'ink';
|
|
2
|
+
import { Text, useApp } from 'ink';
|
|
3
3
|
import '../plugins/index.js';
|
|
4
4
|
import Spinner from '../ui/spinner.js';
|
|
5
5
|
import { useConfigContext } from '../contexts/config-context.js';
|
|
6
6
|
import { pullTickets, pullSpecs } from '../helpers/pull.js';
|
|
7
7
|
const PHASE_FLOW = ['tickets', 'specs', 'done'];
|
|
8
8
|
export default function PullCommand({ dryRun, tickets, specs, updateLocal, }) {
|
|
9
|
-
const
|
|
9
|
+
const { exit } = useApp();
|
|
10
|
+
const [phases, setPhases] = useState(() => PHASE_FLOW.filter(phase => {
|
|
11
|
+
if (phase === 'tickets')
|
|
12
|
+
return tickets;
|
|
13
|
+
if (phase === 'specs')
|
|
14
|
+
return specs;
|
|
15
|
+
return true;
|
|
16
|
+
}));
|
|
10
17
|
const [error, setError] = useState(null);
|
|
11
18
|
useEffect(() => {
|
|
12
|
-
if (
|
|
13
|
-
|
|
19
|
+
if (phases[0] === 'done') {
|
|
20
|
+
exit();
|
|
21
|
+
process.exit(0);
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
}, [phases, exit]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (error) {
|
|
26
|
+
exit(error);
|
|
27
|
+
process.exit(1);
|
|
20
28
|
}
|
|
21
|
-
}, [
|
|
29
|
+
}, [error, exit]);
|
|
22
30
|
if (error) {
|
|
23
31
|
return React.createElement(Text, { color: "red" },
|
|
24
32
|
"Error during pull: ",
|
|
@@ -40,22 +48,26 @@ function RenderPhase({ phase, onNextPhase, onError, isDryRun, shouldUpdateLocal,
|
|
|
40
48
|
}
|
|
41
49
|
function TicketSync({ onNextPhase, onError, isDryRun, shouldUpdateLocal, }) {
|
|
42
50
|
const { config } = useConfigContext();
|
|
51
|
+
const [progress, setProgress] = useState('Syncing tickets...');
|
|
43
52
|
useEffect(() => {
|
|
44
53
|
pullTickets(config, {
|
|
45
54
|
dryRun: isDryRun,
|
|
46
55
|
updateLocal: shouldUpdateLocal,
|
|
56
|
+
onProgress: setProgress,
|
|
47
57
|
}).then(onNextPhase, onError);
|
|
48
58
|
}, [config, isDryRun, shouldUpdateLocal, onNextPhase, onError]);
|
|
49
|
-
return React.createElement(Spinner, { label:
|
|
59
|
+
return React.createElement(Spinner, { label: progress });
|
|
50
60
|
}
|
|
51
61
|
function SpecSync({ onNextPhase, onError, isDryRun, shouldUpdateLocal, }) {
|
|
52
62
|
const { config } = useConfigContext();
|
|
63
|
+
const [progress, setProgress] = useState('Syncing specs...');
|
|
53
64
|
useEffect(() => {
|
|
54
65
|
pullSpecs(config, {
|
|
55
66
|
dryRun: isDryRun,
|
|
56
67
|
updateLocal: shouldUpdateLocal,
|
|
68
|
+
onProgress: setProgress,
|
|
57
69
|
}).then(onNextPhase, onError);
|
|
58
70
|
}, [config, isDryRun, shouldUpdateLocal, onNextPhase, onError]);
|
|
59
|
-
return React.createElement(Spinner, { label:
|
|
71
|
+
return React.createElement(Spinner, { label: progress });
|
|
60
72
|
}
|
|
61
73
|
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../source/commands/pull.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../source/commands/pull.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,KAAK,CAAC;AACjC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAW1D,MAAM,UAAU,GAAY,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EACnC,MAAM,EACN,OAAO,EACP,KAAK,EACL,WAAW,GACJ;IACP,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,GAAG,EAAE,CAClD,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC;QACxC,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CACF,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnB,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAElB,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,oBAAC,IAAI,IAAC,KAAK,EAAC,KAAK;;YAAqB,KAAK,CAAC,OAAO,CAAQ,CAAC;IACpE,CAAC;IAED,OAAO,CACN,oBAAC,WAAW,IACX,GAAG,EAAE,MAAM,CAAC,CAAC,CAAE,EACf,KAAK,EAAE,MAAM,CAAC,CAAC,CAAE,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,WAAW,EAC9B,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACnD,OAAO,EAAE,QAAQ,GAChB,CACF,CAAC;AACH,CAAC;AAUD,SAAS,WAAW,CAAC,EACpB,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,iBAAiB,GACD;IAChB,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,MAAM;YACV,OAAO,oBAAC,IAAI,qBAAkB,CAAC;QAChC,KAAK,SAAS;YACb,OAAO,CACN,oBAAC,UAAU,IACV,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,GACf,CACF,CAAC;QACH,KAAK,OAAO;YACX,OAAO,CACN,oBAAC,QAAQ,IACR,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,GACf,CACF,CAAC;QACH;YACC,OAAO,oBAAC,IAAI,oBAAiB,CAAC;IAChC,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,EACnB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,iBAAiB,GACD;IAChB,MAAM,EAAC,MAAM,EAAC,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,MAAO,EAAE;YACpB,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,WAAW;SACvB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhE,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,QAAQ,GAAI,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ,CAAC,EACjB,WAAW,EACX,OAAO,EACP,QAAQ,EACR,iBAAiB,GACD;IAChB,MAAM,EAAC,MAAM,EAAC,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAE7D,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,MAAO,EAAE;YAClB,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,WAAW;SACvB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhE,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,QAAQ,GAAI,CAAC;AACrC,CAAC"}
|
package/dist/helpers/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/helpers/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../source/helpers/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAC,uBAAuB,EAAC,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAM1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,MAAiB;IAEjB,MAAM,kBAAkB,CAAC;QACxB,+BAA+B,EAAE,KAAK;KACtC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAExC,IAAI,oBAAoB,GAAG,KAAK,CAAC;IAEjC,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,UAAU,GAAG,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACpB,oBAAoB,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,sBAAsB,EAAE,CAAC;IAE/B,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtB,OAAO,EAAC,oBAAoB,EAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -4,5 +4,5 @@ interface PrflightChecks {
|
|
|
4
4
|
mustBeInGit?: boolean;
|
|
5
5
|
gitIgnoreEntriesMustBeSatisfied?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function runPreflightChecks({ mustBeInGit, gitIgnoreEntriesMustBeSatisfied }?: PrflightChecks): Promise<void>;
|
|
7
|
+
export declare function runPreflightChecks({ mustBeInGit, gitIgnoreEntriesMustBeSatisfied, }?: PrflightChecks): Promise<void>;
|
|
8
8
|
export {};
|
|
@@ -47,7 +47,7 @@ export async function ensureGitignoreEntries() {
|
|
|
47
47
|
function isFlagSet(flag) {
|
|
48
48
|
return flag === undefined || flag === true;
|
|
49
49
|
}
|
|
50
|
-
export async function runPreflightChecks({ mustBeInGit, gitIgnoreEntriesMustBeSatisfied } = {}) {
|
|
50
|
+
export async function runPreflightChecks({ mustBeInGit, gitIgnoreEntriesMustBeSatisfied, } = {}) {
|
|
51
51
|
if (isFlagSet(mustBeInGit)) {
|
|
52
52
|
await assertGitRoot();
|
|
53
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../source/helpers/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../source/helpers/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/helpers/pull.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { HaiConfig } from '../schemas/config.js';
|
|
|
2
2
|
type PullOptions = {
|
|
3
3
|
dryRun?: boolean;
|
|
4
4
|
updateLocal?: boolean;
|
|
5
|
+
onProgress?: (message: string) => void;
|
|
5
6
|
};
|
|
6
7
|
export declare function pullTickets(config: HaiConfig, options?: PullOptions): Promise<void>;
|
|
7
8
|
export declare function pullSpecs(config: HaiConfig, options?: PullOptions): Promise<void>;
|
package/dist/helpers/pull.js
CHANGED
|
@@ -11,6 +11,7 @@ export async function pullTickets(config, options = {}) {
|
|
|
11
11
|
await provider.sync(destPath, {
|
|
12
12
|
dryRun: options.dryRun ?? false,
|
|
13
13
|
updateLocal: options.updateLocal ?? false,
|
|
14
|
+
onProgress: options.onProgress,
|
|
14
15
|
});
|
|
15
16
|
if (!options.dryRun) {
|
|
16
17
|
await generateIndex(aiDir, destPath, 'Ticket Index', 'ticket-index.md');
|
|
@@ -25,6 +26,7 @@ export async function pullSpecs(config, options = {}) {
|
|
|
25
26
|
await provider.sync(destPath, {
|
|
26
27
|
dryRun: options.dryRun ?? false,
|
|
27
28
|
updateLocal: options.updateLocal ?? false,
|
|
29
|
+
onProgress: options.onProgress,
|
|
28
30
|
});
|
|
29
31
|
if (!options.dryRun) {
|
|
30
32
|
await generateIndex(aiDir, destPath, 'Specifications Index', 'specification-index.md');
|
package/dist/helpers/pull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../source/helpers/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAC;AAEzC,OAAO,EACN,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../source/helpers/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AdfNode, ConvertContext } from './types.js';
|
|
2
|
+
export declare function convertChildren(node: AdfNode, ctx: ConvertContext): string;
|
|
3
|
+
export declare function convertNode(node: AdfNode, ctx?: ConvertContext): string;
|
|
4
|
+
export declare function adfToMarkdown(node: AdfNode | null | undefined): string;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { applyMarks } from './marks.js';
|
|
2
|
+
import { convertTable } from './tables.js';
|
|
3
|
+
const PANEL_LABELS = {
|
|
4
|
+
info: 'ℹ️ Info',
|
|
5
|
+
note: '📝 Note',
|
|
6
|
+
tip: '💡 Tip',
|
|
7
|
+
success: '✅ Success',
|
|
8
|
+
warning: '⚠️ Warning',
|
|
9
|
+
error: '🛑 Error',
|
|
10
|
+
};
|
|
11
|
+
export function convertChildren(node, ctx) {
|
|
12
|
+
if (!node.content)
|
|
13
|
+
return '';
|
|
14
|
+
return node.content.map(child => convertNode(child, ctx)).join('');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Render block content as a blockquote, prefixing each line with `> `.
|
|
18
|
+
* Used for panels (info/note/tip/warning/error) so their body text survives.
|
|
19
|
+
*/
|
|
20
|
+
function asBlockquote(node, ctx, label) {
|
|
21
|
+
const inner = convertChildren(node, ctx).trimEnd();
|
|
22
|
+
const lines = inner.length > 0 ? inner.split('\n') : [];
|
|
23
|
+
const quoted = lines.map(line => (line ? `> ${line}` : '>'));
|
|
24
|
+
if (label)
|
|
25
|
+
quoted.unshift(`> **${label}**`);
|
|
26
|
+
return quoted.join('\n') + '\n\n';
|
|
27
|
+
}
|
|
28
|
+
function formatDate(timestamp) {
|
|
29
|
+
const ms = Number(timestamp);
|
|
30
|
+
if (!Number.isFinite(ms))
|
|
31
|
+
return '';
|
|
32
|
+
const iso = new Date(ms).toISOString();
|
|
33
|
+
return iso.slice(0, 10);
|
|
34
|
+
}
|
|
35
|
+
export function convertNode(node, ctx = {}) {
|
|
36
|
+
switch (node.type) {
|
|
37
|
+
case 'doc': {
|
|
38
|
+
return convertChildren(node, ctx);
|
|
39
|
+
}
|
|
40
|
+
case 'paragraph': {
|
|
41
|
+
return convertChildren(node, ctx) + '\n\n';
|
|
42
|
+
}
|
|
43
|
+
case 'text': {
|
|
44
|
+
return applyMarks(node.text ?? '', node.marks);
|
|
45
|
+
}
|
|
46
|
+
case 'hardBreak': {
|
|
47
|
+
return '\n';
|
|
48
|
+
}
|
|
49
|
+
case 'heading': {
|
|
50
|
+
const level = node.attrs?.['level'] ?? 1;
|
|
51
|
+
const prefix = '#'.repeat(level);
|
|
52
|
+
return `${prefix} ${convertChildren(node, ctx)}\n\n`;
|
|
53
|
+
}
|
|
54
|
+
case 'bulletList': {
|
|
55
|
+
return convertChildren(node, { ...ctx, listType: 'bullet' });
|
|
56
|
+
}
|
|
57
|
+
case 'orderedList': {
|
|
58
|
+
return convertChildren(node, { ...ctx, listType: 'ordered' });
|
|
59
|
+
}
|
|
60
|
+
case 'listItem': {
|
|
61
|
+
const indent = ctx.indent ?? 0;
|
|
62
|
+
const prefix = ' '.repeat(indent * 2) +
|
|
63
|
+
(ctx.listType === 'ordered' ? '1. ' : '- ');
|
|
64
|
+
const parts = [];
|
|
65
|
+
for (const child of node.content ?? []) {
|
|
66
|
+
if (child.type === 'bulletList' ||
|
|
67
|
+
child.type === 'orderedList') {
|
|
68
|
+
parts.push(convertNode(child, {
|
|
69
|
+
...ctx,
|
|
70
|
+
indent: (ctx.indent ?? 0) + 1,
|
|
71
|
+
}));
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
parts.push(`${prefix}${convertChildren(child, ctx)}\n`);
|
|
75
|
+
}
|
|
76
|
+
return parts.join('');
|
|
77
|
+
}
|
|
78
|
+
case 'taskList': {
|
|
79
|
+
return convertChildren(node, ctx) + '\n';
|
|
80
|
+
}
|
|
81
|
+
case 'taskItem': {
|
|
82
|
+
const done = node.attrs?.['state'] === 'DONE';
|
|
83
|
+
const box = done ? '[x]' : '[ ]';
|
|
84
|
+
return `- ${box} ${convertChildren(node, ctx).trim()}\n`;
|
|
85
|
+
}
|
|
86
|
+
case 'decisionList': {
|
|
87
|
+
return convertChildren(node, ctx) + '\n';
|
|
88
|
+
}
|
|
89
|
+
case 'decisionItem': {
|
|
90
|
+
return `- **Decision:** ${convertChildren(node, ctx).trim()}\n`;
|
|
91
|
+
}
|
|
92
|
+
case 'panel': {
|
|
93
|
+
const panelType = node.attrs?.['panelType'] ?? 'info';
|
|
94
|
+
const label = PANEL_LABELS[panelType] ?? 'ℹ️ Info';
|
|
95
|
+
return asBlockquote(node, ctx, label);
|
|
96
|
+
}
|
|
97
|
+
case 'expand':
|
|
98
|
+
case 'nestedExpand': {
|
|
99
|
+
const title = node.attrs?.['title'] ?? 'Details';
|
|
100
|
+
return `**${title}**\n\n${convertChildren(node, ctx).trimEnd()}\n\n`;
|
|
101
|
+
}
|
|
102
|
+
case 'codeBlock': {
|
|
103
|
+
const lang = node.attrs?.['language'] ?? '';
|
|
104
|
+
return `\`\`\`${lang}\n${convertChildren(node, ctx)}\n\`\`\`\n\n`;
|
|
105
|
+
}
|
|
106
|
+
case 'blockquote': {
|
|
107
|
+
return asBlockquote(node, ctx);
|
|
108
|
+
}
|
|
109
|
+
case 'rule': {
|
|
110
|
+
return '---\n\n';
|
|
111
|
+
}
|
|
112
|
+
case 'table': {
|
|
113
|
+
return convertTable(node, ctx);
|
|
114
|
+
}
|
|
115
|
+
case 'layoutSection':
|
|
116
|
+
case 'layoutColumn': {
|
|
117
|
+
return convertChildren(node, ctx);
|
|
118
|
+
}
|
|
119
|
+
case 'status': {
|
|
120
|
+
const text = node.attrs?.['text'] ?? '';
|
|
121
|
+
return text ? `\`${text}\`` : '';
|
|
122
|
+
}
|
|
123
|
+
case 'inlineCard': {
|
|
124
|
+
const url = node.attrs?.['url'];
|
|
125
|
+
return url ? `<${url}>` : '';
|
|
126
|
+
}
|
|
127
|
+
case 'mention': {
|
|
128
|
+
return node.attrs?.['text'] ?? '@unknown';
|
|
129
|
+
}
|
|
130
|
+
case 'emoji': {
|
|
131
|
+
return (node.attrs?.['text'] ??
|
|
132
|
+
node.attrs?.['shortName'] ??
|
|
133
|
+
'');
|
|
134
|
+
}
|
|
135
|
+
case 'date': {
|
|
136
|
+
return formatDate(node.attrs?.['timestamp']);
|
|
137
|
+
}
|
|
138
|
+
case 'mediaSingle':
|
|
139
|
+
case 'mediaGroup': {
|
|
140
|
+
return convertChildren(node, ctx);
|
|
141
|
+
}
|
|
142
|
+
case 'media':
|
|
143
|
+
case 'mediaInline': {
|
|
144
|
+
const alt = node.attrs?.['alt'] ??
|
|
145
|
+
node.attrs?.['id'] ??
|
|
146
|
+
'image';
|
|
147
|
+
return `[${alt}]\n\n`;
|
|
148
|
+
}
|
|
149
|
+
case 'extension':
|
|
150
|
+
case 'bodiedExtension':
|
|
151
|
+
case 'inlineExtension': {
|
|
152
|
+
const key = node.attrs?.['extensionKey'] ?? 'unknown';
|
|
153
|
+
const body = convertChildren(node, ctx).trim();
|
|
154
|
+
const marker = `_[embedded macro: ${key}]_`;
|
|
155
|
+
if (node.type === 'inlineExtension')
|
|
156
|
+
return marker;
|
|
157
|
+
return body ? `${marker}\n\n${body}\n\n` : `${marker}\n\n`;
|
|
158
|
+
}
|
|
159
|
+
default: {
|
|
160
|
+
// Unknown node type: never drop content — recurse into children so
|
|
161
|
+
// text inside future or unhandled wrappers is always preserved.
|
|
162
|
+
return convertChildren(node, ctx);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export function adfToMarkdown(node) {
|
|
167
|
+
if (!node)
|
|
168
|
+
return '';
|
|
169
|
+
return convertNode(node).trim();
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../../source/plugins/atlassian/adf/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function applyMarks(text, marks) {
|
|
2
|
+
if (!marks)
|
|
3
|
+
return text;
|
|
4
|
+
let result = text;
|
|
5
|
+
for (const mark of marks) {
|
|
6
|
+
switch (mark.type) {
|
|
7
|
+
case 'strong': {
|
|
8
|
+
result = `**${result}**`;
|
|
9
|
+
break;
|
|
10
|
+
}
|
|
11
|
+
case 'em': {
|
|
12
|
+
result = `*${result}*`;
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
case 'code': {
|
|
16
|
+
result = `\`${result}\``;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
case 'strike': {
|
|
20
|
+
result = `~~${result}~~`;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
case 'link': {
|
|
24
|
+
result = `[${result}](${mark.attrs?.['href'] ?? ''})`;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
default: {
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=marks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marks.js","sourceRoot":"","sources":["../../../../source/plugins/atlassian/adf/marks.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CACzB,IAAY,EACZ,KAA8D;IAE9D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,KAAK,MAAM,IAAI,CAAC;gBACzB,MAAM;YACP,CAAC;YAED,KAAK,IAAI,CAAC,CAAC,CAAC;gBACX,MAAM,GAAG,IAAI,MAAM,GAAG,CAAC;gBACvB,MAAM;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,KAAK,MAAM,IAAI,CAAC;gBACzB,MAAM;YACP,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACf,MAAM,GAAG,KAAK,MAAM,IAAI,CAAC;gBACzB,MAAM;YACP,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,IAAI,MAAM,KACjB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAY,IAAI,EACrC,GAAG,CAAC;gBACJ,MAAM;YACP,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACT,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AdfNode, ConvertContext } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert an ADF `table` node into a GitHub-flavoured markdown table.
|
|
4
|
+
*
|
|
5
|
+
* The first row is used as the header (whether its cells are `tableHeader` or
|
|
6
|
+
* `tableCell`), which keeps the output a valid markdown table regardless of how
|
|
7
|
+
* the source table is structured. Merged cells are expanded into empty trailing
|
|
8
|
+
* cells so columns stay aligned; all text is preserved even when layout cannot
|
|
9
|
+
* be reproduced exactly.
|
|
10
|
+
*/
|
|
11
|
+
export declare function convertTable(node: AdfNode, ctx: ConvertContext): string;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { convertNode } from './convert.js';
|
|
2
|
+
/**
|
|
3
|
+
* Render the block content of a single table cell as inline markdown.
|
|
4
|
+
*
|
|
5
|
+
* Markdown tables only support inline content on a single line, so block
|
|
6
|
+
* structure inside a cell (paragraphs, lists, line breaks) is collapsed into
|
|
7
|
+
* `<br>` separators and embedded pipes are escaped so they don't break the
|
|
8
|
+
* column layout.
|
|
9
|
+
*/
|
|
10
|
+
function renderCell(cell, ctx) {
|
|
11
|
+
const raw = (cell.content ?? [])
|
|
12
|
+
.map(child => convertNode(child, ctx))
|
|
13
|
+
.join('')
|
|
14
|
+
.trim();
|
|
15
|
+
if (!raw)
|
|
16
|
+
return '';
|
|
17
|
+
return raw
|
|
18
|
+
.replace(/\r?\n+/g, '<br>')
|
|
19
|
+
.replace(/\|/g, '\\|')
|
|
20
|
+
.replace(/\s+/g, ' ')
|
|
21
|
+
.trim();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The number of columns a cell occupies (ADF merged cells set `colspan`).
|
|
25
|
+
*/
|
|
26
|
+
function cellSpan(cell) {
|
|
27
|
+
const span = cell.attrs?.['colspan'];
|
|
28
|
+
return typeof span === 'number' && span > 0 ? span : 1;
|
|
29
|
+
}
|
|
30
|
+
function renderRow(cells, columnCount) {
|
|
31
|
+
const padded = [...cells];
|
|
32
|
+
while (padded.length < columnCount)
|
|
33
|
+
padded.push('');
|
|
34
|
+
return `| ${padded.join(' | ')} |`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Convert an ADF `table` node into a GitHub-flavoured markdown table.
|
|
38
|
+
*
|
|
39
|
+
* The first row is used as the header (whether its cells are `tableHeader` or
|
|
40
|
+
* `tableCell`), which keeps the output a valid markdown table regardless of how
|
|
41
|
+
* the source table is structured. Merged cells are expanded into empty trailing
|
|
42
|
+
* cells so columns stay aligned; all text is preserved even when layout cannot
|
|
43
|
+
* be reproduced exactly.
|
|
44
|
+
*/
|
|
45
|
+
export function convertTable(node, ctx) {
|
|
46
|
+
const rows = (node.content ?? []).filter(child => child.type === 'tableRow');
|
|
47
|
+
if (rows.length === 0)
|
|
48
|
+
return '';
|
|
49
|
+
// Render every cell up front and track how many columns each row spans.
|
|
50
|
+
const renderedRows = rows.map(row => {
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const cell of row.content ?? []) {
|
|
53
|
+
if (cell.type !== 'tableCell' && cell.type !== 'tableHeader')
|
|
54
|
+
continue;
|
|
55
|
+
out.push(renderCell(cell, ctx));
|
|
56
|
+
// Expand merged cells into empty placeholders to keep alignment.
|
|
57
|
+
for (let i = 1; i < cellSpan(cell); i++)
|
|
58
|
+
out.push('');
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
});
|
|
62
|
+
const columnCount = renderedRows.reduce((max, row) => Math.max(max, row.length), 0);
|
|
63
|
+
if (columnCount === 0)
|
|
64
|
+
return '';
|
|
65
|
+
const [headerCells, ...bodyRows] = renderedRows;
|
|
66
|
+
const lines = [];
|
|
67
|
+
lines.push(renderRow(headerCells ?? [], columnCount));
|
|
68
|
+
lines.push(`| ${Array.from({ length: columnCount }, () => '---').join(' | ')} |`);
|
|
69
|
+
for (const row of bodyRows)
|
|
70
|
+
lines.push(renderRow(row, columnCount));
|
|
71
|
+
return lines.join('\n') + '\n\n';
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../../source/plugins/atlassian/adf/tables.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAEzC;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,IAAa,EAAE,GAAmB;IACrD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;SAC9B,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACrC,IAAI,CAAC,EAAE,CAAC;SACR,IAAI,EAAE,CAAC;IAET,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,OAAO,GAAG;SACR,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACV,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAa;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,WAAmB;IACtD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,GAAG,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,GAAmB;IAC9D,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CACvC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAClC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,wEAAwE;IACxE,MAAM,YAAY,GAAe,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;gBAC3D,SAAS;YACV,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,iEAAiE;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EACvC,CAAC,CACD,CAAC;IACF,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,GAAG,YAAY,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,WAAW,EAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CACnE,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AdfNode {
|
|
2
|
+
type: string;
|
|
3
|
+
text?: string;
|
|
4
|
+
content?: AdfNode[];
|
|
5
|
+
attrs?: Record<string, unknown>;
|
|
6
|
+
marks?: Array<{
|
|
7
|
+
type: string;
|
|
8
|
+
attrs?: Record<string, unknown>;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface ConvertContext {
|
|
12
|
+
listType?: 'bullet' | 'ordered';
|
|
13
|
+
indent?: number;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../source/plugins/atlassian/adf/types.ts"],"names":[],"mappings":""}
|