@indigoai-us/hq-cloud 5.19.1 → 5.20.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/.github/workflows/ci.yml +8 -4
- package/.github/workflows/publish.yml +9 -3
- package/dist/bin/sync-runner.d.ts +9 -0
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +58 -0
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/entity-resolver.d.ts +48 -0
- package/dist/entity-resolver.d.ts.map +1 -0
- package/dist/entity-resolver.js +122 -0
- package/dist/entity-resolver.js.map +1 -0
- package/dist/entity-resolver.test.d.ts +10 -0
- package/dist/entity-resolver.test.d.ts.map +1 -0
- package/dist/entity-resolver.test.js +236 -0
- package/dist/entity-resolver.test.js.map +1 -0
- package/dist/index.d.ts +18 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/signal-types.d.ts +16 -0
- package/dist/schemas/signal-types.d.ts.map +1 -0
- package/dist/schemas/signal-types.js +30 -0
- package/dist/schemas/signal-types.js.map +1 -0
- package/dist/schemas/signal-types.test.d.ts +2 -0
- package/dist/schemas/signal-types.test.d.ts.map +1 -0
- package/dist/schemas/signal-types.test.js +65 -0
- package/dist/schemas/signal-types.test.js.map +1 -0
- package/dist/schemas/source-channels.d.ts +15 -0
- package/dist/schemas/source-channels.d.ts.map +1 -0
- package/dist/schemas/source-channels.js +28 -0
- package/dist/schemas/source-channels.js.map +1 -0
- package/dist/schemas/source-channels.test.d.ts +2 -0
- package/dist/schemas/source-channels.test.d.ts.map +1 -0
- package/dist/schemas/source-channels.test.js +65 -0
- package/dist/schemas/source-channels.test.js.map +1 -0
- package/dist/signals/get.d.ts +13 -0
- package/dist/signals/get.d.ts.map +1 -0
- package/dist/signals/get.js +74 -0
- package/dist/signals/get.js.map +1 -0
- package/dist/signals/get.test.d.ts +5 -0
- package/dist/signals/get.test.d.ts.map +1 -0
- package/dist/signals/get.test.js +170 -0
- package/dist/signals/get.test.js.map +1 -0
- package/dist/signals/internals.d.ts +16 -0
- package/dist/signals/internals.d.ts.map +1 -0
- package/dist/signals/internals.js +39 -0
- package/dist/signals/internals.js.map +1 -0
- package/dist/signals/list.d.ts +10 -0
- package/dist/signals/list.d.ts.map +1 -0
- package/dist/signals/list.js +76 -0
- package/dist/signals/list.js.map +1 -0
- package/dist/signals/list.test.d.ts +9 -0
- package/dist/signals/list.test.d.ts.map +1 -0
- package/dist/signals/list.test.js +227 -0
- package/dist/signals/list.test.js.map +1 -0
- package/dist/signals/parse.d.ts +8 -0
- package/dist/signals/parse.d.ts.map +1 -0
- package/dist/signals/parse.js +8 -0
- package/dist/signals/parse.js.map +1 -0
- package/dist/signals/types.d.ts +69 -0
- package/dist/signals/types.d.ts.map +1 -0
- package/dist/signals/types.js +10 -0
- package/dist/signals/types.js.map +1 -0
- package/dist/sources/get.d.ts +11 -0
- package/dist/sources/get.d.ts.map +1 -0
- package/dist/sources/get.js +67 -0
- package/dist/sources/get.js.map +1 -0
- package/dist/sources/get.test.d.ts +5 -0
- package/dist/sources/get.test.d.ts.map +1 -0
- package/dist/sources/get.test.js +132 -0
- package/dist/sources/get.test.js.map +1 -0
- package/dist/sources/internals.d.ts +16 -0
- package/dist/sources/internals.d.ts.map +1 -0
- package/dist/sources/internals.js +39 -0
- package/dist/sources/internals.js.map +1 -0
- package/dist/sources/list.d.ts +10 -0
- package/dist/sources/list.d.ts.map +1 -0
- package/dist/sources/list.js +76 -0
- package/dist/sources/list.js.map +1 -0
- package/dist/sources/list.test.d.ts +8 -0
- package/dist/sources/list.test.d.ts.map +1 -0
- package/dist/sources/list.test.js +198 -0
- package/dist/sources/list.test.js.map +1 -0
- package/dist/sources/parse.d.ts +18 -0
- package/dist/sources/parse.d.ts.map +1 -0
- package/dist/sources/parse.js +35 -0
- package/dist/sources/parse.js.map +1 -0
- package/dist/sources/types.d.ts +62 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +8 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/telemetry.d.ts +87 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +349 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/telemetry.test.d.ts +11 -0
- package/dist/telemetry.test.d.ts.map +1 -0
- package/dist/telemetry.test.js +309 -0
- package/dist/telemetry.test.js.map +1 -0
- package/dist/vault-client.d.ts +59 -0
- package/dist/vault-client.d.ts.map +1 -1
- package/dist/vault-client.js +37 -0
- package/dist/vault-client.js.map +1 -1
- package/package.json +5 -3
- package/src/bin/sync-runner.ts +73 -0
- package/src/entity-resolver.test.ts +307 -0
- package/src/entity-resolver.ts +173 -0
- package/src/index.ts +79 -0
- package/src/schemas/signal-types.test.ts +82 -0
- package/src/schemas/signal-types.ts +38 -0
- package/src/schemas/source-channels.test.ts +82 -0
- package/src/schemas/source-channels.ts +36 -0
- package/src/signals/get.test.ts +204 -0
- package/src/signals/get.ts +79 -0
- package/src/signals/internals.ts +46 -0
- package/src/signals/list.test.ts +283 -0
- package/src/signals/list.ts +92 -0
- package/src/signals/parse.ts +8 -0
- package/src/signals/types.ts +74 -0
- package/src/sources/get.test.ts +166 -0
- package/src/sources/get.ts +75 -0
- package/src/sources/internals.ts +46 -0
- package/src/sources/list.test.ts +247 -0
- package/src/sources/list.ts +95 -0
- package/src/sources/parse.ts +43 -0
- package/src/sources/types.ts +67 -0
- package/src/telemetry.test.ts +394 -0
- package/src/telemetry.ts +436 -0
- package/src/vault-client.ts +86 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* getSignal — fetch a single signal document from an entity bucket and
|
|
3
|
+
* return parsed frontmatter + body, with `sourceRef`, `citations`, and
|
|
4
|
+
* `entityRefs` surfaced as typed fields.
|
|
5
|
+
*/
|
|
6
|
+
import { GetObjectCommand } from "@aws-sdk/client-s3";
|
|
7
|
+
import { assertSignalType } from "../schemas/signal-types.js";
|
|
8
|
+
import { getS3Client, streamToString } from "./internals.js";
|
|
9
|
+
import { parseMarkdown } from "./parse.js";
|
|
10
|
+
export class SignalNotFoundError extends Error {
|
|
11
|
+
key;
|
|
12
|
+
name = "SignalNotFoundError";
|
|
13
|
+
constructor(key) {
|
|
14
|
+
super(`Signal not found: ${key}`);
|
|
15
|
+
this.key = key;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function isNoSuchKey(err) {
|
|
19
|
+
if (!err || typeof err !== "object")
|
|
20
|
+
return false;
|
|
21
|
+
const name = err.name;
|
|
22
|
+
// AWS SDK v3 throws either a `NoSuchKey` exception or a `NotFound` head error.
|
|
23
|
+
return name === "NoSuchKey" || name === "NoSuchKeyException";
|
|
24
|
+
}
|
|
25
|
+
function asStringArray(value) {
|
|
26
|
+
if (!Array.isArray(value))
|
|
27
|
+
return undefined;
|
|
28
|
+
const out = [];
|
|
29
|
+
for (const item of value) {
|
|
30
|
+
if (typeof item === "string")
|
|
31
|
+
out.push(item);
|
|
32
|
+
}
|
|
33
|
+
return out.length > 0 ? out : undefined;
|
|
34
|
+
}
|
|
35
|
+
export async function getSignal(opts) {
|
|
36
|
+
// Validate signalType BEFORE any S3 call (acceptance criterion + agent-mitigation).
|
|
37
|
+
assertSignalType(opts.signalType);
|
|
38
|
+
const client = getS3Client(opts.entity);
|
|
39
|
+
const key = `signals/${opts.signalType}/${opts.signalId}.md`;
|
|
40
|
+
let body;
|
|
41
|
+
try {
|
|
42
|
+
const response = await client.send(new GetObjectCommand({
|
|
43
|
+
Bucket: opts.entity.bucketName,
|
|
44
|
+
Key: key,
|
|
45
|
+
}));
|
|
46
|
+
body = await streamToString(response.Body);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (isNoSuchKey(err)) {
|
|
50
|
+
throw new SignalNotFoundError(key);
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
const parsed = parseMarkdown(body);
|
|
55
|
+
const document = {
|
|
56
|
+
key,
|
|
57
|
+
frontmatter: parsed.frontmatter,
|
|
58
|
+
body: parsed.body,
|
|
59
|
+
};
|
|
60
|
+
if (parsed.frontmatter) {
|
|
61
|
+
const sourceRef = parsed.frontmatter.source_ref;
|
|
62
|
+
if (typeof sourceRef === "string") {
|
|
63
|
+
document.sourceRef = sourceRef;
|
|
64
|
+
}
|
|
65
|
+
const citations = asStringArray(parsed.frontmatter.citations);
|
|
66
|
+
if (citations)
|
|
67
|
+
document.citations = citations;
|
|
68
|
+
const entityRefs = asStringArray(parsed.frontmatter.entity_refs);
|
|
69
|
+
if (entityRefs)
|
|
70
|
+
document.entityRefs = entityRefs;
|
|
71
|
+
}
|
|
72
|
+
return document;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/signals/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.test.d.ts","sourceRoot":"","sources":["../../src/signals/get.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for signals/get.ts.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
5
|
+
import { GetObjectCommand } from "@aws-sdk/client-s3";
|
|
6
|
+
import { getSignal, SignalNotFoundError } from "./get.js";
|
|
7
|
+
import { _setSignalsS3Factory, _resetSignalsS3Factory, } from "./internals.js";
|
|
8
|
+
import { InvalidSignalTypeError } from "../schemas/signal-types.js";
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Fixtures
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const ENTITY = {
|
|
13
|
+
uid: "cmp_test_001",
|
|
14
|
+
slug: "test",
|
|
15
|
+
bucketName: "hq-vault-test",
|
|
16
|
+
region: "us-east-1",
|
|
17
|
+
credentials: {
|
|
18
|
+
accessKeyId: "ASIATEST",
|
|
19
|
+
secretAccessKey: "secret",
|
|
20
|
+
sessionToken: "session",
|
|
21
|
+
},
|
|
22
|
+
expiresAt: new Date(Date.now() + 3600_000).toISOString(),
|
|
23
|
+
};
|
|
24
|
+
const ACTION_ITEM_MD = `---
|
|
25
|
+
signal_id: sig_action_001
|
|
26
|
+
signal_type: action_item
|
|
27
|
+
source_ref: abc-meeting-001
|
|
28
|
+
citations:
|
|
29
|
+
- "Stefan to review the sources pipeline implementation by end of week"
|
|
30
|
+
- "Corey to prepare roadmap slides"
|
|
31
|
+
entity_refs:
|
|
32
|
+
- stefan@indigoai.us
|
|
33
|
+
- corey@indigoai.us
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
Stefan will review the sources pipeline implementation.
|
|
37
|
+
|
|
38
|
+
Corey will prepare updated roadmap slides.
|
|
39
|
+
`;
|
|
40
|
+
function installStub(objects) {
|
|
41
|
+
async function send(command) {
|
|
42
|
+
if (command instanceof GetObjectCommand) {
|
|
43
|
+
const { Key } = command.input;
|
|
44
|
+
const content = objects[Key];
|
|
45
|
+
if (content === undefined) {
|
|
46
|
+
const err = new Error(`NoSuchKey: ${Key}`);
|
|
47
|
+
err.name = "NoSuchKey";
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
async function* stream() {
|
|
51
|
+
yield Buffer.from(content, "utf-8");
|
|
52
|
+
}
|
|
53
|
+
return { Body: stream(), $metadata: {} };
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`unhandled command`);
|
|
56
|
+
}
|
|
57
|
+
_setSignalsS3Factory(() => ({ send }));
|
|
58
|
+
}
|
|
59
|
+
beforeEach(() => _resetSignalsS3Factory());
|
|
60
|
+
afterEach(() => _resetSignalsS3Factory());
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Tests
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
describe("getSignal", () => {
|
|
65
|
+
it("happy path: parses frontmatter, body, and surfaces typed cross-refs", async () => {
|
|
66
|
+
installStub({ "signals/action_item/foo.md": ACTION_ITEM_MD });
|
|
67
|
+
const doc = await getSignal({
|
|
68
|
+
entity: ENTITY,
|
|
69
|
+
signalType: "action_item",
|
|
70
|
+
signalId: "foo",
|
|
71
|
+
});
|
|
72
|
+
expect(doc.key).toBe("signals/action_item/foo.md");
|
|
73
|
+
expect(doc.frontmatter).toMatchObject({
|
|
74
|
+
signal_id: "sig_action_001",
|
|
75
|
+
signal_type: "action_item",
|
|
76
|
+
source_ref: "abc-meeting-001",
|
|
77
|
+
});
|
|
78
|
+
expect(doc.body).toContain("Stefan will review");
|
|
79
|
+
expect(doc.body).toContain("Corey will prepare");
|
|
80
|
+
// Typed cross-reference fields.
|
|
81
|
+
expect(doc.sourceRef).toBe("abc-meeting-001");
|
|
82
|
+
expect(doc.citations).toEqual([
|
|
83
|
+
"Stefan to review the sources pipeline implementation by end of week",
|
|
84
|
+
"Corey to prepare roadmap slides",
|
|
85
|
+
]);
|
|
86
|
+
expect(doc.entityRefs).toEqual([
|
|
87
|
+
"stefan@indigoai.us",
|
|
88
|
+
"corey@indigoai.us",
|
|
89
|
+
]);
|
|
90
|
+
});
|
|
91
|
+
it("throws SignalNotFoundError on NoSuchKey", async () => {
|
|
92
|
+
installStub({});
|
|
93
|
+
await expect(getSignal({ entity: ENTITY, signalType: "action_item", signalId: "missing" })).rejects.toBeInstanceOf(SignalNotFoundError);
|
|
94
|
+
await expect(getSignal({ entity: ENTITY, signalType: "action_item", signalId: "missing" })).rejects.toThrow(/signals\/action_item\/missing\.md/);
|
|
95
|
+
});
|
|
96
|
+
it("rejects an invalid signalType via assertSignalType BEFORE any S3 call", async () => {
|
|
97
|
+
let called = 0;
|
|
98
|
+
_setSignalsS3Factory(() => ({
|
|
99
|
+
send: async () => {
|
|
100
|
+
called++;
|
|
101
|
+
return {};
|
|
102
|
+
},
|
|
103
|
+
}));
|
|
104
|
+
await expect(getSignal({
|
|
105
|
+
entity: ENTITY,
|
|
106
|
+
// @ts-expect-error — invalid signal type intentional
|
|
107
|
+
signalType: "ramble",
|
|
108
|
+
signalId: "foo",
|
|
109
|
+
})).rejects.toBeInstanceOf(InvalidSignalTypeError);
|
|
110
|
+
expect(called).toBe(0);
|
|
111
|
+
});
|
|
112
|
+
it("returns frontmatter:null for malformed (no frontmatter block) documents", async () => {
|
|
113
|
+
installStub({ "signals/action_item/plain.md": "Just a body, no frontmatter." });
|
|
114
|
+
const doc = await getSignal({
|
|
115
|
+
entity: ENTITY,
|
|
116
|
+
signalType: "action_item",
|
|
117
|
+
signalId: "plain",
|
|
118
|
+
});
|
|
119
|
+
expect(doc.frontmatter).toBeNull();
|
|
120
|
+
expect(doc.body).toBe("Just a body, no frontmatter.");
|
|
121
|
+
expect(doc.sourceRef).toBeUndefined();
|
|
122
|
+
expect(doc.citations).toBeUndefined();
|
|
123
|
+
expect(doc.entityRefs).toBeUndefined();
|
|
124
|
+
});
|
|
125
|
+
it("omits cross-ref fields when frontmatter is present but lacks them", async () => {
|
|
126
|
+
const SPARSE = `---
|
|
127
|
+
signal_id: sig_summary_001
|
|
128
|
+
signal_type: summary
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
A summary with no source_ref, citations, or entity_refs.
|
|
132
|
+
`;
|
|
133
|
+
installStub({ "signals/summary/sparse.md": SPARSE });
|
|
134
|
+
const doc = await getSignal({
|
|
135
|
+
entity: ENTITY,
|
|
136
|
+
signalType: "summary",
|
|
137
|
+
signalId: "sparse",
|
|
138
|
+
});
|
|
139
|
+
expect(doc.frontmatter).toMatchObject({ signal_id: "sig_summary_001" });
|
|
140
|
+
expect(doc.sourceRef).toBeUndefined();
|
|
141
|
+
expect(doc.citations).toBeUndefined();
|
|
142
|
+
expect(doc.entityRefs).toBeUndefined();
|
|
143
|
+
expect(doc.body).toContain("A summary");
|
|
144
|
+
});
|
|
145
|
+
it("filters non-string entries out of citations + entity_refs", async () => {
|
|
146
|
+
const MIXED = `---
|
|
147
|
+
signal_id: sig_test
|
|
148
|
+
signal_type: action_item
|
|
149
|
+
citations:
|
|
150
|
+
- "string one"
|
|
151
|
+
- 42
|
|
152
|
+
- "string two"
|
|
153
|
+
entity_refs:
|
|
154
|
+
- true
|
|
155
|
+
- "kept@example.com"
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
Body.
|
|
159
|
+
`;
|
|
160
|
+
installStub({ "signals/action_item/mixed.md": MIXED });
|
|
161
|
+
const doc = await getSignal({
|
|
162
|
+
entity: ENTITY,
|
|
163
|
+
signalType: "action_item",
|
|
164
|
+
signalId: "mixed",
|
|
165
|
+
});
|
|
166
|
+
expect(doc.citations).toEqual(["string one", "string two"]);
|
|
167
|
+
expect(doc.entityRefs).toEqual(["kept@example.com"]);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=get.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.test.js","sourceRoot":"","sources":["../../src/signals/get.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helpers shared between signals/list.ts and signals/get.ts.
|
|
3
|
+
*
|
|
4
|
+
* Independent S3 client factory hook (separate from sources/internals.ts)
|
|
5
|
+
* so signals tests can swap their stub without disturbing sources tests.
|
|
6
|
+
* Production code never calls the setter.
|
|
7
|
+
*/
|
|
8
|
+
import { S3Client } from "@aws-sdk/client-s3";
|
|
9
|
+
import type { EntityContext } from "../types.js";
|
|
10
|
+
export declare function getS3Client(ctx: EntityContext): S3Client;
|
|
11
|
+
/** Test hook: replace the S3 client factory. */
|
|
12
|
+
export declare function _setSignalsS3Factory(f: (ctx: EntityContext) => S3Client): void;
|
|
13
|
+
/** Test hook: restore the default S3 client factory. */
|
|
14
|
+
export declare function _resetSignalsS3Factory(): void;
|
|
15
|
+
export declare function streamToString(body: unknown): Promise<string>;
|
|
16
|
+
//# sourceMappingURL=internals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internals.d.ts","sourceRoot":"","sources":["../../src/signals/internals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAejD,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,QAAQ,CAExD;AAED,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,QAAQ,GAAG,IAAI,CAE9E;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helpers shared between signals/list.ts and signals/get.ts.
|
|
3
|
+
*
|
|
4
|
+
* Independent S3 client factory hook (separate from sources/internals.ts)
|
|
5
|
+
* so signals tests can swap their stub without disturbing sources tests.
|
|
6
|
+
* Production code never calls the setter.
|
|
7
|
+
*/
|
|
8
|
+
import { S3Client } from "@aws-sdk/client-s3";
|
|
9
|
+
function defaultFactory(ctx) {
|
|
10
|
+
return new S3Client({
|
|
11
|
+
region: ctx.region,
|
|
12
|
+
credentials: {
|
|
13
|
+
accessKeyId: ctx.credentials.accessKeyId,
|
|
14
|
+
secretAccessKey: ctx.credentials.secretAccessKey,
|
|
15
|
+
sessionToken: ctx.credentials.sessionToken,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
let factory = defaultFactory;
|
|
20
|
+
export function getS3Client(ctx) {
|
|
21
|
+
return factory(ctx);
|
|
22
|
+
}
|
|
23
|
+
/** Test hook: replace the S3 client factory. */
|
|
24
|
+
export function _setSignalsS3Factory(f) {
|
|
25
|
+
factory = f;
|
|
26
|
+
}
|
|
27
|
+
/** Test hook: restore the default S3 client factory. */
|
|
28
|
+
export function _resetSignalsS3Factory() {
|
|
29
|
+
factory = defaultFactory;
|
|
30
|
+
}
|
|
31
|
+
export async function streamToString(body) {
|
|
32
|
+
const stream = body;
|
|
33
|
+
const chunks = [];
|
|
34
|
+
for await (const chunk of stream) {
|
|
35
|
+
chunks.push(Buffer.from(chunk));
|
|
36
|
+
}
|
|
37
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=internals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internals.js","sourceRoot":"","sources":["../../src/signals/internals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,SAAS,cAAc,CAAC,GAAkB;IACxC,OAAO,IAAI,QAAQ,CAAC;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE;YACX,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW;YACxC,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,eAAe;YAChD,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,YAAY;SAC3C;KACF,CAAC,CAAC;AACL,CAAC;AAED,IAAI,OAAO,GAAqC,cAAc,CAAC;AAE/D,MAAM,UAAU,WAAW,CAAC,GAAkB;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,oBAAoB,CAAC,CAAmC;IACtE,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,sBAAsB;IACpC,OAAO,GAAG,cAAc,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAa;IAChD,MAAM,MAAM,GAAG,IAAiC,CAAC;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* listSignals — page through `signals/{signalType}/` keys in an entity bucket
|
|
3
|
+
* and return typed summaries.
|
|
4
|
+
*
|
|
5
|
+
* `sourceRef` is surfaced on each summary when the caller passes
|
|
6
|
+
* `includeFrontmatter: true` (otherwise the field is undefined).
|
|
7
|
+
*/
|
|
8
|
+
import type { ListSignalsOptions, ListSignalsResult } from "./types.js";
|
|
9
|
+
export declare function listSignals(opts: ListSignalsOptions): Promise<ListSignalsResult>;
|
|
10
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/signals/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAapB,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2DtF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* listSignals — page through `signals/{signalType}/` keys in an entity bucket
|
|
3
|
+
* and return typed summaries.
|
|
4
|
+
*
|
|
5
|
+
* `sourceRef` is surfaced on each summary when the caller passes
|
|
6
|
+
* `includeFrontmatter: true` (otherwise the field is undefined).
|
|
7
|
+
*/
|
|
8
|
+
import { GetObjectCommand, ListObjectsV2Command, } from "@aws-sdk/client-s3";
|
|
9
|
+
import { assertSignalType } from "../schemas/signal-types.js";
|
|
10
|
+
import { getS3Client, streamToString } from "./internals.js";
|
|
11
|
+
import { parseFrontmatter } from "./parse.js";
|
|
12
|
+
/**
|
|
13
|
+
* Strip the `signals/{signalType}/` prefix and `.md` suffix from a key.
|
|
14
|
+
* Returns `null` if the key shape isn't recognised.
|
|
15
|
+
*/
|
|
16
|
+
function deriveSignalId(key, prefix) {
|
|
17
|
+
if (!key.startsWith(prefix))
|
|
18
|
+
return null;
|
|
19
|
+
const tail = key.slice(prefix.length);
|
|
20
|
+
if (!tail.endsWith(".md"))
|
|
21
|
+
return null;
|
|
22
|
+
return tail.slice(0, -".md".length);
|
|
23
|
+
}
|
|
24
|
+
export async function listSignals(opts) {
|
|
25
|
+
// Validate signalType BEFORE any S3 call (acceptance criterion + agent-mitigation).
|
|
26
|
+
assertSignalType(opts.signalType);
|
|
27
|
+
const client = getS3Client(opts.entity);
|
|
28
|
+
const prefix = `signals/${opts.signalType}/`;
|
|
29
|
+
const response = await client.send(new ListObjectsV2Command({
|
|
30
|
+
Bucket: opts.entity.bucketName,
|
|
31
|
+
Prefix: prefix,
|
|
32
|
+
MaxKeys: opts.limit,
|
|
33
|
+
ContinuationToken: opts.continuationToken,
|
|
34
|
+
}));
|
|
35
|
+
const entries = [];
|
|
36
|
+
for (const obj of response.Contents ?? []) {
|
|
37
|
+
if (!obj.Key)
|
|
38
|
+
continue;
|
|
39
|
+
const signalId = deriveSignalId(obj.Key, prefix);
|
|
40
|
+
if (!signalId)
|
|
41
|
+
continue;
|
|
42
|
+
const summary = {
|
|
43
|
+
signalId,
|
|
44
|
+
signalType: opts.signalType,
|
|
45
|
+
key: obj.Key,
|
|
46
|
+
lastModified: obj.LastModified ?? new Date(0),
|
|
47
|
+
size: obj.Size ?? 0,
|
|
48
|
+
};
|
|
49
|
+
if (opts.includeFrontmatter) {
|
|
50
|
+
try {
|
|
51
|
+
const get = await client.send(new GetObjectCommand({
|
|
52
|
+
Bucket: opts.entity.bucketName,
|
|
53
|
+
Key: obj.Key,
|
|
54
|
+
}));
|
|
55
|
+
const text = await streamToString(get.Body);
|
|
56
|
+
const fm = parseFrontmatter(text);
|
|
57
|
+
if (fm) {
|
|
58
|
+
summary.frontmatter = fm;
|
|
59
|
+
const sourceRef = fm.source_ref;
|
|
60
|
+
if (typeof sourceRef === "string") {
|
|
61
|
+
summary.sourceRef = sourceRef;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Frontmatter fetch is best-effort; leave undefined on failure.
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
entries.push(summary);
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
entries,
|
|
73
|
+
nextToken: response.IsTruncated ? response.NextContinuationToken : undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/signals/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAO9C;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,MAAc;IACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAwB;IACxD,oFAAoF;IACpF,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,WAAW,IAAI,CAAC,UAAU,GAAG,CAAC;IAE7C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,oBAAoB,CAAC;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,SAAS;QACvB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,OAAO,GAAkB;YAC7B,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;YAC7C,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;SACpB,CAAC;QAEF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,IAAI,gBAAgB,CAAC;oBACnB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAC9B,GAAG,EAAE,GAAG,CAAC,GAAG;iBACb,CAAC,CACH,CAAC;gBACF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,EAAE,EAAE,CAAC;oBACP,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC;oBAChC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAClC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gEAAgE;YAClE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,OAAO;QACP,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../src/signals/list.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|