@cargo-ai/cdk 1.0.6 → 1.0.7
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 +4 -1
- package/build/src/cli/commands/from.d.ts +65 -0
- package/build/src/cli/commands/from.d.ts.map +1 -0
- package/build/src/cli/commands/from.js +275 -0
- package/build/src/cli/commands/init.d.ts +1 -1
- package/build/src/cli/commands/init.d.ts.map +1 -1
- package/build/src/cli/commands/init.js +32 -13
- package/build/src/cli/commands/types.d.ts.map +1 -1
- package/build/src/cli/commands/types.js +64 -2
- package/build/src/index.d.ts +4 -4
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -2
- package/build/src/resources/agent.d.ts +23 -0
- package/build/src/resources/agent.d.ts.map +1 -1
- package/build/src/resources/agent.js +17 -0
- package/build/src/resources/capacity.d.ts +11 -0
- package/build/src/resources/capacity.d.ts.map +1 -1
- package/build/src/resources/capacity.js +81 -0
- package/build/src/resources/model.d.ts +11 -3
- package/build/src/resources/model.d.ts.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,23 @@
|
|
|
6
6
|
import { register, resourceId, token } from "../core.js";
|
|
7
7
|
import { refUuid } from "../refs.js";
|
|
8
8
|
import { normalizeUses } from "./actions.js";
|
|
9
|
+
/**
|
|
10
|
+
* Build a connector trigger with per-integration typed `config`. TypeScript
|
|
11
|
+
* can't type a bare trigger object literal inside the `triggers` array — it
|
|
12
|
+
* can't infer each element's `integration` through the array — so this helper
|
|
13
|
+
* narrows `config` to the integration's schema from the single `integration`
|
|
14
|
+
* argument (the same single-object inference `defineConnector` relies on):
|
|
15
|
+
*
|
|
16
|
+
* connectorTrigger({ integration: "slack", connector: slack,
|
|
17
|
+
* config: { channelIds: ["C0XXXX"] } })
|
|
18
|
+
*
|
|
19
|
+
* A bare `{ type: "connector", … }` object still works too, with `config` left
|
|
20
|
+
* as a loose `Record<string, unknown>`. Config schemas are populated by
|
|
21
|
+
* `cargo-ai cdk types`; an unsynced/custom integration keeps the loose record.
|
|
22
|
+
*/
|
|
23
|
+
export function connectorTrigger(spec) {
|
|
24
|
+
return { type: "connector", ...spec };
|
|
25
|
+
}
|
|
9
26
|
// Lower triggers to their wire form — a connector trigger references its
|
|
10
27
|
// connector by handle/ref, which becomes `connectorUuid`.
|
|
11
28
|
function normalizeTriggers(triggers) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { RevenueOrganizationTypes, SegmentationTypes } from "@cargo-ai/types";
|
|
2
2
|
import { type Token } from "../core.js";
|
|
3
3
|
import { type ModelRef } from "../refs.js";
|
|
4
|
+
import type { ConnectorHandle } from "./connector.js";
|
|
4
5
|
import type { ModelHandle } from "./model.js";
|
|
5
6
|
export type CapacityColor = RevenueOrganizationTypes.CapacityColor;
|
|
6
7
|
export type AllocationExpirationPolicy = RevenueOrganizationTypes.AllocationExpirationPolicy;
|
|
@@ -27,5 +28,15 @@ export type CapacityHandle = {
|
|
|
27
28
|
readonly uuid: Token;
|
|
28
29
|
readonly resource: "capacity";
|
|
29
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* The `{{member.ids.<connector_slug>}}` expression for a capacity filter —
|
|
33
|
+
* resolved by the backend at allocation time to the members' user ids in that
|
|
34
|
+
* connector. Use it as the `values` of a `kind: "string"`, `operator: "is"`
|
|
35
|
+
* condition on the column holding each record's owner id. Pass a connector
|
|
36
|
+
* handle, or a raw workspace connector slug for a connector not defined in
|
|
37
|
+
* code (e.g. an adopted OAuth connector whose actual slug differs from the
|
|
38
|
+
* CDK slug).
|
|
39
|
+
*/
|
|
40
|
+
export declare function memberIds(connector: ConnectorHandle | string): string;
|
|
30
41
|
export declare function defineCapacity(slug: string, spec: CapacitySpec): CapacityHandle;
|
|
31
42
|
//# sourceMappingURL=capacity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../../src/resources/capacity.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAwB,KAAK,KAAK,EAAS,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAC,aAAa,CAAC;AACnE,MAAM,MAAM,0BAA0B,GACpC,wBAAwB,CAAC,0BAA0B,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,kCAAkC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,CAAC;AAEF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,GACjB,cAAc,
|
|
1
|
+
{"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../../src/resources/capacity.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAwB,KAAK,KAAK,EAAS,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,wBAAwB,CAAC,aAAa,CAAC;AACnE,MAAM,MAAM,0BAA0B,GACpC,wBAAwB,CAAC,0BAA0B,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,kCAAkC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAGrE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,GACjB,cAAc,CA0BhB"}
|
|
@@ -5,8 +5,22 @@
|
|
|
5
5
|
// revenue-organization `CreateCapacityPayload`.
|
|
6
6
|
import { register, resourceId, token } from "../core.js";
|
|
7
7
|
import { refUuid } from "../refs.js";
|
|
8
|
+
/**
|
|
9
|
+
* The `{{member.ids.<connector_slug>}}` expression for a capacity filter —
|
|
10
|
+
* resolved by the backend at allocation time to the members' user ids in that
|
|
11
|
+
* connector. Use it as the `values` of a `kind: "string"`, `operator: "is"`
|
|
12
|
+
* condition on the column holding each record's owner id. Pass a connector
|
|
13
|
+
* handle, or a raw workspace connector slug for a connector not defined in
|
|
14
|
+
* code (e.g. an adopted OAuth connector whose actual slug differs from the
|
|
15
|
+
* CDK slug).
|
|
16
|
+
*/
|
|
17
|
+
export function memberIds(connector) {
|
|
18
|
+
const slug = typeof connector === "string" ? connector : connector.slug;
|
|
19
|
+
return `{{member.ids.${slug}}}`;
|
|
20
|
+
}
|
|
8
21
|
export function defineCapacity(slug, spec) {
|
|
9
22
|
const id = resourceId("capacity", slug);
|
|
23
|
+
validateCapacityFilter(slug, spec);
|
|
10
24
|
register({
|
|
11
25
|
id,
|
|
12
26
|
kind: "capacity",
|
|
@@ -28,6 +42,73 @@ export function defineCapacity(slug, spec) {
|
|
|
28
42
|
});
|
|
29
43
|
return { slug, uuid: token(id, "uuid"), resource: "capacity" };
|
|
30
44
|
}
|
|
45
|
+
// Mirrors the backend's capacity-filter rules (create/update reject the payload
|
|
46
|
+
// otherwise): a model-mapped capacity needs id/time columns and a filter with at
|
|
47
|
+
// least one member-ids condition, and every member-ids condition must be a
|
|
48
|
+
// single-valued `is` on a string column of the capacity's own model.
|
|
49
|
+
const MEMBER_IDS = /{{\s*member\.ids\.[a-z0-9_-]+\s*}}/;
|
|
50
|
+
const MEMBERS_IDS_TYPO = /{{\s*members\.ids\./;
|
|
51
|
+
function fail(slug, message) {
|
|
52
|
+
throw new Error(`capacity "${slug}" — ${message}`);
|
|
53
|
+
}
|
|
54
|
+
function validateCapacityFilter(slug, spec) {
|
|
55
|
+
const conditions = spec.filter === undefined
|
|
56
|
+
? []
|
|
57
|
+
: spec.filter.groups.flatMap((group) => group.conditions);
|
|
58
|
+
const memberIdsConditions = conditions.filter((condition) => {
|
|
59
|
+
const strings = stringsIn(condition);
|
|
60
|
+
if (strings.some((value) => MEMBERS_IDS_TYPO.test(value))) {
|
|
61
|
+
fail(slug, 'filter references "{{members.ids.…}}" — the expression root is singular; use memberIds(connector) → "{{member.ids.<connector_slug>}}".');
|
|
62
|
+
}
|
|
63
|
+
return strings.some((value) => MEMBER_IDS.test(value));
|
|
64
|
+
});
|
|
65
|
+
for (const condition of memberIdsConditions) {
|
|
66
|
+
if (condition.kind !== "string") {
|
|
67
|
+
fail(slug, `a member-ids expression must live on a { kind: "string" } condition, got kind "${condition.kind}".`);
|
|
68
|
+
}
|
|
69
|
+
if (condition.operator !== "is") {
|
|
70
|
+
fail(slug, `member-ids conditions only support the "is" operator, got "${condition.operator}".`);
|
|
71
|
+
}
|
|
72
|
+
if (Array.isArray(condition.values)) {
|
|
73
|
+
fail(slug, "member-ids conditions take a single value — pass values: memberIds(connector), not an array.");
|
|
74
|
+
}
|
|
75
|
+
if (condition.relatedModelUuid !== undefined) {
|
|
76
|
+
fail(slug, "member-ids conditions on a related model are not supported — reference a column of the capacity's own model.");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (spec.model === undefined)
|
|
80
|
+
return;
|
|
81
|
+
if (spec.filter === undefined) {
|
|
82
|
+
fail(slug, "a capacity with a model needs a filter mapping records to members — add a condition with values: memberIds(connector).");
|
|
83
|
+
}
|
|
84
|
+
if (spec.idColumnSlug === undefined) {
|
|
85
|
+
fail(slug, "idColumnSlug is required when model is set.");
|
|
86
|
+
}
|
|
87
|
+
if (spec.timeColumnSlug === undefined) {
|
|
88
|
+
fail(slug, "timeColumnSlug is required when model is set.");
|
|
89
|
+
}
|
|
90
|
+
if (memberIdsConditions.length === 0) {
|
|
91
|
+
fail(slug, 'the filter must map records to members — add { kind: "string", columnSlug: "<owner column>", operator: "is", values: memberIds(connector) }.');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Every string reachable in a condition (values live at different keys per kind). */
|
|
95
|
+
function stringsIn(value, acc = []) {
|
|
96
|
+
if (typeof value === "string") {
|
|
97
|
+
acc.push(value);
|
|
98
|
+
return acc;
|
|
99
|
+
}
|
|
100
|
+
if (Array.isArray(value)) {
|
|
101
|
+
for (const item of value)
|
|
102
|
+
stringsIn(item, acc);
|
|
103
|
+
return acc;
|
|
104
|
+
}
|
|
105
|
+
if (value !== null && typeof value === "object") {
|
|
106
|
+
for (const item of Object.values(value))
|
|
107
|
+
stringsIn(item, acc);
|
|
108
|
+
return acc;
|
|
109
|
+
}
|
|
110
|
+
return acc;
|
|
111
|
+
}
|
|
31
112
|
function toTitle(slug) {
|
|
32
113
|
return slug
|
|
33
114
|
.split(/[-_]/)
|
|
@@ -40,12 +40,20 @@ export type UnificationSpec = {
|
|
|
40
40
|
export interface ExtractorConfigs {
|
|
41
41
|
}
|
|
42
42
|
type ExtractorConfigFor<S extends string, E extends string> = S extends keyof ExtractorConfigs ? E extends keyof ExtractorConfigs[S] ? ExtractorConfigs[S][E] : Record<string, unknown> : Record<string, unknown>;
|
|
43
|
-
export
|
|
43
|
+
export interface ExtractorSlugs {
|
|
44
|
+
}
|
|
45
|
+
type ExtractorSlugFor<S extends string> = S extends keyof ExtractorSlugs ? ExtractorSlugs[S] & string : string;
|
|
46
|
+
type LiteralUnion<T extends string> = T | (string & {});
|
|
47
|
+
export type ModelSpec<S extends string = string, E extends LiteralUnion<ExtractorSlugFor<S>> = LiteralUnion<ExtractorSlugFor<S>>> = {
|
|
44
48
|
name?: string;
|
|
45
49
|
description?: string;
|
|
46
50
|
/** Source dataset — a connector handle (its dataset) or a `datasetRef(uuid)`. */
|
|
47
51
|
dataset: ConnectorHandle<S> | DatasetRef;
|
|
48
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* An extractor the source's integration exposes, e.g. "fetchRecords". After
|
|
54
|
+
* `cargo-ai cdk types`, editors autocomplete the connector's known extractors;
|
|
55
|
+
* an unsynced/newer slug is still accepted.
|
|
56
|
+
*/
|
|
49
57
|
extractSlug: E;
|
|
50
58
|
/** Extractor config — validated against the extractor's schema on apply. */
|
|
51
59
|
config?: ExtractorConfigFor<S, E>;
|
|
@@ -64,6 +72,6 @@ export type ModelHandle = {
|
|
|
64
72
|
readonly uuid: Token;
|
|
65
73
|
readonly resource: "model";
|
|
66
74
|
};
|
|
67
|
-
export declare function defineModel<S extends string, E extends
|
|
75
|
+
export declare function defineModel<S extends string, E extends LiteralUnion<ExtractorSlugFor<S>>>(slug: string, spec: ModelSpec<S, E>): ModelHandle;
|
|
68
76
|
export {};
|
|
69
77
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/resources/model.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAwB,KAAK,KAAK,EAAS,MAAM,YAAY,CAAC;AACrE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAKnC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAKF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAOjE,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC,oBAAoB,CAAC;IACxC,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;CACnC,CAAC;AAUN,MAAM,WAAW,gBAAgB;CAAG;AAEpC,KAAK,kBAAkB,CACrB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,IACd,CAAC,SAAS,MAAM,gBAAgB,GAChC,CAAC,SAAS,MAAM,gBAAgB,CAAC,CAAC,CAAC,GACjC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/resources/model.ts"],"names":[],"mappings":"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"}
|