@aligndottech/cli 0.1.3 → 0.1.4
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 +151 -54
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +108 -0
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/local.d.ts +3 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +71 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +4 -54
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +32 -11
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +556 -198
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +46 -4
- package/dist/commands/why.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts +3 -0
- package/dist/lib/advisory-dedup.d.ts.map +1 -0
- package/dist/lib/advisory-dedup.js +44 -0
- package/dist/lib/advisory-dedup.js.map +1 -0
- package/dist/lib/agent-rules.d.ts +10 -0
- package/dist/lib/agent-rules.d.ts.map +1 -0
- package/dist/lib/agent-rules.js +137 -0
- package/dist/lib/agent-rules.js.map +1 -0
- package/dist/lib/config.d.ts +4 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js +56 -10
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +2 -0
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +2 -0
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js +16 -12
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js +6 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js +29 -0
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js +26 -0
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js +3 -0
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js +5 -0
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/format-date.d.ts +7 -0
- package/dist/lib/format-date.d.ts.map +1 -0
- package/dist/lib/format-date.js +26 -0
- package/dist/lib/format-date.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +16 -2
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +28 -3
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/hook-payload.d.ts +20 -0
- package/dist/lib/hook-payload.d.ts.map +1 -0
- package/dist/lib/hook-payload.js +30 -0
- package/dist/lib/hook-payload.js.map +1 -0
- package/dist/lib/local-db.d.ts +51 -0
- package/dist/lib/local-db.d.ts.map +1 -0
- package/dist/lib/local-db.js +89 -0
- package/dist/lib/local-db.js.map +1 -0
- package/dist/lib/local-embeddings.d.ts +3 -0
- package/dist/lib/local-embeddings.d.ts.map +1 -0
- package/dist/lib/local-embeddings.js +20 -0
- package/dist/lib/local-embeddings.js.map +1 -0
- package/dist/lib/local-gateway-client.d.ts +98 -0
- package/dist/lib/local-gateway-client.d.ts.map +1 -0
- package/dist/lib/local-gateway-client.js +151 -0
- package/dist/lib/local-gateway-client.js.map +1 -0
- package/dist/lib/local-mode.d.ts +7 -0
- package/dist/lib/local-mode.d.ts.map +1 -0
- package/dist/lib/local-mode.js +39 -0
- package/dist/lib/local-mode.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +14 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -0
- package/dist/lib/local-relationship-classifier.js +100 -0
- package/dist/lib/local-relationship-classifier.js.map +1 -0
- package/dist/lib/login-flow.d.ts +5 -0
- package/dist/lib/login-flow.d.ts.map +1 -0
- package/dist/lib/login-flow.js +64 -0
- package/dist/lib/login-flow.js.map +1 -0
- package/dist/lib/personal-import.d.ts +4 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +133 -27
- package/dist/lib/personal-import.js.map +1 -1
- package/package.json +26 -15
- package/dist/lib/why-normalise.d.ts +0 -2
- package/dist/lib/why-normalise.d.ts.map +0 -1
- package/dist/lib/why-normalise.js +0 -39
- package/dist/lib/why-normalise.js.map +0 -1
|
@@ -2,6 +2,33 @@ import { AuthExpiredError } from '../errors.js';
|
|
|
2
2
|
function stripHtml(html) {
|
|
3
3
|
return html.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
|
|
4
4
|
}
|
|
5
|
+
/** Resolve a Confluence accountId to a display name (cached). Degrades to undefined
|
|
6
|
+
* if the token lacks read:confluence-user or the lookup fails. */
|
|
7
|
+
function makeConfluenceUserResolver(base, headers) {
|
|
8
|
+
const cache = new Map();
|
|
9
|
+
return async (accountId) => {
|
|
10
|
+
if (!accountId)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (cache.has(accountId))
|
|
13
|
+
return cache.get(accountId) ?? undefined;
|
|
14
|
+
try {
|
|
15
|
+
const res = await fetch(`${base}/rest/api/user?accountId=${encodeURIComponent(accountId)}`, { headers });
|
|
16
|
+
if (!res.ok) {
|
|
17
|
+
cache.set(accountId, null);
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const u = (await res.json());
|
|
21
|
+
const name = u.displayName || u.publicName;
|
|
22
|
+
const resolved = name ? { name, ...(u.email ? { email: u.email } : {}) } : null;
|
|
23
|
+
cache.set(accountId, resolved);
|
|
24
|
+
return resolved ?? undefined;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
cache.set(accountId, null);
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
5
32
|
export async function fetchConfluenceItems(opts) {
|
|
6
33
|
const isOAuth = Boolean(opts.cloudId);
|
|
7
34
|
const base = isOAuth
|
|
@@ -11,27 +38,46 @@ export async function fetchConfluenceItems(opts) {
|
|
|
11
38
|
? { Authorization: `Bearer ${opts.token}`, Accept: 'application/json' }
|
|
12
39
|
: { Authorization: `Basic ${Buffer.from(`${opts.email}:${opts.token}`).toString('base64')}`, Accept: 'application/json' };
|
|
13
40
|
const limit = opts.limit ?? 50;
|
|
14
|
-
|
|
15
|
-
|
|
41
|
+
// Confluence API v2. The classic v1 (/rest/api/content/search) rejects tokens
|
|
42
|
+
// granted only the granular *:confluence OAuth scopes with 401 "scope does not
|
|
43
|
+
// match"; v2 works with them. v2 has no creator=currentUser() filter, so this
|
|
44
|
+
// imports the pages the token can read (fine for a read-only personal import).
|
|
45
|
+
const url = `${base}/api/v2/pages?limit=${limit}&body-format=storage`;
|
|
16
46
|
const res = await fetch(url, { headers });
|
|
17
47
|
if (!res.ok) {
|
|
18
|
-
|
|
48
|
+
// 401 = token genuinely expired/revoked -> re-auth helps. 403 = the token
|
|
49
|
+
// lacks Confluence scopes or this site has no Confluence -> re-auth will NOT
|
|
50
|
+
// help, so don't raise AuthExpiredError (which triggers a reconnect loop).
|
|
51
|
+
if (res.status === 401)
|
|
19
52
|
throw new AuthExpiredError('Confluence');
|
|
53
|
+
if (res.status === 403) {
|
|
54
|
+
throw new Error('Confluence access denied (403): the token lacks Confluence scopes or this site has no Confluence. ' +
|
|
55
|
+
"Re-auth won't help - check the Atlassian app's Confluence API permissions (or skip Confluence).");
|
|
56
|
+
}
|
|
20
57
|
throw new Error(`Confluence API failed (${res.status}). ${isOAuth ? 'Check your OAuth token.' : 'Check your email, token, and domain.'}`);
|
|
21
58
|
}
|
|
22
59
|
const data = await res.json();
|
|
23
|
-
|
|
60
|
+
// v2 page _links.webui is relative; prefer the response's top-level base
|
|
61
|
+
// (e.g. https://company.atlassian.net/wiki), else derive a human site URL.
|
|
62
|
+
const humanBase = isOAuth ? (opts.siteBase ?? `https://api.atlassian.com/ex/confluence/${opts.cloudId}`) : `https://${opts.domain}`;
|
|
63
|
+
const linkBase = data._links?.base ?? `${humanBase}/wiki`;
|
|
64
|
+
const resolveUser = makeConfluenceUserResolver(base, headers);
|
|
65
|
+
const items = [];
|
|
66
|
+
for (const page of data.results ?? []) {
|
|
24
67
|
const bodyHtml = page.body?.storage?.value ?? '';
|
|
25
68
|
const bodyText = stripHtml(bodyHtml).slice(0, 2000);
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
69
|
+
const webui = page._links?.webui ?? '';
|
|
70
|
+
const pageUrl = webui.startsWith('http') ? webui : `${linkBase}${webui}`;
|
|
71
|
+
// Who to talk to (ALI-119): the page author (resolved from authorId).
|
|
72
|
+
const author = await resolveUser(page.authorId);
|
|
73
|
+
items.push({
|
|
30
74
|
source_url: pageUrl,
|
|
31
75
|
platform: 'confluence',
|
|
32
76
|
raw_text: [page.title, bodyText].filter(Boolean).join('\n\n'),
|
|
33
77
|
title: page.title,
|
|
34
|
-
|
|
35
|
-
|
|
78
|
+
...(author ? { author } : {}),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return items;
|
|
36
82
|
}
|
|
37
83
|
//# sourceMappingURL=confluence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnE,CAAC;
|
|
1
|
+
{"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAc1F"}
|
package/dist/lib/fetchers/git.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAc;YACxB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAc;YACxB,QAAQ,EAAE,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,+CAA+C;YAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqDhC"}
|
|
@@ -20,6 +20,7 @@ export async function fetchGitHubItems(opts) {
|
|
|
20
20
|
platform: 'github',
|
|
21
21
|
raw_text: `${pr.title}\n\n${pr.body ?? ''}\n\nStatus: ${pr.state}\nRepo: ${repo}`.trim(),
|
|
22
22
|
title: pr.title,
|
|
23
|
+
...(pr.user ? { author: { name: pr.user.login, handle: pr.user.login, url: pr.user.html_url } } : {}),
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -34,6 +35,7 @@ export async function fetchGitHubItems(opts) {
|
|
|
34
35
|
platform: 'github',
|
|
35
36
|
raw_text: `${issue.title}\n\n${issue.body ?? ''}\n\nStatus: ${issue.state}`.trim(),
|
|
36
37
|
title: issue.title,
|
|
38
|
+
...(issue.user ? { author: { name: issue.user.login, handle: issue.user.login, url: issue.user.html_url } } : {}),
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAGtC;IACC,MAAM,OAAO,GAAG;QACd,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;QACrC,MAAM,EAAE,6BAA6B;QACrC,sBAAsB,EAAE,YAAY;KACrC,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,MAAM,uCAAuC,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAuB,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,KAAK,GAAyB,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,KAAK,CACvB,iDAAiD,IAAI,CAAC,KAAK,4CAA4C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAC5H,EAAE,OAAO,EAAE,CACZ,CAAC;IACF,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/fetchers/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAsBhE,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAsDhC"}
|
|
@@ -17,11 +17,20 @@ export async function fetchJiraItems(opts) {
|
|
|
17
17
|
: { Authorization: `Basic ${Buffer.from(`${opts.email}:${opts.token}`).toString('base64')}`, Accept: 'application/json' };
|
|
18
18
|
const limit = opts.limit ?? 100;
|
|
19
19
|
const jql = 'assignee = currentUser() OR reporter = currentUser() ORDER BY updated DESC';
|
|
20
|
-
const
|
|
21
|
-
|
|
20
|
+
const res = await fetch(`${base}/rest/api/3/search/jql`, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: { ...headers, 'Content-Type': 'application/json' },
|
|
23
|
+
body: JSON.stringify({ jql, maxResults: limit, fields: ['summary', 'description', 'status', 'key', 'reporter'] }),
|
|
24
|
+
});
|
|
22
25
|
if (!res.ok) {
|
|
23
|
-
|
|
26
|
+
// 401 = expired/revoked (re-auth helps). 403 = lacks Jira scopes / no access
|
|
27
|
+
// (re-auth won't help) - don't trigger a reconnect loop.
|
|
28
|
+
if (res.status === 401)
|
|
24
29
|
throw new AuthExpiredError('Jira');
|
|
30
|
+
if (res.status === 403) {
|
|
31
|
+
throw new Error("Jira access denied (403): the token lacks Jira scopes or access. Re-auth won't help - " +
|
|
32
|
+
"check the Atlassian app's Jira API permissions.");
|
|
33
|
+
}
|
|
25
34
|
const text = await res.text();
|
|
26
35
|
throw new Error(`Jira API failed (${res.status}): ${text.slice(0, 200)}`);
|
|
27
36
|
}
|
|
@@ -31,14 +40,6 @@ export async function fetchJiraItems(opts) {
|
|
|
31
40
|
? (opts.siteBase ?? `https://api.atlassian.com/ex/jira/${opts.cloudId}`)
|
|
32
41
|
: base;
|
|
33
42
|
return data.issues.map(issue => {
|
|
34
|
-
const comments = (issue.fields.comment?.comments ?? [])
|
|
35
|
-
.slice(-3)
|
|
36
|
-
.map(c => {
|
|
37
|
-
const text = extractAdfText(c.body);
|
|
38
|
-
return `${c.author?.displayName ?? 'Unknown'}: ${text}`;
|
|
39
|
-
})
|
|
40
|
-
.filter(c => c.trim().length > 0)
|
|
41
|
-
.join('\n');
|
|
42
43
|
const desc = extractAdfText(issue.fields.description);
|
|
43
44
|
return {
|
|
44
45
|
source_url: `${browseBase}/browse/${issue.key}`,
|
|
@@ -47,9 +48,12 @@ export async function fetchJiraItems(opts) {
|
|
|
47
48
|
`[${issue.key}] ${issue.fields.summary}`,
|
|
48
49
|
desc,
|
|
49
50
|
issue.fields.status?.name ? `Status: ${issue.fields.status.name}` : '',
|
|
50
|
-
comments ? `Comments:\n${comments}` : '',
|
|
51
51
|
].filter(Boolean).join('\n\n'),
|
|
52
52
|
title: `[${issue.key}] ${issue.fields.summary}`,
|
|
53
|
+
// Who to talk to (ALI-118): the issue reporter.
|
|
54
|
+
...(issue.fields.reporter?.displayName
|
|
55
|
+
? { author: { name: issue.fields.reporter.displayName, ...(issue.fields.reporter.emailAddress ? { email: issue.fields.reporter.emailAddress } : {}) } }
|
|
56
|
+
: {}),
|
|
53
57
|
};
|
|
54
58
|
});
|
|
55
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jira.js","sourceRoot":"","sources":["../../../src/lib/fetchers/jira.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAiChE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2ChC"}
|
|
@@ -7,11 +7,12 @@ query PersonalIssues($first: Int!) {
|
|
|
7
7
|
id title description url
|
|
8
8
|
state { name }
|
|
9
9
|
team { name }
|
|
10
|
+
creator { name email }
|
|
10
11
|
comments { nodes { body user { name } } }
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
createdIssues(first: $first, orderBy: updatedAt) {
|
|
14
|
-
nodes { id title description url state { name } team { name } }
|
|
15
|
+
nodes { id title description url state { name } team { name } creator { name email } }
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
}`;
|
|
@@ -51,6 +52,10 @@ export async function fetchLinearItems(opts) {
|
|
|
51
52
|
comments ? `Comments:\n${comments}` : '',
|
|
52
53
|
].filter(Boolean).join('\n\n'),
|
|
53
54
|
title: issue.title,
|
|
55
|
+
// Who to talk to (ALI-118): the issue creator.
|
|
56
|
+
...(issue.creator?.name
|
|
57
|
+
? { author: { name: issue.creator.name, ...(issue.creator.email ? { email: issue.creator.email } : {}) } }
|
|
58
|
+
: {}),
|
|
54
59
|
});
|
|
55
60
|
}
|
|
56
61
|
return items.slice(0, limit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/lib/fetchers/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAmDhE,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA2ChC"}
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/** Resolve a Notion user id to a name (cached). Degrades to undefined on failure. */
|
|
2
|
+
function makeNotionUserResolver(headers) {
|
|
3
|
+
const cache = new Map();
|
|
4
|
+
return async (userId) => {
|
|
5
|
+
if (!userId)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (cache.has(userId))
|
|
8
|
+
return cache.get(userId) ?? undefined;
|
|
9
|
+
try {
|
|
10
|
+
const res = await fetch(`https://api.notion.com/v1/users/${userId}`, { headers });
|
|
11
|
+
if (!res.ok) {
|
|
12
|
+
cache.set(userId, null);
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const u = (await res.json());
|
|
16
|
+
const resolved = u.name ? { name: u.name, ...(u.person?.email ? { email: u.person.email } : {}) } : null;
|
|
17
|
+
cache.set(userId, resolved);
|
|
18
|
+
return resolved ?? undefined;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
cache.set(userId, null);
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
1
26
|
function extractPageTitle(page) {
|
|
2
27
|
return (page.properties?.title?.title?.[0]?.plain_text ??
|
|
3
28
|
page.properties?.Name?.title?.[0]?.plain_text ??
|
|
@@ -22,10 +47,13 @@ export async function fetchNotionItems(opts) {
|
|
|
22
47
|
if (!searchRes.ok)
|
|
23
48
|
throw new Error(`Notion API failed (${searchRes.status}). Check your integration token.`);
|
|
24
49
|
const data = await searchRes.json();
|
|
50
|
+
const resolveUser = makeNotionUserResolver(headers);
|
|
25
51
|
const items = [];
|
|
26
52
|
for (const page of data.results) {
|
|
27
53
|
const title = extractPageTitle(page);
|
|
28
54
|
const pageUrl = page.url ?? `https://notion.so/${page.id.replace(/-/g, '')}`;
|
|
55
|
+
// Who to talk to (ALI-119): the page creator.
|
|
56
|
+
const author = await resolveUser(page.created_by?.id);
|
|
29
57
|
let bodyText = '';
|
|
30
58
|
try {
|
|
31
59
|
const blocksRes = await fetch(`https://api.notion.com/v1/blocks/${page.id}/children?page_size=50`, { headers });
|
|
@@ -40,6 +68,7 @@ export async function fetchNotionItems(opts) {
|
|
|
40
68
|
platform: 'notion',
|
|
41
69
|
raw_text: [title, bodyText].filter(Boolean).join('\n\n').slice(0, 3000),
|
|
42
70
|
title,
|
|
71
|
+
...(author ? { author } : {}),
|
|
43
72
|
});
|
|
44
73
|
}
|
|
45
74
|
return items;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/lib/fetchers/notion.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA4ChE,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAuDhC"}
|
|
@@ -8,6 +8,28 @@ async function slackGet(endpoint, token, params = {}) {
|
|
|
8
8
|
throw new Error(`Slack API error on ${endpoint}: ${data.error}`);
|
|
9
9
|
return data;
|
|
10
10
|
}
|
|
11
|
+
/** Resolve a Slack user id to a display name (cached - one users.info call per unique user). */
|
|
12
|
+
function makeUserResolver(token) {
|
|
13
|
+
const cache = new Map();
|
|
14
|
+
return async (userId) => {
|
|
15
|
+
if (!userId)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (cache.has(userId))
|
|
18
|
+
return cache.get(userId) ?? undefined;
|
|
19
|
+
try {
|
|
20
|
+
const data = await slackGet('users.info', token, { user: userId });
|
|
21
|
+
const u = (data.user ?? {});
|
|
22
|
+
const name = u.profile?.real_name || u.real_name || u.profile?.display_name || u.name || userId;
|
|
23
|
+
const resolved = { name, ...(u.name ? { handle: u.name } : {}), ...(u.profile?.email ? { email: u.profile.email } : {}) };
|
|
24
|
+
cache.set(userId, resolved);
|
|
25
|
+
return resolved;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
cache.set(userId, null); // don't retry a failed lookup
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
11
33
|
export async function fetchSlackItems(opts) {
|
|
12
34
|
const limit = opts.limit ?? 50;
|
|
13
35
|
const daysBack = opts.daysBack ?? 90;
|
|
@@ -19,6 +41,7 @@ export async function fetchSlackItems(opts) {
|
|
|
19
41
|
limit: '100',
|
|
20
42
|
});
|
|
21
43
|
const channels = chanData.channels ?? [];
|
|
44
|
+
const resolveUser = makeUserResolver(opts.token);
|
|
22
45
|
const items = [];
|
|
23
46
|
for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {
|
|
24
47
|
const channel = channels[channelIndex];
|
|
@@ -45,11 +68,14 @@ export async function fetchSlackItems(opts) {
|
|
|
45
68
|
});
|
|
46
69
|
const allMsgs = replies.messages ?? [];
|
|
47
70
|
const text = allMsgs.map(m => m.text ?? '').join('\n');
|
|
71
|
+
// Who to talk to (ALI-118): the thread starter (original poster).
|
|
72
|
+
const author = await resolveUser(allMsgs[0]?.user ?? thread.user);
|
|
48
73
|
items.push({
|
|
49
74
|
source_url: `https://slack.com/archives/${channel.id}/p${thread.ts.replace('.', '')}`,
|
|
50
75
|
platform: 'slack',
|
|
51
76
|
raw_text: `[#${channel.name}] Thread:\n${text}`,
|
|
52
77
|
title: (thread.text ?? `Thread in #${channel.name}`).slice(0, 80),
|
|
78
|
+
...(author ? { author } : {}),
|
|
53
79
|
});
|
|
54
80
|
}
|
|
55
81
|
catch { /* skip individual thread errors */ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,QAAQ,CAAC,QAAgB,EAAE,KAAa,EAAE,SAAiC,EAAE;IAC1F,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,yBAAyB,QAAQ,IAAI,EAAE,EAAE,EAAE;QACjE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,KAAK,IAAI,CAAC,KAAe,EAAE,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/lib/fetchers/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA0ChE,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0ChC"}
|
|
@@ -46,11 +46,14 @@ export async function fetchTeamsItems(opts) {
|
|
|
46
46
|
mainText,
|
|
47
47
|
...replyTexts,
|
|
48
48
|
].filter(Boolean).join('\n');
|
|
49
|
+
const fromName = msg.from?.user?.displayName;
|
|
49
50
|
items.push({
|
|
50
51
|
source_url: msg.webUrl ?? 'https://teams.microsoft.com',
|
|
51
52
|
platform: 'teams',
|
|
52
53
|
raw_text,
|
|
53
54
|
title: (msg.subject ?? mainText).slice(0, 80) || `Message in ${team.displayName}`,
|
|
55
|
+
// Who to talk to (ALI-118): the message author.
|
|
56
|
+
...(fromName ? { author: { name: fromName } } : {}),
|
|
54
57
|
});
|
|
55
58
|
}
|
|
56
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"AAEA,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnE,CAAC;
|
|
1
|
+
{"version":3,"file":"teams.js","sourceRoot":"","sources":["../../../src/lib/fetchers/teams.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA+ChE,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwChC"}
|
|
@@ -46,11 +46,16 @@ export async function fetchZoomItems(opts) {
|
|
|
46
46
|
if (!transcript)
|
|
47
47
|
continue;
|
|
48
48
|
const date = meeting.start_time.slice(0, 10);
|
|
49
|
+
// Who to talk to (ALI-119): the meeting host.
|
|
50
|
+
const host = meeting.host_email
|
|
51
|
+
? { name: meeting.host_email.split('@')[0], email: meeting.host_email }
|
|
52
|
+
: undefined;
|
|
49
53
|
items.push({
|
|
50
54
|
source_url: `https://zoom.us/recording/${encodeMeetingUuid(meeting.uuid)}`,
|
|
51
55
|
platform: 'zoom',
|
|
52
56
|
raw_text: `[${meeting.topic} - ${date}]\n${transcript}`.slice(0, 4000),
|
|
53
57
|
title: `${meeting.topic} (${date})`.slice(0, 80),
|
|
58
|
+
...(host ? { author: host } : {}),
|
|
54
59
|
});
|
|
55
60
|
}
|
|
56
61
|
catch { /* skip recordings with inaccessible transcripts */ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/lib/fetchers/zoom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-friendly timestamps for CLI output (ALI-118): relative for recent
|
|
3
|
+
* decisions ("today", "3 days ago") so recency is obvious at a glance, absolute
|
|
4
|
+
* ("30 May 2026") once it's older. `now` is injectable for deterministic tests.
|
|
5
|
+
*/
|
|
6
|
+
export declare function formatWhen(iso?: string | null, now?: number): string;
|
|
7
|
+
//# sourceMappingURL=format-date.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.d.ts","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAehF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-friendly timestamps for CLI output (ALI-118): relative for recent
|
|
3
|
+
* decisions ("today", "3 days ago") so recency is obvious at a glance, absolute
|
|
4
|
+
* ("30 May 2026") once it's older. `now` is injectable for deterministic tests.
|
|
5
|
+
*/
|
|
6
|
+
export function formatWhen(iso, now = Date.now()) {
|
|
7
|
+
if (!iso)
|
|
8
|
+
return '';
|
|
9
|
+
const d = new Date(iso);
|
|
10
|
+
const t = d.getTime();
|
|
11
|
+
if (Number.isNaN(t))
|
|
12
|
+
return '';
|
|
13
|
+
const abs = d.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); // "30 May 2026"
|
|
14
|
+
const diffMs = now - t;
|
|
15
|
+
if (diffMs < 0)
|
|
16
|
+
return abs; // future-dated: just show the date
|
|
17
|
+
const days = Math.floor(diffMs / 86_400_000);
|
|
18
|
+
if (days === 0)
|
|
19
|
+
return 'today';
|
|
20
|
+
if (days === 1)
|
|
21
|
+
return 'yesterday';
|
|
22
|
+
if (days < 30)
|
|
23
|
+
return `${days} days ago`;
|
|
24
|
+
return abs;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=format-date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/lib/format-date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACtE,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,GAAG,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,gBAAgB;IAChH,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,mCAAmC;IAE/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACnC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,WAAW,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -31,6 +31,8 @@ export interface SearchResults {
|
|
|
31
31
|
summary: string;
|
|
32
32
|
status: string;
|
|
33
33
|
similarity?: number;
|
|
34
|
+
author?: DecisionAuthor | null;
|
|
35
|
+
created_at?: string;
|
|
34
36
|
}>;
|
|
35
37
|
count: number;
|
|
36
38
|
strategy: 'semantic' | 'keyword';
|
|
@@ -120,11 +122,19 @@ export interface DriftItem {
|
|
|
120
122
|
drift_summary: string;
|
|
121
123
|
checked_at: string;
|
|
122
124
|
}
|
|
125
|
+
/** The human behind a decision - "who to talk to" (ALI-118). */
|
|
126
|
+
export interface DecisionAuthor {
|
|
127
|
+
name: string;
|
|
128
|
+
handle?: string;
|
|
129
|
+
email?: string;
|
|
130
|
+
url?: string;
|
|
131
|
+
}
|
|
123
132
|
export interface BatchIngestItem {
|
|
124
133
|
source_url: string;
|
|
125
134
|
platform: string;
|
|
126
135
|
raw_text: string;
|
|
127
136
|
title?: string;
|
|
137
|
+
author?: DecisionAuthor;
|
|
128
138
|
}
|
|
129
139
|
export interface BatchIngestResult {
|
|
130
140
|
snapshots: Array<{
|
|
@@ -145,7 +155,7 @@ export declare class GatewayError extends Error {
|
|
|
145
155
|
readonly statusCode: number;
|
|
146
156
|
constructor(message: string, statusCode: number);
|
|
147
157
|
}
|
|
148
|
-
|
|
158
|
+
declare function buildHttpGatewayClient(env: EnvironmentConfig): {
|
|
149
159
|
whoami(): Promise<WhoAmI>;
|
|
150
160
|
listConnectors(): Promise<ConnectorInfo[]>;
|
|
151
161
|
getConnectorHealth(key: string): Promise<ConnectorHealth>;
|
|
@@ -213,7 +223,11 @@ export declare function createGatewayClient(env: EnvironmentConfig): {
|
|
|
213
223
|
decision_id?: string;
|
|
214
224
|
}): Promise<DecisionLink[]>;
|
|
215
225
|
getDriftSummary(): Promise<DriftItem[]>;
|
|
216
|
-
ingestBatch(items: BatchIngestItem[]
|
|
226
|
+
ingestBatch(items: BatchIngestItem[], opts?: {
|
|
227
|
+
deferEnrichment?: boolean;
|
|
228
|
+
}): Promise<BatchIngestResult>;
|
|
217
229
|
getStreamUrl(jobId: string): string;
|
|
218
230
|
};
|
|
231
|
+
export declare function createGatewayClient(env: EnvironmentConfig): ReturnType<typeof buildHttpGatewayClient>;
|
|
232
|
+
export {};
|
|
219
233
|
//# sourceMappingURL=gateway-client.d.ts.map
|