@x12i/memorix-service 3.0.6 → 3.2.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/README.md +8 -1
- package/dist/ai-services/associate-prep.d.ts +37 -0
- package/dist/ai-services/associate-prep.d.ts.map +1 -0
- package/dist/ai-services/associate-prep.js +208 -0
- package/dist/ai-services/associate-prep.js.map +1 -0
- package/dist/ai-services/chunk-markdown.d.ts +22 -0
- package/dist/ai-services/chunk-markdown.d.ts.map +1 -0
- package/dist/ai-services/chunk-markdown.js +159 -0
- package/dist/ai-services/chunk-markdown.js.map +1 -0
- package/dist/ai-services/client.d.ts +31 -0
- package/dist/ai-services/client.d.ts.map +1 -0
- package/dist/ai-services/client.js +104 -0
- package/dist/ai-services/client.js.map +1 -0
- package/dist/ai-services/config.d.ts +17 -0
- package/dist/ai-services/config.d.ts.map +1 -0
- package/dist/ai-services/config.js +44 -0
- package/dist/ai-services/config.js.map +1 -0
- package/dist/ai-services/normalize-output.d.ts +29 -0
- package/dist/ai-services/normalize-output.d.ts.map +1 -0
- package/dist/ai-services/normalize-output.js +428 -0
- package/dist/ai-services/normalize-output.js.map +1 -0
- package/dist/ai-services/skill-execution.d.ts +24 -0
- package/dist/ai-services/skill-execution.d.ts.map +1 -0
- package/dist/ai-services/skill-execution.js +74 -0
- package/dist/ai-services/skill-execution.js.map +1 -0
- package/dist/ai-services/types.d.ts +62 -0
- package/dist/ai-services/types.d.ts.map +1 -0
- package/dist/ai-services/types.js +3 -0
- package/dist/ai-services/types.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +41 -6
- package/dist/app.js.map +1 -1
- package/dist/assist/ask.d.ts +35 -0
- package/dist/assist/ask.d.ts.map +1 -0
- package/dist/assist/ask.js +346 -0
- package/dist/assist/ask.js.map +1 -0
- package/dist/assist/facts.d.ts +5 -0
- package/dist/assist/facts.d.ts.map +1 -0
- package/dist/assist/facts.js +237 -0
- package/dist/assist/facts.js.map +1 -0
- package/dist/assist/merge-ask-proposal.d.ts +9 -0
- package/dist/assist/merge-ask-proposal.d.ts.map +1 -0
- package/dist/assist/merge-ask-proposal.js +57 -0
- package/dist/assist/merge-ask-proposal.js.map +1 -0
- package/dist/assist/types.d.ts +60 -0
- package/dist/assist/types.d.ts.map +1 -0
- package/dist/assist/types.js +57 -0
- package/dist/assist/types.js.map +1 -0
- package/dist/assist/validate.d.ts +4 -0
- package/dist/assist/validate.d.ts.map +1 -0
- package/dist/assist/validate.js +319 -0
- package/dist/assist/validate.js.map +1 -0
- package/dist/cli.js +29 -6
- package/dist/cli.js.map +1 -1
- package/dist/connector-catalog.d.ts +68 -0
- package/dist/connector-catalog.d.ts.map +1 -0
- package/dist/connector-catalog.js +258 -0
- package/dist/connector-catalog.js.map +1 -0
- package/dist/connector-role.d.ts +22 -0
- package/dist/connector-role.d.ts.map +1 -0
- package/dist/connector-role.js +71 -0
- package/dist/connector-role.js.map +1 -0
- package/dist/destination-runtime.d.ts +8 -0
- package/dist/destination-runtime.d.ts.map +1 -0
- package/dist/destination-runtime.js +11 -0
- package/dist/destination-runtime.js.map +1 -0
- package/dist/execution-target.d.ts +141 -0
- package/dist/execution-target.d.ts.map +1 -0
- package/dist/execution-target.js +853 -0
- package/dist/execution-target.js.map +1 -0
- package/dist/generic-connectors.d.ts +41 -0
- package/dist/generic-connectors.d.ts.map +1 -0
- package/dist/generic-connectors.js +158 -0
- package/dist/generic-connectors.js.map +1 -0
- package/dist/isolation.d.ts +1 -1
- package/dist/isolation.d.ts.map +1 -1
- package/dist/jobs-scope.d.ts +21 -0
- package/dist/jobs-scope.d.ts.map +1 -0
- package/dist/jobs-scope.js +83 -0
- package/dist/jobs-scope.js.map +1 -0
- package/dist/journey/collect.js +2 -2
- package/dist/journey/collect.js.map +1 -1
- package/dist/journey/coverage.js +3 -3
- package/dist/journey/coverage.js.map +1 -1
- package/dist/known-packs.d.ts +1 -1
- package/dist/known-packs.d.ts.map +1 -1
- package/dist/known-packs.js +1 -1
- package/dist/known-packs.js.map +1 -1
- package/dist/live.d.ts +13 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +866 -2
- package/dist/live.js.map +1 -1
- package/dist/magit/magit-pack-service.d.ts +112 -0
- package/dist/magit/magit-pack-service.d.ts.map +1 -1
- package/dist/magit/magit-pack-service.js +494 -12
- package/dist/magit/magit-pack-service.js.map +1 -1
- package/dist/magit/pack-to-patchset.d.ts +20 -1
- package/dist/magit/pack-to-patchset.d.ts.map +1 -1
- package/dist/magit/pack-to-patchset.js +82 -9
- package/dist/magit/pack-to-patchset.js.map +1 -1
- package/dist/magit/package-catalog-bridge.d.ts +58 -0
- package/dist/magit/package-catalog-bridge.d.ts.map +1 -0
- package/dist/magit/package-catalog-bridge.js +220 -0
- package/dist/magit/package-catalog-bridge.js.map +1 -0
- package/dist/magit/proposal-to-pack.d.ts +22 -0
- package/dist/magit/proposal-to-pack.d.ts.map +1 -0
- package/dist/magit/proposal-to-pack.js +68 -0
- package/dist/magit/proposal-to-pack.js.map +1 -0
- package/dist/mongo-metadata-store.d.ts.map +1 -1
- package/dist/mongo-metadata-store.js +9 -3
- package/dist/mongo-metadata-store.js.map +1 -1
- package/dist/openapi/openapi.json +6262 -3139
- package/dist/org-sources.d.ts +14 -0
- package/dist/org-sources.d.ts.map +1 -0
- package/dist/org-sources.js +31 -0
- package/dist/org-sources.js.map +1 -0
- package/dist/pipeline-compile.d.ts +67 -1
- package/dist/pipeline-compile.d.ts.map +1 -1
- package/dist/pipeline-compile.js +455 -29
- package/dist/pipeline-compile.js.map +1 -1
- package/dist/pipeline-invoke.d.ts +63 -0
- package/dist/pipeline-invoke.d.ts.map +1 -0
- package/dist/pipeline-invoke.js +114 -0
- package/dist/pipeline-invoke.js.map +1 -0
- package/dist/pipeline-ports.d.ts +13 -0
- package/dist/pipeline-ports.d.ts.map +1 -0
- package/dist/pipeline-ports.js +104 -0
- package/dist/pipeline-ports.js.map +1 -0
- package/dist/platform.d.ts +47 -3
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +309 -26
- package/dist/platform.js.map +1 -1
- package/dist/routes/ai-services.d.ts +4 -0
- package/dist/routes/ai-services.d.ts.map +1 -0
- package/dist/routes/ai-services.js +239 -0
- package/dist/routes/ai-services.js.map +1 -0
- package/dist/routes/assist.d.ts +4 -0
- package/dist/routes/assist.d.ts.map +1 -0
- package/dist/routes/assist.js +75 -0
- package/dist/routes/assist.js.map +1 -0
- package/dist/routes/connector-invocations.d.ts.map +1 -1
- package/dist/routes/connector-invocations.js +18 -21
- package/dist/routes/connector-invocations.js.map +1 -1
- package/dist/routes/data-journey.js +11 -11
- package/dist/routes/data-journey.js.map +1 -1
- package/dist/routes/intelligence.d.ts.map +1 -1
- package/dist/routes/intelligence.js +19 -1
- package/dist/routes/intelligence.js.map +1 -1
- package/dist/routes/jobs.d.ts +4 -0
- package/dist/routes/jobs.d.ts.map +1 -0
- package/dist/routes/jobs.js +888 -0
- package/dist/routes/jobs.js.map +1 -0
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +278 -80
- package/dist/routes/memory.js.map +1 -1
- package/dist/routes/metadata.d.ts.map +1 -1
- package/dist/routes/metadata.js +770 -21
- package/dist/routes/metadata.js.map +1 -1
- package/dist/routes/pipelines.d.ts.map +1 -1
- package/dist/routes/pipelines.js +98 -22
- package/dist/routes/pipelines.js.map +1 -1
- package/dist/routes/relationships.d.ts.map +1 -1
- package/dist/routes/relationships.js +109 -2
- package/dist/routes/relationships.js.map +1 -1
- package/dist/routes/simulation.d.ts +7 -0
- package/dist/routes/simulation.d.ts.map +1 -0
- package/dist/routes/simulation.js +22 -0
- package/dist/routes/simulation.js.map +1 -0
- package/dist/runx/client.d.ts +18 -0
- package/dist/runx/client.d.ts.map +1 -0
- package/dist/runx/client.js +59 -0
- package/dist/runx/client.js.map +1 -0
- package/dist/simulation.d.ts +26 -0
- package/dist/simulation.d.ts.map +1 -0
- package/dist/simulation.js +46 -0
- package/dist/simulation.js.map +1 -0
- package/openapi/openapi.json +6262 -3139
- package/package.json +18 -8
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Registered companion types wired in Memorix. */
|
|
2
|
+
export const AI_SERVICE_ORIGIN_SPECS = [
|
|
3
|
+
{ aiServiceType: "function", env: "FUNCX_URL", defaultPort: 6120 },
|
|
4
|
+
{ aiServiceType: "skill", env: "AI_SKILLS_URL", defaultPort: 5420 },
|
|
5
|
+
{ aiServiceType: "task", env: "AI_TASKS_URL", defaultPort: 5440 },
|
|
6
|
+
{ aiServiceType: "graph", env: "GRAPH_ENGINE_URL", defaultPort: 6200 },
|
|
7
|
+
];
|
|
8
|
+
const TYPE_TO_ENV = new Map(AI_SERVICE_ORIGIN_SPECS.map((s) => [s.aiServiceType, s.env]));
|
|
9
|
+
export function stripTrailingSlash(url) {
|
|
10
|
+
return url.replace(/\/+$/, "");
|
|
11
|
+
}
|
|
12
|
+
export function resolveConfiguredAiServiceOrigins(env = process.env) {
|
|
13
|
+
return AI_SERVICE_ORIGIN_SPECS.map((spec) => {
|
|
14
|
+
const raw = env[spec.env]?.trim();
|
|
15
|
+
return {
|
|
16
|
+
aiServiceType: spec.aiServiceType,
|
|
17
|
+
env: spec.env,
|
|
18
|
+
url: raw ? stripTrailingSlash(raw) : null,
|
|
19
|
+
defaultPort: spec.defaultPort,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** Resolve origin for a type: explicit URL, endpointEnv, or type's default env. */
|
|
24
|
+
export function resolveAiServiceOriginUrl(aiServiceType, opts) {
|
|
25
|
+
const env = opts?.env ?? process.env;
|
|
26
|
+
if (opts?.endpoint?.trim())
|
|
27
|
+
return stripTrailingSlash(opts.endpoint);
|
|
28
|
+
if (opts?.endpointEnv?.trim()) {
|
|
29
|
+
const named = env[opts.endpointEnv]?.trim();
|
|
30
|
+
if (named)
|
|
31
|
+
return stripTrailingSlash(named);
|
|
32
|
+
}
|
|
33
|
+
const defaultEnv = TYPE_TO_ENV.get(aiServiceType);
|
|
34
|
+
if (defaultEnv) {
|
|
35
|
+
const fromType = env[defaultEnv]?.trim();
|
|
36
|
+
if (fromType)
|
|
37
|
+
return stripTrailingSlash(fromType);
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function defaultEndpointEnvForType(aiServiceType) {
|
|
42
|
+
return TYPE_TO_ENV.get(aiServiceType);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/ai-services/config.ts"],"names":[],"mappings":"AAEA,mDAAmD;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAI/B;IACH,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;IAClE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE;IACnE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE;IACjE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,EAAE;CACvE,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAU,CAAC,CACtE,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;YACzC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,IAA2E;IAE3E,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,KAAK;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,aAA8B,CAAC,CAAC;IACnE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;QACzC,IAAI,QAAQ;YAAE,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,aAAqB;IAC7D,OAAO,WAAW,CAAC,GAAG,CAAC,aAA8B,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unwrap AI-services/v1 invoke envelopes into KnowX / pipeline step bags.
|
|
3
|
+
*
|
|
4
|
+
* B2: HTTP envelope is JSON; LLM body is Markdown / FlexMD. Structured fields live on
|
|
5
|
+
* output.parsed / output.flexMd.payloads after MD extraction when outputContract is used.
|
|
6
|
+
* Do not treat a model-emitted root JSON blob in rawText as the primary contract.
|
|
7
|
+
*
|
|
8
|
+
* Live companions may lowercase heading keys (`knowxdrafts`) and leave `@payload:` wrappers
|
|
9
|
+
* as strings — coalesce those into camelCase domain bags.
|
|
10
|
+
*/
|
|
11
|
+
/** Extract structured domain object from a skill/function invoke response body. */
|
|
12
|
+
export declare function extractAiServiceDomainOutput(invokeBody: unknown): Record<string, unknown> | null;
|
|
13
|
+
export type NormalizeAiServiceOutputResult = {
|
|
14
|
+
ok: true;
|
|
15
|
+
output: Record<string, unknown>;
|
|
16
|
+
} | {
|
|
17
|
+
ok: false;
|
|
18
|
+
code: string;
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Normalize invoke response into a step output bag for write-record / associate.
|
|
23
|
+
* Maps drafts → knowxDrafts when needed; preserves classification / relationshipPlans.
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizeAiServiceStepOutput(invokeBody: unknown, opts?: {
|
|
26
|
+
itemId?: string;
|
|
27
|
+
serviceId?: string;
|
|
28
|
+
}): NormalizeAiServiceOutputResult;
|
|
29
|
+
//# sourceMappingURL=normalize-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-output.d.ts","sourceRoot":"","sources":["../../src/ai-services/normalize-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+HH,mFAAmF;AACnF,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAkEhG;AAmID,MAAM,MAAM,8BAA8B,GACtC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,OAAO,EACnB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,8BAA8B,CA8FhC"}
|
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unwrap AI-services/v1 invoke envelopes into KnowX / pipeline step bags.
|
|
3
|
+
*
|
|
4
|
+
* B2: HTTP envelope is JSON; LLM body is Markdown / FlexMD. Structured fields live on
|
|
5
|
+
* output.parsed / output.flexMd.payloads after MD extraction when outputContract is used.
|
|
6
|
+
* Do not treat a model-emitted root JSON blob in rawText as the primary contract.
|
|
7
|
+
*
|
|
8
|
+
* Live companions may lowercase heading keys (`knowxdrafts`) and leave `@payload:` wrappers
|
|
9
|
+
* as strings — coalesce those into camelCase domain bags.
|
|
10
|
+
*/
|
|
11
|
+
function asRecord(value) {
|
|
12
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
13
|
+
? value
|
|
14
|
+
: null;
|
|
15
|
+
}
|
|
16
|
+
function tryParseJson(text) {
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(text);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const KNOWX_KEY_ALIASES = {
|
|
25
|
+
knowxdrafts: "knowxDrafts",
|
|
26
|
+
drafts: "knowxDrafts",
|
|
27
|
+
dochash: "docHash",
|
|
28
|
+
classification: "classification",
|
|
29
|
+
relationshipplans: "relationshipPlans",
|
|
30
|
+
};
|
|
31
|
+
function canonicalKnowxKey(key) {
|
|
32
|
+
return KNOWX_KEY_ALIASES[key.toLowerCase()] ?? null;
|
|
33
|
+
}
|
|
34
|
+
function hasKnowxKeys(rec) {
|
|
35
|
+
return Object.keys(rec).some((k) => canonicalKnowxKey(k) != null);
|
|
36
|
+
}
|
|
37
|
+
/** True when domain bag has a usable structured value (not empty shells). */
|
|
38
|
+
function hasUsableKnowxValues(rec) {
|
|
39
|
+
if (Array.isArray(rec.knowxDrafts))
|
|
40
|
+
return true;
|
|
41
|
+
if (asRecord(rec.classification))
|
|
42
|
+
return true;
|
|
43
|
+
if (Array.isArray(rec.relationshipPlans))
|
|
44
|
+
return true;
|
|
45
|
+
if (typeof rec.docHash === "string" && rec.docHash.trim())
|
|
46
|
+
return true;
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/** Best-effort JSON value from a section body (fences, leading prose, @payload wrapper). */
|
|
50
|
+
function parseJsonish(text) {
|
|
51
|
+
let t = text.trim();
|
|
52
|
+
if (!t)
|
|
53
|
+
return null;
|
|
54
|
+
const fenced = t.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
55
|
+
if (fenced)
|
|
56
|
+
t = fenced[1].trim();
|
|
57
|
+
const direct = tryParseJson(t);
|
|
58
|
+
if (direct !== null)
|
|
59
|
+
return direct;
|
|
60
|
+
const arrStart = t.indexOf("[");
|
|
61
|
+
const objStart = t.indexOf("{");
|
|
62
|
+
let start = -1;
|
|
63
|
+
if (arrStart >= 0 && (objStart < 0 || arrStart < objStart))
|
|
64
|
+
start = arrStart;
|
|
65
|
+
else if (objStart >= 0)
|
|
66
|
+
start = objStart;
|
|
67
|
+
if (start < 0)
|
|
68
|
+
return null;
|
|
69
|
+
const slice = t.slice(start);
|
|
70
|
+
const endArr = slice.lastIndexOf("]");
|
|
71
|
+
const endObj = slice.lastIndexOf("}");
|
|
72
|
+
const end = Math.max(endArr, endObj);
|
|
73
|
+
if (end < 0)
|
|
74
|
+
return null;
|
|
75
|
+
return tryParseJson(slice.slice(0, end + 1));
|
|
76
|
+
}
|
|
77
|
+
/** Strip optional `@payload:Name` wrapper then JSON-parse when needed. */
|
|
78
|
+
function unwrapPayloadValue(raw) {
|
|
79
|
+
if (raw == null)
|
|
80
|
+
return null;
|
|
81
|
+
if (typeof raw !== "string")
|
|
82
|
+
return raw;
|
|
83
|
+
let text = raw.trim();
|
|
84
|
+
const payloadHeader = text.match(/^@payload:([^\s\n]+)\s*\n?([\s\S]*)$/i);
|
|
85
|
+
if (payloadHeader) {
|
|
86
|
+
text = payloadHeader[2].trim();
|
|
87
|
+
}
|
|
88
|
+
if (!text)
|
|
89
|
+
return null;
|
|
90
|
+
const parsed = parseJsonish(text);
|
|
91
|
+
return parsed !== null ? parsed : text;
|
|
92
|
+
}
|
|
93
|
+
/** Hoist nested `{ knowxDrafts: [...] }` bags sometimes emitted inside a section payload. */
|
|
94
|
+
function hoistKnowxSection(canon, value) {
|
|
95
|
+
const rec = asRecord(value);
|
|
96
|
+
if (!rec)
|
|
97
|
+
return value;
|
|
98
|
+
if (canon === "knowxDrafts" && Array.isArray(rec.knowxDrafts))
|
|
99
|
+
return rec.knowxDrafts;
|
|
100
|
+
if (canon === "docHash" && typeof rec.docHash === "string")
|
|
101
|
+
return rec.docHash;
|
|
102
|
+
if (canon === "classification" && asRecord(rec.classification))
|
|
103
|
+
return rec.classification;
|
|
104
|
+
if (canon === "relationshipPlans" && Array.isArray(rec.relationshipPlans)) {
|
|
105
|
+
return rec.relationshipPlans;
|
|
106
|
+
}
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
/** Coerce FlexMD @payload string/object into a domain record when it carries KnowX keys. */
|
|
110
|
+
function domainFromPayload(raw) {
|
|
111
|
+
const unwrapped = unwrapPayloadValue(raw);
|
|
112
|
+
if (typeof unwrapped === "string") {
|
|
113
|
+
const p = asRecord(tryParseJson(unwrapped.trim()));
|
|
114
|
+
return p && hasKnowxKeys(p) ? canonicalizeDomain(p) : null;
|
|
115
|
+
}
|
|
116
|
+
const p = asRecord(unwrapped);
|
|
117
|
+
return p && hasKnowxKeys(p) ? canonicalizeDomain(p) : null;
|
|
118
|
+
}
|
|
119
|
+
function canonicalizeDomain(rec) {
|
|
120
|
+
const out = {};
|
|
121
|
+
for (const [k, v] of Object.entries(rec)) {
|
|
122
|
+
const canon = canonicalKnowxKey(k);
|
|
123
|
+
if (canon)
|
|
124
|
+
out[canon] = hoistKnowxSection(canon, unwrapPayloadValue(v));
|
|
125
|
+
else
|
|
126
|
+
out[k] = v;
|
|
127
|
+
}
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Build a domain bag from per-section parsed/payload maps
|
|
132
|
+
* (e.g. { knowxdrafts: "@payload:…\n[…]", dochash: "…" }).
|
|
133
|
+
*/
|
|
134
|
+
function domainFromSectionMap(map) {
|
|
135
|
+
if (!map)
|
|
136
|
+
return null;
|
|
137
|
+
const out = {};
|
|
138
|
+
for (const [k, v] of Object.entries(map)) {
|
|
139
|
+
const canon = canonicalKnowxKey(k);
|
|
140
|
+
if (!canon)
|
|
141
|
+
continue;
|
|
142
|
+
const unwrapped = hoistKnowxSection(canon, unwrapPayloadValue(v));
|
|
143
|
+
if (unwrapped != null)
|
|
144
|
+
out[canon] = unwrapped;
|
|
145
|
+
}
|
|
146
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
147
|
+
}
|
|
148
|
+
/** Extract structured domain object from a skill/function invoke response body. */
|
|
149
|
+
export function extractAiServiceDomainOutput(invokeBody) {
|
|
150
|
+
const body = asRecord(invokeBody);
|
|
151
|
+
if (!body)
|
|
152
|
+
return null;
|
|
153
|
+
const output = body.output;
|
|
154
|
+
const out = asRecord(output);
|
|
155
|
+
if (!out)
|
|
156
|
+
return null;
|
|
157
|
+
// 1) output.parsed — whole bag or per-section contract keys
|
|
158
|
+
const parsed = asRecord(out.parsed);
|
|
159
|
+
if (parsed && hasKnowxKeys(parsed)) {
|
|
160
|
+
// Prefer coalescing sections (handles mixed casing + @payload strings)
|
|
161
|
+
const fromSections = domainFromSectionMap(parsed);
|
|
162
|
+
if (fromSections && hasUsableKnowxValues(fromSections))
|
|
163
|
+
return fromSections;
|
|
164
|
+
const canon = canonicalizeDomain(parsed);
|
|
165
|
+
if (hasUsableKnowxValues(canon))
|
|
166
|
+
return canon;
|
|
167
|
+
// Empty shells ("" after failed OFS extract) — fall through to flexMd / rawText.
|
|
168
|
+
}
|
|
169
|
+
// 2) FlexMD payloads (knowx / contract key names / result)
|
|
170
|
+
const flex = asRecord(out.flexMd);
|
|
171
|
+
const payloads = asRecord(flex?.payloads);
|
|
172
|
+
if (payloads) {
|
|
173
|
+
for (const key of [
|
|
174
|
+
"knowx",
|
|
175
|
+
"knowxDrafts",
|
|
176
|
+
"classification",
|
|
177
|
+
"relationshipPlans",
|
|
178
|
+
"result",
|
|
179
|
+
"output",
|
|
180
|
+
]) {
|
|
181
|
+
const fromKey = domainFromPayload(payloads[key] ?? payloads[key.toLowerCase()]);
|
|
182
|
+
if (fromKey && hasUsableKnowxValues(fromKey))
|
|
183
|
+
return fromKey;
|
|
184
|
+
}
|
|
185
|
+
const fromSections = domainFromSectionMap(payloads);
|
|
186
|
+
if (fromSections && hasUsableKnowxValues(fromSections))
|
|
187
|
+
return fromSections;
|
|
188
|
+
// Single payload object that already is the domain bag
|
|
189
|
+
const values = Object.values(payloads);
|
|
190
|
+
if (values.length === 1) {
|
|
191
|
+
const only = domainFromPayload(values[0]);
|
|
192
|
+
if (only && hasUsableKnowxValues(only))
|
|
193
|
+
return only;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 3) Already a domain bag on output (function-style or pre-normalized)
|
|
197
|
+
if (hasKnowxKeys(out)) {
|
|
198
|
+
const canon = canonicalizeDomain(out);
|
|
199
|
+
if (hasUsableKnowxValues(canon))
|
|
200
|
+
return canon;
|
|
201
|
+
}
|
|
202
|
+
// 4) Last resort: scrape contract headings / embedded JSON from rawText when
|
|
203
|
+
// gateway FlexMD extractFromMarkdown(spec) fails (companion often still has MD).
|
|
204
|
+
const rawText = typeof out.rawText === "string"
|
|
205
|
+
? out.rawText
|
|
206
|
+
: typeof body.rawText === "string"
|
|
207
|
+
? body.rawText
|
|
208
|
+
: "";
|
|
209
|
+
if (rawText.trim()) {
|
|
210
|
+
const fromRaw = domainFromMarkdownHeadings(rawText);
|
|
211
|
+
if (fromRaw && hasUsableKnowxValues(fromRaw))
|
|
212
|
+
return fromRaw;
|
|
213
|
+
const fromJson = domainFromEmbeddedJson(rawText);
|
|
214
|
+
if (fromJson && hasUsableKnowxValues(fromJson))
|
|
215
|
+
return fromJson;
|
|
216
|
+
}
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Parse `### classification` / `### relationshipPlans` (or @payload) blocks from MD.
|
|
221
|
+
* Also accepts headings that *start with* the contract name (e.g. "Classification analysis"
|
|
222
|
+
* is ignored; exact-or-alias "classification" / "relationshipPlans" required as the
|
|
223
|
+
* first token after #).
|
|
224
|
+
*/
|
|
225
|
+
function domainFromMarkdownHeadings(md) {
|
|
226
|
+
const out = {};
|
|
227
|
+
// First token after # must be a contract key (allow trailing junk: "classification {").
|
|
228
|
+
const headingRe = /^#{1,6}\s+(classification|relationshipPlans|knowxDrafts|docHash|knowx)\b[^\n]*$/gim;
|
|
229
|
+
const matches = [...md.matchAll(headingRe)];
|
|
230
|
+
for (let i = 0; i < matches.length; i++) {
|
|
231
|
+
const m = matches[i];
|
|
232
|
+
const name = m[1];
|
|
233
|
+
const start = (m.index ?? 0) + m[0].length;
|
|
234
|
+
const end = i + 1 < matches.length ? (matches[i + 1].index ?? md.length) : md.length;
|
|
235
|
+
const body = md.slice(start, end).trim();
|
|
236
|
+
const canon = canonicalKnowxKey(name) ?? (name.toLowerCase() === "knowx" ? "knowx" : null);
|
|
237
|
+
if (!canon)
|
|
238
|
+
continue;
|
|
239
|
+
const unwrapped = unwrapPayloadValue(body);
|
|
240
|
+
if (canon === "knowx") {
|
|
241
|
+
const rec = asRecord(unwrapped);
|
|
242
|
+
if (rec && hasKnowxKeys(rec)) {
|
|
243
|
+
Object.assign(out, canonicalizeDomain(rec));
|
|
244
|
+
}
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
if (unwrapped != null)
|
|
248
|
+
out[canon] = hoistKnowxSection(canon, unwrapped);
|
|
249
|
+
}
|
|
250
|
+
return Object.keys(out).length > 0 ? out : null;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Scan raw markdown for embedded classification object / relationshipPlans array
|
|
254
|
+
* when headings are missing or OFS left empty shells.
|
|
255
|
+
*/
|
|
256
|
+
function domainFromEmbeddedJson(md) {
|
|
257
|
+
const out = {};
|
|
258
|
+
// Walk every `{` and try to parse a balanced JSON object that looks like classification.
|
|
259
|
+
for (let i = 0; i < md.length; i++) {
|
|
260
|
+
if (md[i] !== "{")
|
|
261
|
+
continue;
|
|
262
|
+
if (!/"known"|"novel"|"contradicts"/.test(md.slice(i, i + 80)))
|
|
263
|
+
continue;
|
|
264
|
+
const slice = md.slice(i);
|
|
265
|
+
const endObj = findBalancedEnd(slice, "{", "}");
|
|
266
|
+
if (endObj < 0)
|
|
267
|
+
continue;
|
|
268
|
+
const candidate = tryParseJson(slice.slice(0, endObj + 1));
|
|
269
|
+
const rec = asRecord(candidate);
|
|
270
|
+
if (rec &&
|
|
271
|
+
(Array.isArray(rec.known) ||
|
|
272
|
+
Array.isArray(rec.novel) ||
|
|
273
|
+
Array.isArray(rec.contradicts))) {
|
|
274
|
+
out.classification = rec;
|
|
275
|
+
// keep scanning for a later (usually final) classification
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (let i = 0; i < md.length; i++) {
|
|
279
|
+
if (md[i] !== "[")
|
|
280
|
+
continue;
|
|
281
|
+
if (!/"definitionId"\s*:\s*"knowx-/.test(md.slice(i, i + 120)))
|
|
282
|
+
continue;
|
|
283
|
+
const slice = md.slice(i);
|
|
284
|
+
const endArr = findBalancedEnd(slice, "[", "]");
|
|
285
|
+
if (endArr < 0)
|
|
286
|
+
continue;
|
|
287
|
+
const candidate = tryParseJson(slice.slice(0, endArr + 1));
|
|
288
|
+
if (Array.isArray(candidate) &&
|
|
289
|
+
candidate.some((p) => asRecord(p) && typeof asRecord(p).definitionId === "string")) {
|
|
290
|
+
out.relationshipPlans = candidate;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
for (let i = 0; i < md.length; i++) {
|
|
294
|
+
if (md[i] !== "[")
|
|
295
|
+
continue;
|
|
296
|
+
if (!/"contentType"\s*:\s*"knowx"/.test(md.slice(i, i + 400)))
|
|
297
|
+
continue;
|
|
298
|
+
const slice = md.slice(i);
|
|
299
|
+
const endArr = findBalancedEnd(slice, "[", "]");
|
|
300
|
+
if (endArr < 0)
|
|
301
|
+
continue;
|
|
302
|
+
const candidate = tryParseJson(slice.slice(0, endArr + 1));
|
|
303
|
+
if (Array.isArray(candidate) &&
|
|
304
|
+
candidate.some((p) => asRecord(p)?.recordId != null)) {
|
|
305
|
+
out.knowxDrafts = candidate;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return hasUsableKnowxValues(out) ? out : null;
|
|
310
|
+
}
|
|
311
|
+
/** Index of matching closer for the opener at slice[0], or -1. */
|
|
312
|
+
function findBalancedEnd(slice, open, close) {
|
|
313
|
+
if (slice[0] !== open)
|
|
314
|
+
return -1;
|
|
315
|
+
let depth = 0;
|
|
316
|
+
let inStr = false;
|
|
317
|
+
let esc = false;
|
|
318
|
+
for (let i = 0; i < slice.length; i++) {
|
|
319
|
+
const ch = slice[i];
|
|
320
|
+
if (inStr) {
|
|
321
|
+
if (esc) {
|
|
322
|
+
esc = false;
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (ch === "\\") {
|
|
326
|
+
esc = true;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (ch === '"')
|
|
330
|
+
inStr = false;
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (ch === '"') {
|
|
334
|
+
inStr = true;
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
if (ch === open)
|
|
338
|
+
depth++;
|
|
339
|
+
else if (ch === close) {
|
|
340
|
+
depth--;
|
|
341
|
+
if (depth === 0)
|
|
342
|
+
return i;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return -1;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Normalize invoke response into a step output bag for write-record / associate.
|
|
349
|
+
* Maps drafts → knowxDrafts when needed; preserves classification / relationshipPlans.
|
|
350
|
+
*/
|
|
351
|
+
export function normalizeAiServiceStepOutput(invokeBody, opts) {
|
|
352
|
+
const body = asRecord(invokeBody);
|
|
353
|
+
const output = asRecord(body?.output);
|
|
354
|
+
const rawText = (typeof output?.rawText === "string" && output.rawText) ||
|
|
355
|
+
(typeof asRecord(output?.parsed)?.rawText === "string" &&
|
|
356
|
+
asRecord(output?.parsed).rawText) ||
|
|
357
|
+
"";
|
|
358
|
+
const domain = extractAiServiceDomainOutput(invokeBody);
|
|
359
|
+
if (!domain) {
|
|
360
|
+
// Companion sometimes returns ok:true with empty rawText after burning the
|
|
361
|
+
// full completion budget on oversized associate prompts — mark distinctly.
|
|
362
|
+
const parsedRec = asRecord(output?.parsed);
|
|
363
|
+
const emptyShell = body?.ok === true &&
|
|
364
|
+
!rawText.trim() &&
|
|
365
|
+
(!parsedRec ||
|
|
366
|
+
(Object.keys(parsedRec).length === 0 ||
|
|
367
|
+
(Object.keys(parsedRec).length === 1 &&
|
|
368
|
+
typeof parsedRec.rawText === "string" &&
|
|
369
|
+
!String(parsedRec.rawText).trim())));
|
|
370
|
+
if (emptyShell) {
|
|
371
|
+
return {
|
|
372
|
+
ok: false,
|
|
373
|
+
code: "AI_OUTPUT_EMPTY",
|
|
374
|
+
message: `AI-service ${opts?.itemId ?? "item"} returned empty structured output (rawText empty)`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
ok: false,
|
|
379
|
+
code: "AI_OUTPUT_UNPARSEABLE",
|
|
380
|
+
message: `AI-service ${opts?.itemId ?? "item"} did not return structured KnowX output (expected output.parsed / FlexMD payloads with knowxDrafts / classification / relationshipPlans)`,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
const out = { ...domain };
|
|
384
|
+
if (!Array.isArray(out.knowxDrafts) && Array.isArray(out.drafts)) {
|
|
385
|
+
out.knowxDrafts = out.drafts;
|
|
386
|
+
}
|
|
387
|
+
// Single draft object mistaken for the array section
|
|
388
|
+
if (!Array.isArray(out.knowxDrafts) &&
|
|
389
|
+
asRecord(out.knowxDrafts) &&
|
|
390
|
+
typeof out.knowxDrafts.recordId === "string") {
|
|
391
|
+
out.knowxDrafts = [out.knowxDrafts];
|
|
392
|
+
}
|
|
393
|
+
const serviceId = opts?.serviceId ?? "";
|
|
394
|
+
const itemId = opts?.itemId ?? "";
|
|
395
|
+
const looksExtract = serviceId === "knowx-extract" ||
|
|
396
|
+
itemId === "knowx.extract" ||
|
|
397
|
+
Array.isArray(out.knowxDrafts);
|
|
398
|
+
const looksAssociate = serviceId === "knowx-associate-knowledge" ||
|
|
399
|
+
itemId === "knowx.associate-knowledge" ||
|
|
400
|
+
asRecord(out.classification) != null ||
|
|
401
|
+
Array.isArray(out.relationshipPlans);
|
|
402
|
+
if (looksExtract && !Array.isArray(out.knowxDrafts)) {
|
|
403
|
+
const got = out.knowxDrafts;
|
|
404
|
+
const hint = got === undefined
|
|
405
|
+
? "missing"
|
|
406
|
+
: Array.isArray(got)
|
|
407
|
+
? "array"
|
|
408
|
+
: `${typeof got}${asRecord(got) ? ` keys=${Object.keys(got).join(",")}` : ""}`;
|
|
409
|
+
return {
|
|
410
|
+
ok: false,
|
|
411
|
+
code: "AI_OUTPUT_MISSING_DRAFTS",
|
|
412
|
+
message: `knowx.extract output missing knowxDrafts array (got ${hint}; domainKeys=${Object.keys(out).join(",")})`,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
if (looksAssociate &&
|
|
416
|
+
!asRecord(out.classification) &&
|
|
417
|
+
!Array.isArray(out.relationshipPlans)) {
|
|
418
|
+
return {
|
|
419
|
+
ok: false,
|
|
420
|
+
code: "AI_OUTPUT_MISSING_ASSOCIATE",
|
|
421
|
+
message: "knowx.associate-knowledge output missing classification / relationshipPlans",
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
out.kind = "ai-services";
|
|
425
|
+
out.live = true;
|
|
426
|
+
return { ok: true, output: out };
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=normalize-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-output.js","sourceRoot":"","sources":["../../src/ai-services/normalize-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default RunSkillRequest execution fields for KnowX AI-service pipeline steps.
|
|
3
|
+
* Merged into portConfig.execution at compile time; live invoke passes them under FR execution.
|
|
4
|
+
*
|
|
5
|
+
* Model: ai-profiles `profile/choice` (e.g. cheap/default) or a concrete wire id via
|
|
6
|
+
* execution.modelConfig.model. Override with KNOWX_AI_SKILL_MODEL / AI_SKILLS_DEFAULT_MODEL.
|
|
7
|
+
* Do not invent a default provider wire model — missing model fails at the companion.
|
|
8
|
+
*/
|
|
9
|
+
export type SkillExecutionDefaults = {
|
|
10
|
+
agentId: string;
|
|
11
|
+
jobId: string;
|
|
12
|
+
taskId: string;
|
|
13
|
+
jobTypeId: string;
|
|
14
|
+
taskTypeId: string;
|
|
15
|
+
modelConfig: {
|
|
16
|
+
model: string;
|
|
17
|
+
};
|
|
18
|
+
outputContract: string[];
|
|
19
|
+
};
|
|
20
|
+
export declare function defaultSkillExecutionForItem(itemId: string, opts?: {
|
|
21
|
+
runId?: string;
|
|
22
|
+
stepId?: string;
|
|
23
|
+
}): Record<string, unknown> | undefined;
|
|
24
|
+
//# sourceMappingURL=skill-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-execution.d.ts","sourceRoot":"","sources":["../../src/ai-services/skill-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AA0CF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAmCrC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default RunSkillRequest execution fields for KnowX AI-service pipeline steps.
|
|
3
|
+
* Merged into portConfig.execution at compile time; live invoke passes them under FR execution.
|
|
4
|
+
*
|
|
5
|
+
* Model: ai-profiles `profile/choice` (e.g. cheap/default) or a concrete wire id via
|
|
6
|
+
* execution.modelConfig.model. Override with KNOWX_AI_SKILL_MODEL / AI_SKILLS_DEFAULT_MODEL.
|
|
7
|
+
* Do not invent a default provider wire model — missing model fails at the companion.
|
|
8
|
+
*/
|
|
9
|
+
function resolveKnowxSkillModel() {
|
|
10
|
+
return (process.env.KNOWX_AI_SKILL_MODEL?.trim() ||
|
|
11
|
+
process.env.AI_SKILLS_DEFAULT_MODEL?.trim() ||
|
|
12
|
+
"cheap/default");
|
|
13
|
+
}
|
|
14
|
+
/** Associate needs a non-reasoning chat model — flash often returns empty rawText. */
|
|
15
|
+
function resolveKnowxAssociateModel() {
|
|
16
|
+
return (process.env.KNOWX_AI_ASSOC_MODEL?.trim() ||
|
|
17
|
+
process.env.KNOWX_AI_SKILL_MODEL?.trim() ||
|
|
18
|
+
process.env.AI_SKILLS_DEFAULT_MODEL?.trim() ||
|
|
19
|
+
"openrouter/deepseek/deepseek-chat");
|
|
20
|
+
}
|
|
21
|
+
const KNOWX_SKILL_EXECUTION = {
|
|
22
|
+
"knowx.extract": {
|
|
23
|
+
agentId: "knowx",
|
|
24
|
+
jobId: "knowx-pipeline",
|
|
25
|
+
taskId: "knowx-extract",
|
|
26
|
+
jobTypeId: "knowx-ingest",
|
|
27
|
+
taskTypeId: "knowx-extract",
|
|
28
|
+
outputContract: ["knowxDrafts", "docHash"],
|
|
29
|
+
},
|
|
30
|
+
"knowx.associate-knowledge": {
|
|
31
|
+
agentId: "knowx",
|
|
32
|
+
jobId: "knowx-pipeline",
|
|
33
|
+
taskId: "knowx-associate-knowledge",
|
|
34
|
+
jobTypeId: "knowx-ingest",
|
|
35
|
+
taskTypeId: "knowx-associate-knowledge",
|
|
36
|
+
outputContract: ["classification", "relationshipPlans"],
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export function defaultSkillExecutionForItem(itemId, opts) {
|
|
40
|
+
const model = itemId === "knowx.associate-knowledge"
|
|
41
|
+
? resolveKnowxAssociateModel()
|
|
42
|
+
: resolveKnowxSkillModel();
|
|
43
|
+
const modelConfig = { model };
|
|
44
|
+
// Associate plans grow with catalog size — prefer a higher completion budget.
|
|
45
|
+
if (itemId === "knowx.associate-knowledge") {
|
|
46
|
+
const maxTok = Number(process.env.KNOWX_AI_ASSOC_MAX_TOKENS?.trim() || "8192");
|
|
47
|
+
if (Number.isFinite(maxTok) && maxTok > 0) {
|
|
48
|
+
const n = Math.floor(maxTok);
|
|
49
|
+
modelConfig.maxTokens = n;
|
|
50
|
+
modelConfig.max_tokens = n;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const base = KNOWX_SKILL_EXECUTION[itemId];
|
|
54
|
+
if (!base) {
|
|
55
|
+
if (itemId.startsWith("knowx.")) {
|
|
56
|
+
return {
|
|
57
|
+
agentId: "knowx",
|
|
58
|
+
jobId: opts?.runId ?? "knowx-pipeline",
|
|
59
|
+
taskId: opts?.stepId ?? itemId,
|
|
60
|
+
jobTypeId: "knowx-ingest",
|
|
61
|
+
taskTypeId: itemId,
|
|
62
|
+
modelConfig,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
...base,
|
|
69
|
+
modelConfig,
|
|
70
|
+
jobId: opts?.runId ?? base.jobId,
|
|
71
|
+
taskId: opts?.stepId ?? base.taskId,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=skill-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-execution.js","sourceRoot":"","sources":["../../src/ai-services/skill-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,SAAS,sBAAsB;IAC7B,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE;QAC3C,eAAe,CAChB,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAS,0BAA0B;IACjC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE;QAC3C,mCAAmC,CACpC,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GAGvB;IACF,eAAe,EAAE;QACf,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,eAAe;QAC3B,cAAc,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;KAC3C;IACD,2BAA2B,EAAE;QAC3B,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,2BAA2B;QACnC,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,2BAA2B;QACvC,cAAc,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;KACxD;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,MAAc,EACd,IAA0C;IAE1C,MAAM,KAAK,GACT,MAAM,KAAK,2BAA2B;QACpC,CAAC,CAAC,0BAA0B,EAAE;QAC9B,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAC/B,MAAM,WAAW,GAA4B,EAAE,KAAK,EAAE,CAAC;IACvD,8EAA8E;IAC9E,IAAI,MAAM,KAAK,2BAA2B,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,CAAC;QAC/E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7B,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1B,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,gBAAgB;gBACtC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM;gBAC9B,SAAS,EAAE,cAAc;gBACzB,UAAU,EAAE,MAAM;gBAClB,WAAW;aACZ,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,GAAG,IAAI;QACP,WAAW;QACX,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK;QAChC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM;KACpC,CAAC;AACJ,CAAC"}
|