@c4a/core 0.4.12 → 0.4.15-alpha.2
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 +40 -0
- package/index.js +576 -73
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# @c4a/core
|
|
2
|
+
|
|
3
|
+
`@c4a/core` is the shared foundation package for C4A. It provides reusable types, schemas, error definitions, and utility helpers used across multiple packages.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add @c4a/core
|
|
9
|
+
# or
|
|
10
|
+
npm install @c4a/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## What It Includes
|
|
14
|
+
|
|
15
|
+
- **Domain types**: common TypeScript types for entities, relations, contents, and sources
|
|
16
|
+
- **Schema definitions**: Zod-based input/output validation models
|
|
17
|
+
- **Error system**: unified error codes and `C4AError`
|
|
18
|
+
- **Ref utilities**: helpers for parsing and building `ref:*` pointers
|
|
19
|
+
- **Shared constants and helpers**: reusable utilities for API, CLI, Daemon, Web, and other packages
|
|
20
|
+
|
|
21
|
+
## Example
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { C4AError, ErrorCode, parseRef } from "@c4a/core";
|
|
25
|
+
|
|
26
|
+
const parsed = parseRef("ref:entity:ent_123");
|
|
27
|
+
if (!parsed) {
|
|
28
|
+
throw new C4AError(ErrorCode.VALIDATION_FAILED, "Invalid ref");
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Common Use Cases
|
|
33
|
+
|
|
34
|
+
- Reuse a single contract across a monorepo to avoid type drift
|
|
35
|
+
- Validate external inputs with consistent schemas and error handling
|
|
36
|
+
- Parse and build cross-resource reference pointers
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
MIT
|
package/index.js
CHANGED
|
@@ -7000,6 +7000,7 @@ var RelationType;
|
|
|
7000
7000
|
RelationType2["Triggers"] = "TRIGGERS";
|
|
7001
7001
|
RelationType2["References"] = "REFERENCES";
|
|
7002
7002
|
RelationType2["Corresponds"] = "CORRESPONDS";
|
|
7003
|
+
RelationType2["Mentions"] = "MENTIONS";
|
|
7003
7004
|
})(RelationType ||= {});
|
|
7004
7005
|
var AtomField;
|
|
7005
7006
|
((AtomField2) => {
|
|
@@ -7017,6 +7018,7 @@ var AtomField;
|
|
|
7017
7018
|
AtomField2["Constraints"] = "constraints";
|
|
7018
7019
|
AtomField2["Comparisons"] = "comparisons";
|
|
7019
7020
|
AtomField2["Boundaries"] = "boundaries";
|
|
7021
|
+
AtomField2["Claims"] = "claims";
|
|
7020
7022
|
})(AtomField ||= {});
|
|
7021
7023
|
var Kind;
|
|
7022
7024
|
((Kind2) => {
|
|
@@ -7029,12 +7031,124 @@ var Perspective;
|
|
|
7029
7031
|
Perspective2["Business"] = "business";
|
|
7030
7032
|
Perspective2["Technical"] = "technical";
|
|
7031
7033
|
})(Perspective ||= {});
|
|
7034
|
+
// src/types/edgeSyncRules.ts
|
|
7035
|
+
var EDGE_SYNC_RULES = [
|
|
7036
|
+
{
|
|
7037
|
+
field: "container_id",
|
|
7038
|
+
sourceEntityType: "component" /* Component */,
|
|
7039
|
+
edgeType: "CONTAINS" /* Contains */,
|
|
7040
|
+
direction: "reverse",
|
|
7041
|
+
writeGraph: true
|
|
7042
|
+
},
|
|
7043
|
+
{
|
|
7044
|
+
field: "system_id",
|
|
7045
|
+
sourceEntityType: "container" /* Container */,
|
|
7046
|
+
edgeType: "CONTAINS" /* Contains */,
|
|
7047
|
+
direction: "reverse",
|
|
7048
|
+
writeGraph: true
|
|
7049
|
+
},
|
|
7050
|
+
{
|
|
7051
|
+
field: "ref_sor",
|
|
7052
|
+
sourceEntityType: "sor" /* SoR */,
|
|
7053
|
+
edgeType: "REFERENCES" /* References */,
|
|
7054
|
+
direction: "forward",
|
|
7055
|
+
writeGraph: true
|
|
7056
|
+
},
|
|
7057
|
+
{
|
|
7058
|
+
field: "product_refs",
|
|
7059
|
+
sourceEntityType: "epic" /* Epic */,
|
|
7060
|
+
edgeType: "REFERENCES" /* References */,
|
|
7061
|
+
direction: "forward",
|
|
7062
|
+
writeGraph: true
|
|
7063
|
+
},
|
|
7064
|
+
{
|
|
7065
|
+
field: "atoms.entities.ref",
|
|
7066
|
+
sourceEntityType: "any",
|
|
7067
|
+
edgeType: "MENTIONS" /* Mentions */,
|
|
7068
|
+
direction: "forward",
|
|
7069
|
+
writeGraph: true
|
|
7070
|
+
},
|
|
7071
|
+
{
|
|
7072
|
+
field: "atoms.behaviors.ref",
|
|
7073
|
+
sourceEntityType: "any",
|
|
7074
|
+
edgeType: "MENTIONS" /* Mentions */,
|
|
7075
|
+
direction: "forward",
|
|
7076
|
+
writeGraph: true
|
|
7077
|
+
},
|
|
7078
|
+
{
|
|
7079
|
+
field: "product_id",
|
|
7080
|
+
sourceEntityType: "sor" /* SoR */,
|
|
7081
|
+
edgeType: null,
|
|
7082
|
+
direction: "forward",
|
|
7083
|
+
writeGraph: false
|
|
7084
|
+
},
|
|
7085
|
+
{
|
|
7086
|
+
field: "process_id",
|
|
7087
|
+
sourceEntityType: "sor" /* SoR */,
|
|
7088
|
+
edgeType: "PRODUCES" /* Produces */,
|
|
7089
|
+
direction: "reverse",
|
|
7090
|
+
writeGraph: true
|
|
7091
|
+
}
|
|
7092
|
+
];
|
|
7093
|
+
// src/types/refPointer.ts
|
|
7094
|
+
var REF_POINTER_PATTERN = /^ref:(entity|relation|content):(.+)$/;
|
|
7095
|
+
function parseRef(pointer) {
|
|
7096
|
+
const match = REF_POINTER_PATTERN.exec(pointer);
|
|
7097
|
+
if (!match) {
|
|
7098
|
+
return null;
|
|
7099
|
+
}
|
|
7100
|
+
const [, type, id] = match;
|
|
7101
|
+
if (!id) {
|
|
7102
|
+
return null;
|
|
7103
|
+
}
|
|
7104
|
+
return { type, id };
|
|
7105
|
+
}
|
|
7106
|
+
function buildRef(type, id) {
|
|
7107
|
+
return `ref:${type}:${id}`;
|
|
7108
|
+
}
|
|
7109
|
+
function isRefPointer(value) {
|
|
7110
|
+
return typeof value === "string" && parseRef(value) !== null;
|
|
7111
|
+
}
|
|
7112
|
+
function extractAllRefs(data) {
|
|
7113
|
+
const results = [];
|
|
7114
|
+
const visit = (value, path) => {
|
|
7115
|
+
if (typeof value === "string") {
|
|
7116
|
+
if (isRefPointer(value)) {
|
|
7117
|
+
results.push({ pointer: value, fieldPath: path });
|
|
7118
|
+
}
|
|
7119
|
+
return;
|
|
7120
|
+
}
|
|
7121
|
+
if (Array.isArray(value)) {
|
|
7122
|
+
value.forEach((item, index) => {
|
|
7123
|
+
const nextPath = path ? `${path}[${index}]` : `[${index}]`;
|
|
7124
|
+
visit(item, nextPath);
|
|
7125
|
+
});
|
|
7126
|
+
return;
|
|
7127
|
+
}
|
|
7128
|
+
if (value && typeof value === "object") {
|
|
7129
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
7130
|
+
const nextPath = path ? `${path}.${key}` : key;
|
|
7131
|
+
visit(entry, nextPath);
|
|
7132
|
+
}
|
|
7133
|
+
}
|
|
7134
|
+
};
|
|
7135
|
+
visit(data, "");
|
|
7136
|
+
return results;
|
|
7137
|
+
}
|
|
7032
7138
|
// src/types/serverConfig.ts
|
|
7033
7139
|
var DEFAULT_SERVER_CONFIG = {
|
|
7034
7140
|
server: {
|
|
7035
7141
|
port: 5100,
|
|
7036
7142
|
host: "::"
|
|
7037
7143
|
},
|
|
7144
|
+
git_hosts: [],
|
|
7145
|
+
daemon_scheduler: {
|
|
7146
|
+
enabled: true,
|
|
7147
|
+
host: "localhost",
|
|
7148
|
+
port: 5110,
|
|
7149
|
+
workspace: "./data/daemon-workspace",
|
|
7150
|
+
max_daemons: 20
|
|
7151
|
+
},
|
|
7038
7152
|
doc_db: {
|
|
7039
7153
|
provider: "sqlite",
|
|
7040
7154
|
sqlite: {
|
|
@@ -7057,6 +7171,9 @@ var DEFAULT_SERVER_CONFIG = {
|
|
|
7057
7171
|
username: "root",
|
|
7058
7172
|
password: "nebula",
|
|
7059
7173
|
space: "c4a"
|
|
7174
|
+
},
|
|
7175
|
+
duckdb: {
|
|
7176
|
+
path: "./data/c4a-graph.duckdb"
|
|
7060
7177
|
}
|
|
7061
7178
|
},
|
|
7062
7179
|
vector_db: {
|
|
@@ -7078,7 +7195,8 @@ var DEFAULT_SERVER_CONFIG = {
|
|
|
7078
7195
|
openai: {
|
|
7079
7196
|
api_key: "",
|
|
7080
7197
|
base_url: "",
|
|
7081
|
-
default_model: "gpt-5.3-codex"
|
|
7198
|
+
default_model: "gpt-5.3-codex",
|
|
7199
|
+
wire_api: "chat"
|
|
7082
7200
|
},
|
|
7083
7201
|
anthropic: {
|
|
7084
7202
|
api_key: "",
|
|
@@ -10753,23 +10871,23 @@ class ZodEffects extends ZodType {
|
|
|
10753
10871
|
}
|
|
10754
10872
|
if (effect.type === "transform") {
|
|
10755
10873
|
if (ctx.common.async === false) {
|
|
10756
|
-
const
|
|
10874
|
+
const base = this._def.schema._parseSync({
|
|
10757
10875
|
data: ctx.data,
|
|
10758
10876
|
path: ctx.path,
|
|
10759
10877
|
parent: ctx
|
|
10760
10878
|
});
|
|
10761
|
-
if (!isValid(
|
|
10879
|
+
if (!isValid(base))
|
|
10762
10880
|
return INVALID;
|
|
10763
|
-
const result = effect.transform(
|
|
10881
|
+
const result = effect.transform(base.value, checkCtx);
|
|
10764
10882
|
if (result instanceof Promise) {
|
|
10765
10883
|
throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);
|
|
10766
10884
|
}
|
|
10767
10885
|
return { status: status.value, value: result };
|
|
10768
10886
|
} else {
|
|
10769
|
-
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((
|
|
10770
|
-
if (!isValid(
|
|
10887
|
+
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {
|
|
10888
|
+
if (!isValid(base))
|
|
10771
10889
|
return INVALID;
|
|
10772
|
-
return Promise.resolve(effect.transform(
|
|
10890
|
+
return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({
|
|
10773
10891
|
status: status.value,
|
|
10774
10892
|
value: result
|
|
10775
10893
|
}));
|
|
@@ -11158,7 +11276,7 @@ var atomFieldSchema = exports_external.enum(Object.values(AtomField));
|
|
|
11158
11276
|
var kindSchema = exports_external.enum(Object.values(Kind));
|
|
11159
11277
|
var scopeSchema = exports_external.literal("project");
|
|
11160
11278
|
var perspectiveSchema = exports_external.enum(Object.values(Perspective));
|
|
11161
|
-
var
|
|
11279
|
+
var extractionConfidenceSchema = exports_external.object({
|
|
11162
11280
|
structural: exports_external.number().min(0).max(1),
|
|
11163
11281
|
semantic: exports_external.number().min(0).max(1)
|
|
11164
11282
|
});
|
|
@@ -11166,19 +11284,36 @@ var metadataSchema = exports_external.object({
|
|
|
11166
11284
|
created_at: exports_external.string().datetime(),
|
|
11167
11285
|
updated_at: exports_external.string().datetime(),
|
|
11168
11286
|
version_tag: exports_external.string().optional(),
|
|
11169
|
-
|
|
11287
|
+
extraction_confidence: extractionConfidenceSchema.optional(),
|
|
11288
|
+
confidence: exports_external.number().min(0).max(1).optional(),
|
|
11289
|
+
aliases: exports_external.array(exports_external.string()).optional(),
|
|
11290
|
+
rank: exports_external.number().optional(),
|
|
11291
|
+
community_id: exports_external.string().optional(),
|
|
11292
|
+
community_level: exports_external.number().optional()
|
|
11293
|
+
});
|
|
11294
|
+
var entityRefPointerSchema = exports_external.string().regex(/^ref:entity:.+$/, "must be a ref pointer in format ref:entity:<id>");
|
|
11295
|
+
var sourceRefSpanSchema = exports_external.object({
|
|
11296
|
+
start: exports_external.number().int().min(1),
|
|
11297
|
+
end: exports_external.number().int().min(1)
|
|
11170
11298
|
});
|
|
11299
|
+
var sourceRefSchema = exports_external.object({
|
|
11300
|
+
ref: exports_external.string(),
|
|
11301
|
+
span: sourceRefSpanSchema.optional()
|
|
11302
|
+
});
|
|
11303
|
+
var sourceRefsSchema = exports_external.array(sourceRefSchema).optional();
|
|
11304
|
+
|
|
11171
11305
|
// src/schemas/atomsSchema.ts
|
|
11172
11306
|
var confidenceAtomSchema = exports_external.number().min(0).max(1).optional();
|
|
11173
11307
|
var entityAtomSchema = exports_external.object({
|
|
11174
11308
|
name: exports_external.string(),
|
|
11175
|
-
kind: kindSchema.optional(),
|
|
11309
|
+
kind: kindSchema.optional().catch(undefined),
|
|
11310
|
+
ref: exports_external.string().optional(),
|
|
11176
11311
|
confidence: confidenceAtomSchema
|
|
11177
11312
|
});
|
|
11178
11313
|
var relationAtomSchema = exports_external.object({
|
|
11179
11314
|
from: exports_external.string(),
|
|
11180
11315
|
to: exports_external.string(),
|
|
11181
|
-
type:
|
|
11316
|
+
type: exports_external.string(),
|
|
11182
11317
|
description: exports_external.string().optional(),
|
|
11183
11318
|
confidence: confidenceAtomSchema
|
|
11184
11319
|
});
|
|
@@ -11186,6 +11321,8 @@ var behaviorAtomSchema = exports_external.object({
|
|
|
11186
11321
|
name: exports_external.string(),
|
|
11187
11322
|
signature: exports_external.string().optional(),
|
|
11188
11323
|
description: exports_external.string().optional(),
|
|
11324
|
+
performed_by: exports_external.array(exports_external.string()).optional(),
|
|
11325
|
+
ref: exports_external.string().optional(),
|
|
11189
11326
|
confidence: confidenceAtomSchema
|
|
11190
11327
|
});
|
|
11191
11328
|
var attributeAtomSchema = exports_external.object({
|
|
@@ -11226,6 +11363,7 @@ var decisionPhaseSchema = exports_external.object({
|
|
|
11226
11363
|
rationale: exports_external.string().optional()
|
|
11227
11364
|
});
|
|
11228
11365
|
var decisionAtomSchema = exports_external.object({
|
|
11366
|
+
name: exports_external.string().optional(),
|
|
11229
11367
|
description: exports_external.string(),
|
|
11230
11368
|
rationale: exports_external.string(),
|
|
11231
11369
|
alternatives: exports_external.array(exports_external.string()).optional(),
|
|
@@ -11248,13 +11386,13 @@ var metricAtomSchema = exports_external.object({
|
|
|
11248
11386
|
});
|
|
11249
11387
|
var roleAtomSchema = exports_external.object({
|
|
11250
11388
|
name: exports_external.string(),
|
|
11251
|
-
kind: exports_external.enum(["
|
|
11389
|
+
kind: exports_external.enum(["human", "team", "persona"]).catch("human"),
|
|
11252
11390
|
performs: exports_external.array(exports_external.string()).optional(),
|
|
11253
|
-
|
|
11391
|
+
description: exports_external.string().optional()
|
|
11254
11392
|
});
|
|
11255
11393
|
var constraintAtomSchema = exports_external.object({
|
|
11256
11394
|
description: exports_external.string(),
|
|
11257
|
-
severity: exports_external.enum(["must", "should", "may"]),
|
|
11395
|
+
severity: exports_external.enum(["must", "should", "may"]).catch("must"),
|
|
11258
11396
|
metric_ref: exports_external.string().optional(),
|
|
11259
11397
|
confidence: confidenceAtomSchema
|
|
11260
11398
|
});
|
|
@@ -11281,6 +11419,16 @@ var comparisonAtomSchema = exports_external.object({
|
|
|
11281
11419
|
decision_ref: exports_external.string().optional(),
|
|
11282
11420
|
confidence: confidenceAtomSchema
|
|
11283
11421
|
});
|
|
11422
|
+
var claimAtomSchema = exports_external.object({
|
|
11423
|
+
claim_type: exports_external.string(),
|
|
11424
|
+
description: exports_external.string(),
|
|
11425
|
+
status: exports_external.enum(["active", "deprecated", "proposed"]),
|
|
11426
|
+
valid_from: exports_external.string(),
|
|
11427
|
+
valid_until: exports_external.string().optional(),
|
|
11428
|
+
session_ref: exports_external.string().optional(),
|
|
11429
|
+
changed_by: exports_external.string(),
|
|
11430
|
+
confidence: confidenceAtomSchema
|
|
11431
|
+
});
|
|
11284
11432
|
var dataAtomsSchema = exports_external.object({
|
|
11285
11433
|
entities: exports_external.array(entityAtomSchema).optional(),
|
|
11286
11434
|
relations: exports_external.array(relationAtomSchema).optional(),
|
|
@@ -11295,31 +11443,115 @@ var dataAtomsSchema = exports_external.object({
|
|
|
11295
11443
|
roles: exports_external.array(roleAtomSchema).optional(),
|
|
11296
11444
|
constraints: exports_external.array(constraintAtomSchema).optional(),
|
|
11297
11445
|
comparisons: exports_external.array(comparisonAtomSchema).optional(),
|
|
11298
|
-
boundaries: exports_external.array(boundaryAtomSchema).optional()
|
|
11299
|
-
|
|
11300
|
-
|
|
11301
|
-
return;
|
|
11302
|
-
}
|
|
11446
|
+
boundaries: exports_external.array(boundaryAtomSchema).optional(),
|
|
11447
|
+
claims: exports_external.array(claimAtomSchema).optional()
|
|
11448
|
+
}).superRefine((atoms, ctx) => {
|
|
11303
11449
|
const stateValues = new Set;
|
|
11304
|
-
|
|
11450
|
+
const stateNames = new Set;
|
|
11451
|
+
for (const state of atoms.states ?? []) {
|
|
11452
|
+
stateNames.add(state.name);
|
|
11305
11453
|
for (const value of state.values) {
|
|
11306
11454
|
stateValues.add(value);
|
|
11307
11455
|
}
|
|
11308
11456
|
}
|
|
11309
|
-
|
|
11310
|
-
|
|
11311
|
-
|
|
11312
|
-
|
|
11313
|
-
|
|
11314
|
-
|
|
11315
|
-
|
|
11457
|
+
const behaviorNames = new Set;
|
|
11458
|
+
for (const behavior of atoms.behaviors ?? []) {
|
|
11459
|
+
behaviorNames.add(behavior.name);
|
|
11460
|
+
}
|
|
11461
|
+
const roleNames = new Set;
|
|
11462
|
+
for (const role of atoms.roles ?? []) {
|
|
11463
|
+
roleNames.add(role.name);
|
|
11464
|
+
}
|
|
11465
|
+
const eventNames = new Set;
|
|
11466
|
+
for (const event of atoms.events ?? []) {
|
|
11467
|
+
eventNames.add(event.name);
|
|
11468
|
+
}
|
|
11469
|
+
const metricNames = new Set;
|
|
11470
|
+
for (const metric of atoms.metrics ?? []) {
|
|
11471
|
+
metricNames.add(metric.name);
|
|
11472
|
+
}
|
|
11473
|
+
if (atoms.transitions && atoms.transitions.length > 0) {
|
|
11474
|
+
for (const transition of atoms.transitions) {
|
|
11475
|
+
if (!stateValues.has(transition.from)) {
|
|
11476
|
+
ctx.addIssue({
|
|
11477
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11478
|
+
path: ["transitions"],
|
|
11479
|
+
message: `transition.from references unknown state: ${transition.from}`
|
|
11480
|
+
});
|
|
11481
|
+
}
|
|
11482
|
+
if (!stateValues.has(transition.to)) {
|
|
11483
|
+
ctx.addIssue({
|
|
11484
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11485
|
+
path: ["transitions"],
|
|
11486
|
+
message: `transition.to references unknown state: ${transition.to}`
|
|
11487
|
+
});
|
|
11488
|
+
}
|
|
11489
|
+
const hasEvents = eventNames.size > 0;
|
|
11490
|
+
const hasBehaviors = behaviorNames.size > 0;
|
|
11491
|
+
if (hasEvents || hasBehaviors) {
|
|
11492
|
+
const triggerMatchesEvent = hasEvents && eventNames.has(transition.trigger);
|
|
11493
|
+
const triggerMatchesBehavior = hasBehaviors && behaviorNames.has(transition.trigger);
|
|
11494
|
+
if (!triggerMatchesEvent && !triggerMatchesBehavior) {
|
|
11495
|
+
ctx.addIssue({
|
|
11496
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11497
|
+
path: ["transitions"],
|
|
11498
|
+
message: `transition.trigger references unknown event/behavior: ${transition.trigger}`
|
|
11499
|
+
});
|
|
11500
|
+
}
|
|
11501
|
+
}
|
|
11316
11502
|
}
|
|
11317
|
-
|
|
11318
|
-
|
|
11319
|
-
|
|
11320
|
-
|
|
11321
|
-
|
|
11322
|
-
|
|
11503
|
+
}
|
|
11504
|
+
if (atoms.roles && atoms.roles.length > 0) {
|
|
11505
|
+
for (const [index, role] of atoms.roles.entries()) {
|
|
11506
|
+
for (const perform of role.performs ?? []) {
|
|
11507
|
+
if (!behaviorNames.has(perform)) {
|
|
11508
|
+
ctx.addIssue({
|
|
11509
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11510
|
+
path: ["roles", index, "performs"],
|
|
11511
|
+
message: `role.performs references unknown behavior: ${perform}`
|
|
11512
|
+
});
|
|
11513
|
+
}
|
|
11514
|
+
}
|
|
11515
|
+
}
|
|
11516
|
+
}
|
|
11517
|
+
if (atoms.behaviors && atoms.behaviors.length > 0) {
|
|
11518
|
+
for (const [index, behavior] of atoms.behaviors.entries()) {
|
|
11519
|
+
for (const performer of behavior.performed_by ?? []) {
|
|
11520
|
+
if (!roleNames.has(performer)) {
|
|
11521
|
+
ctx.addIssue({
|
|
11522
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11523
|
+
path: ["behaviors", index, "performed_by"],
|
|
11524
|
+
message: `behavior.performed_by references unknown role: ${performer}`
|
|
11525
|
+
});
|
|
11526
|
+
}
|
|
11527
|
+
}
|
|
11528
|
+
}
|
|
11529
|
+
}
|
|
11530
|
+
if (atoms.rules && atoms.rules.length > 0) {
|
|
11531
|
+
const allowedDependsOn = new Set([...stateNames, ...metricNames]);
|
|
11532
|
+
for (const [index, rule] of atoms.rules.entries()) {
|
|
11533
|
+
for (const dependency of rule.depends_on ?? []) {
|
|
11534
|
+
if (!allowedDependsOn.has(dependency)) {
|
|
11535
|
+
ctx.addIssue({
|
|
11536
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11537
|
+
path: ["rules", index, "depends_on"],
|
|
11538
|
+
message: `rule.depends_on references unknown state/metric: ${dependency}`
|
|
11539
|
+
});
|
|
11540
|
+
}
|
|
11541
|
+
}
|
|
11542
|
+
}
|
|
11543
|
+
}
|
|
11544
|
+
if (atoms.events && atoms.events.length > 0) {
|
|
11545
|
+
for (const [index, event] of atoms.events.entries()) {
|
|
11546
|
+
for (const behaviorName of event.trigger_for ?? []) {
|
|
11547
|
+
if (!behaviorNames.has(behaviorName)) {
|
|
11548
|
+
ctx.addIssue({
|
|
11549
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11550
|
+
path: ["events", index, "trigger_for"],
|
|
11551
|
+
message: `event.trigger_for references unknown behavior: ${behaviorName}`
|
|
11552
|
+
});
|
|
11553
|
+
}
|
|
11554
|
+
}
|
|
11323
11555
|
}
|
|
11324
11556
|
}
|
|
11325
11557
|
});
|
|
@@ -11335,7 +11567,8 @@ var atomsWhitelistByEntityType = {
|
|
|
11335
11567
|
"states" /* States */,
|
|
11336
11568
|
"rules" /* Rules */,
|
|
11337
11569
|
"transitions" /* Transitions */,
|
|
11338
|
-
"events" /* Events
|
|
11570
|
+
"events" /* Events */,
|
|
11571
|
+
"claims" /* Claims */
|
|
11339
11572
|
]),
|
|
11340
11573
|
["process" /* Process */]: new Set,
|
|
11341
11574
|
["sor" /* SoR */]: new Set([
|
|
@@ -11351,7 +11584,8 @@ var atomsWhitelistByEntityType = {
|
|
|
11351
11584
|
"metrics" /* Metrics */,
|
|
11352
11585
|
"roles" /* Roles */,
|
|
11353
11586
|
"constraints" /* Constraints */,
|
|
11354
|
-
"comparisons" /* Comparisons
|
|
11587
|
+
"comparisons" /* Comparisons */,
|
|
11588
|
+
"claims" /* Claims */
|
|
11355
11589
|
]),
|
|
11356
11590
|
["contract" /* Contract */]: new Set,
|
|
11357
11591
|
["epic" /* Epic */]: new Set([
|
|
@@ -11359,15 +11593,16 @@ var atomsWhitelistByEntityType = {
|
|
|
11359
11593
|
"metrics" /* Metrics */,
|
|
11360
11594
|
"roles" /* Roles */,
|
|
11361
11595
|
"constraints" /* Constraints */,
|
|
11362
|
-
"comparisons" /* Comparisons
|
|
11596
|
+
"comparisons" /* Comparisons */,
|
|
11597
|
+
"claims" /* Claims */
|
|
11363
11598
|
]),
|
|
11364
11599
|
["document" /* Document */]: new Set
|
|
11365
11600
|
};
|
|
11366
11601
|
var allowedAtomFieldSchema = atomFieldSchema;
|
|
11367
|
-
var validateAtomsWhitelist = (entityType,
|
|
11602
|
+
var validateAtomsWhitelist = (entityType, atoms) => {
|
|
11368
11603
|
const allowed = atomsWhitelistByEntityType[entityType] ?? new Set;
|
|
11369
11604
|
const illegalFields = [];
|
|
11370
|
-
for (const [key, value] of Object.entries(
|
|
11605
|
+
for (const [key, value] of Object.entries(atoms)) {
|
|
11371
11606
|
if (value === undefined) {
|
|
11372
11607
|
continue;
|
|
11373
11608
|
}
|
|
@@ -11377,6 +11612,60 @@ var validateAtomsWhitelist = (entityType, atoms2) => {
|
|
|
11377
11612
|
}
|
|
11378
11613
|
return illegalFields;
|
|
11379
11614
|
};
|
|
11615
|
+
|
|
11616
|
+
// src/types/docDigest.ts
|
|
11617
|
+
var paragraphAtomSchema = exports_external.object({
|
|
11618
|
+
entities: exports_external.array(entityAtomSchema).optional(),
|
|
11619
|
+
relations: exports_external.array(relationAtomSchema).optional(),
|
|
11620
|
+
behaviors: exports_external.array(behaviorAtomSchema).optional(),
|
|
11621
|
+
attributes: exports_external.array(attributeAtomSchema).optional(),
|
|
11622
|
+
states: exports_external.array(stateAtomSchema).optional(),
|
|
11623
|
+
rules: exports_external.array(ruleAtomSchema).optional(),
|
|
11624
|
+
transitions: exports_external.array(transitionAtomSchema).optional(),
|
|
11625
|
+
events: exports_external.array(eventAtomSchema).optional(),
|
|
11626
|
+
decisions: exports_external.array(decisionAtomSchema).optional(),
|
|
11627
|
+
metrics: exports_external.array(metricAtomSchema).optional(),
|
|
11628
|
+
roles: exports_external.array(roleAtomSchema).optional(),
|
|
11629
|
+
constraints: exports_external.array(constraintAtomSchema).optional(),
|
|
11630
|
+
comparisons: exports_external.array(comparisonAtomSchema).optional(),
|
|
11631
|
+
boundaries: exports_external.array(boundaryAtomSchema).optional()
|
|
11632
|
+
});
|
|
11633
|
+
var docParagraphSchema = exports_external.object({
|
|
11634
|
+
text: exports_external.string(),
|
|
11635
|
+
atoms: paragraphAtomSchema
|
|
11636
|
+
});
|
|
11637
|
+
var sectionSchema = exports_external.object({
|
|
11638
|
+
heading: exports_external.string(),
|
|
11639
|
+
level: exports_external.number().int().min(0).max(6),
|
|
11640
|
+
paragraphs: exports_external.array(docParagraphSchema)
|
|
11641
|
+
});
|
|
11642
|
+
var embeddingEntrySchema = exports_external.object({
|
|
11643
|
+
sectionIndex: exports_external.number().int(),
|
|
11644
|
+
paragraphIndex: exports_external.number().int(),
|
|
11645
|
+
vector: exports_external.array(exports_external.number())
|
|
11646
|
+
});
|
|
11647
|
+
var docDigestSchema = exports_external.object({
|
|
11648
|
+
version: exports_external.literal("1"),
|
|
11649
|
+
sections: exports_external.array(sectionSchema),
|
|
11650
|
+
embeddings: exports_external.array(embeddingEntrySchema),
|
|
11651
|
+
metadata: exports_external.object({
|
|
11652
|
+
sourceId: exports_external.string(),
|
|
11653
|
+
hashId: exports_external.string(),
|
|
11654
|
+
sourcePath: exports_external.string(),
|
|
11655
|
+
contentHash: exports_external.string(),
|
|
11656
|
+
chunkCount: exports_external.number().int(),
|
|
11657
|
+
totalTokens: exports_external.number().int(),
|
|
11658
|
+
llmCalls: exports_external.number().int(),
|
|
11659
|
+
processedAt: exports_external.string()
|
|
11660
|
+
})
|
|
11661
|
+
});
|
|
11662
|
+
var docChunkParagraphSchema = exports_external.object({
|
|
11663
|
+
tag: exports_external.string().regex(/^P\d+$/),
|
|
11664
|
+
atoms: paragraphAtomSchema
|
|
11665
|
+
});
|
|
11666
|
+
var docChunkResultSchema = exports_external.object({
|
|
11667
|
+
paragraphs: exports_external.array(docChunkParagraphSchema)
|
|
11668
|
+
});
|
|
11380
11669
|
// src/schemas/entitySchema.ts
|
|
11381
11670
|
var baseEntitySchema = exports_external.object({
|
|
11382
11671
|
id: exports_external.string(),
|
|
@@ -11385,7 +11674,8 @@ var baseEntitySchema = exports_external.object({
|
|
|
11385
11674
|
kind: kindSchema,
|
|
11386
11675
|
scope: scopeSchema,
|
|
11387
11676
|
perspective: perspectiveSchema,
|
|
11388
|
-
metadata: metadataSchema
|
|
11677
|
+
metadata: metadataSchema,
|
|
11678
|
+
source_refs: sourceRefsSchema
|
|
11389
11679
|
});
|
|
11390
11680
|
var productDataSchema = exports_external.object({
|
|
11391
11681
|
description: exports_external.string().optional(),
|
|
@@ -11399,7 +11689,8 @@ var productEntitySchema = baseEntitySchema.extend({
|
|
|
11399
11689
|
});
|
|
11400
11690
|
var systemDataSchema = exports_external.object({
|
|
11401
11691
|
description: exports_external.string().optional(),
|
|
11402
|
-
corresponds_to: exports_external.string().optional()
|
|
11692
|
+
corresponds_to: exports_external.string().optional(),
|
|
11693
|
+
atoms: exports_external.undefined().optional()
|
|
11403
11694
|
});
|
|
11404
11695
|
var systemEntitySchema = baseEntitySchema.extend({
|
|
11405
11696
|
type: exports_external.literal("system" /* System */),
|
|
@@ -11445,9 +11736,10 @@ var sorEntitySchema = baseEntitySchema.extend({
|
|
|
11445
11736
|
data: sorDataSchema
|
|
11446
11737
|
});
|
|
11447
11738
|
var contractDataSchema = exports_external.object({
|
|
11448
|
-
format: exports_external.enum(["openapi", "asyncapi", "proto"]),
|
|
11739
|
+
format: exports_external.enum(["openapi", "asyncapi", "proto", "graphql", "custom"]),
|
|
11449
11740
|
spec: exports_external.string(),
|
|
11450
|
-
|
|
11741
|
+
version: exports_external.string().optional(),
|
|
11742
|
+
description: exports_external.string().optional()
|
|
11451
11743
|
});
|
|
11452
11744
|
var contractEntitySchema = baseEntitySchema.extend({
|
|
11453
11745
|
type: exports_external.literal("contract" /* Contract */),
|
|
@@ -11455,7 +11747,7 @@ var contractEntitySchema = baseEntitySchema.extend({
|
|
|
11455
11747
|
});
|
|
11456
11748
|
var epicDataSchema = exports_external.object({
|
|
11457
11749
|
description: exports_external.string().optional(),
|
|
11458
|
-
product_refs: exports_external.array(
|
|
11750
|
+
product_refs: exports_external.array(entityRefPointerSchema).optional(),
|
|
11459
11751
|
atoms: dataAtomsSchema.optional()
|
|
11460
11752
|
});
|
|
11461
11753
|
var epicEntitySchema = baseEntitySchema.extend({
|
|
@@ -11531,18 +11823,45 @@ var entitySchema = exports_external.discriminatedUnion("type", [
|
|
|
11531
11823
|
});
|
|
11532
11824
|
}
|
|
11533
11825
|
}
|
|
11826
|
+
if (entity2.type === "sor" /* SoR */ && entity2.data.atoms) {
|
|
11827
|
+
const { constraints, rules } = entity2.data.atoms;
|
|
11828
|
+
const hasConstraints = Array.isArray(constraints) && constraints.length > 0;
|
|
11829
|
+
const hasRules = Array.isArray(rules) && rules.length > 0;
|
|
11830
|
+
if (!hasConstraints && !hasRules) {
|
|
11831
|
+
ctx.addIssue({
|
|
11832
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11833
|
+
path: ["data", "atoms"],
|
|
11834
|
+
message: "SoR must have at least one constraint or rule"
|
|
11835
|
+
});
|
|
11836
|
+
}
|
|
11837
|
+
}
|
|
11838
|
+
if (entity2.type === "epic" /* Epic */ && entity2.data.atoms) {
|
|
11839
|
+
const { decisions } = entity2.data.atoms;
|
|
11840
|
+
const hasDecisions = Array.isArray(decisions) && decisions.length > 0;
|
|
11841
|
+
if (!hasDecisions) {
|
|
11842
|
+
ctx.addIssue({
|
|
11843
|
+
code: exports_external.ZodIssueCode.custom,
|
|
11844
|
+
path: ["data", "atoms"],
|
|
11845
|
+
message: "Epic must have at least one decision"
|
|
11846
|
+
});
|
|
11847
|
+
}
|
|
11848
|
+
}
|
|
11534
11849
|
});
|
|
11535
11850
|
// src/schemas/relationSchema.ts
|
|
11536
11851
|
var relationDataSchema = exports_external.object({
|
|
11537
|
-
description: exports_external.string().optional()
|
|
11852
|
+
description: exports_external.string().optional(),
|
|
11853
|
+
_source: exports_external.literal("field_sync").optional()
|
|
11538
11854
|
});
|
|
11539
11855
|
var relationSchema = exports_external.object({
|
|
11540
11856
|
id: exports_external.string(),
|
|
11541
11857
|
type: relationTypeSchema,
|
|
11542
11858
|
from: exports_external.string(),
|
|
11543
11859
|
to: exports_external.string(),
|
|
11860
|
+
weight: exports_external.number().optional(),
|
|
11861
|
+
confidence: exports_external.number().min(0).max(1).optional(),
|
|
11544
11862
|
data: relationDataSchema.optional(),
|
|
11545
|
-
metadata: metadataSchema.optional()
|
|
11863
|
+
metadata: metadataSchema.optional(),
|
|
11864
|
+
source_refs: sourceRefsSchema
|
|
11546
11865
|
});
|
|
11547
11866
|
// src/errors/c4aError.ts
|
|
11548
11867
|
class C4AError extends Error {
|
|
@@ -11590,8 +11909,36 @@ var ErrorCode;
|
|
|
11590
11909
|
ErrorCode2["LLM_NOT_AVAILABLE"] = "LLM_NOT_AVAILABLE";
|
|
11591
11910
|
ErrorCode2["LLM_CALL_FAILED"] = "LLM_CALL_FAILED";
|
|
11592
11911
|
ErrorCode2["LLM_AUTH_FAILED"] = "LLM_AUTH_FAILED";
|
|
11912
|
+
ErrorCode2["AUTH_REQUIRED"] = "AUTH_REQUIRED";
|
|
11913
|
+
ErrorCode2["AUTH_INVALID_TOKEN"] = "AUTH_INVALID_TOKEN";
|
|
11914
|
+
ErrorCode2["AUTH_INVALID_API_KEY"] = "AUTH_INVALID_API_KEY";
|
|
11915
|
+
ErrorCode2["AUTH_PROVIDER_ERROR"] = "AUTH_PROVIDER_ERROR";
|
|
11916
|
+
ErrorCode2["AUTH_RESERVED_NAME"] = "AUTH_RESERVED_NAME";
|
|
11917
|
+
ErrorCode2["DAEMON_OFFLINE"] = "DAEMON_OFFLINE";
|
|
11918
|
+
ErrorCode2["SOURCE_NOT_FOUND"] = "SOURCE_NOT_FOUND";
|
|
11919
|
+
ErrorCode2["REPO_PATH_NOT_FOUND"] = "REPO_PATH_NOT_FOUND";
|
|
11920
|
+
ErrorCode2["COMMIT_NOT_FOUND"] = "COMMIT_NOT_FOUND";
|
|
11921
|
+
ErrorCode2["INDEX_IN_PROGRESS"] = "INDEX_IN_PROGRESS";
|
|
11922
|
+
ErrorCode2["DIGEST_NOT_FOUND"] = "DIGEST_NOT_FOUND";
|
|
11923
|
+
ErrorCode2["INVALID_REGEX"] = "INVALID_REGEX";
|
|
11924
|
+
ErrorCode2["SOURCE_ACCESS_DENIED"] = "SOURCE_ACCESS_DENIED";
|
|
11925
|
+
ErrorCode2["WORKSPACE_ISOLATION"] = "WORKSPACE_ISOLATION";
|
|
11593
11926
|
ErrorCode2["VECTOR_DIMENSION_MISMATCH"] = "VECTOR_DIMENSION_MISMATCH";
|
|
11594
11927
|
ErrorCode2["VECTOR_REBUILD_PARTIAL"] = "VECTOR_REBUILD_PARTIAL";
|
|
11928
|
+
ErrorCode2["COMMIT_NOT_AVAILABLE"] = "COMMIT_NOT_AVAILABLE";
|
|
11929
|
+
ErrorCode2["DAEMON_AUTO_START_FAILED"] = "DAEMON_AUTO_START_FAILED";
|
|
11930
|
+
ErrorCode2["GIT_ARCHIVE_FAILED"] = "GIT_ARCHIVE_FAILED";
|
|
11931
|
+
ErrorCode2["GIT_HOST_NOT_CONFIGURED"] = "GIT_HOST_NOT_CONFIGURED";
|
|
11932
|
+
ErrorCode2["GIT_API_RATE_LIMITED"] = "GIT_API_RATE_LIMITED";
|
|
11933
|
+
ErrorCode2["GIT_API_TREE_TRUNCATED"] = "GIT_API_TREE_TRUNCATED";
|
|
11934
|
+
ErrorCode2["GIT_API_AUTH_FAILED"] = "GIT_API_AUTH_FAILED";
|
|
11935
|
+
ErrorCode2["GIT_API_REPO_NOT_FOUND"] = "GIT_API_REPO_NOT_FOUND";
|
|
11936
|
+
ErrorCode2["GIT_API_NETWORK_ERROR"] = "GIT_API_NETWORK_ERROR";
|
|
11937
|
+
ErrorCode2["DOC_INDEX_LLM_UNAVAILABLE"] = "DOC_INDEX_LLM_UNAVAILABLE";
|
|
11938
|
+
ErrorCode2["DOC_INDEX_EMBEDDING_UNAVAILABLE"] = "DOC_INDEX_EMBEDDING_UNAVAILABLE";
|
|
11939
|
+
ErrorCode2["DOC_INDEX_CONTENT_MISSING"] = "DOC_INDEX_CONTENT_MISSING";
|
|
11940
|
+
ErrorCode2["DOC_INDEX_PARSE_FAILED"] = "DOC_INDEX_PARSE_FAILED";
|
|
11941
|
+
ErrorCode2["DOC_INDEX_LLM_EXHAUSTED"] = "DOC_INDEX_LLM_EXHAUSTED";
|
|
11595
11942
|
ErrorCode2["UNKNOWN"] = "UNKNOWN";
|
|
11596
11943
|
})(ErrorCode ||= {});
|
|
11597
11944
|
// src/errors/httpStatus.ts
|
|
@@ -11602,29 +11949,57 @@ var ERROR_CODE_HTTP_STATUS = {
|
|
|
11602
11949
|
["PARSE_YAML" /* PARSE_YAML */]: 400,
|
|
11603
11950
|
["RELATION_INVALID" /* RELATION_INVALID */]: 400,
|
|
11604
11951
|
["QUERY_INVALID_PARAMS" /* QUERY_INVALID_PARAMS */]: 400,
|
|
11952
|
+
["INVALID_REGEX" /* INVALID_REGEX */]: 400,
|
|
11605
11953
|
["BACKUP_VERSION_INCOMPATIBLE" /* BACKUP_VERSION_INCOMPATIBLE */]: 400,
|
|
11606
11954
|
["BACKUP_MANIFEST_INVALID" /* BACKUP_MANIFEST_INVALID */]: 400,
|
|
11607
11955
|
["VECTOR_DIMENSION_MISMATCH" /* VECTOR_DIMENSION_MISMATCH */]: 400,
|
|
11608
11956
|
["STORAGE_NOT_FOUND" /* STORAGE_NOT_FOUND */]: 404,
|
|
11609
11957
|
["ENTITY_NOT_FOUND" /* ENTITY_NOT_FOUND */]: 404,
|
|
11610
11958
|
["BACKUP_DIR_NOT_FOUND" /* BACKUP_DIR_NOT_FOUND */]: 404,
|
|
11959
|
+
["SOURCE_NOT_FOUND" /* SOURCE_NOT_FOUND */]: 404,
|
|
11960
|
+
["DIGEST_NOT_FOUND" /* DIGEST_NOT_FOUND */]: 404,
|
|
11611
11961
|
["STORAGE_CONFLICT" /* STORAGE_CONFLICT */]: 409,
|
|
11612
11962
|
["ENTITY_DUPLICATE" /* ENTITY_DUPLICATE */]: 409,
|
|
11963
|
+
["INDEX_IN_PROGRESS" /* INDEX_IN_PROGRESS */]: 409,
|
|
11613
11964
|
["API_UNAUTHORIZED" /* API_UNAUTHORIZED */]: 401,
|
|
11614
11965
|
["LLM_AUTH_FAILED" /* LLM_AUTH_FAILED */]: 401,
|
|
11966
|
+
["AUTH_REQUIRED" /* AUTH_REQUIRED */]: 401,
|
|
11967
|
+
["AUTH_INVALID_TOKEN" /* AUTH_INVALID_TOKEN */]: 401,
|
|
11968
|
+
["AUTH_INVALID_API_KEY" /* AUTH_INVALID_API_KEY */]: 401,
|
|
11969
|
+
["AUTH_RESERVED_NAME" /* AUTH_RESERVED_NAME */]: 400,
|
|
11970
|
+
["SOURCE_ACCESS_DENIED" /* SOURCE_ACCESS_DENIED */]: 403,
|
|
11971
|
+
["REPO_PATH_NOT_FOUND" /* REPO_PATH_NOT_FOUND */]: 422,
|
|
11972
|
+
["COMMIT_NOT_FOUND" /* COMMIT_NOT_FOUND */]: 422,
|
|
11973
|
+
["COMMIT_NOT_AVAILABLE" /* COMMIT_NOT_AVAILABLE */]: 422,
|
|
11974
|
+
["GIT_HOST_NOT_CONFIGURED" /* GIT_HOST_NOT_CONFIGURED */]: 422,
|
|
11975
|
+
["GIT_API_TREE_TRUNCATED" /* GIT_API_TREE_TRUNCATED */]: 422,
|
|
11615
11976
|
["API_RATE_LIMITED" /* API_RATE_LIMITED */]: 429,
|
|
11977
|
+
["GIT_API_RATE_LIMITED" /* GIT_API_RATE_LIMITED */]: 429,
|
|
11616
11978
|
["API_NOT_IMPLEMENTED" /* API_NOT_IMPLEMENTED */]: 501,
|
|
11617
11979
|
["BATCH_PARTIAL_FAILURE" /* BATCH_PARTIAL_FAILURE */]: 200,
|
|
11618
11980
|
["VECTOR_REBUILD_PARTIAL" /* VECTOR_REBUILD_PARTIAL */]: 200,
|
|
11619
11981
|
["STORAGE_FAILED" /* STORAGE_FAILED */]: 500,
|
|
11620
11982
|
["EMBEDDING_FAILED" /* EMBEDDING_FAILED */]: 500,
|
|
11621
11983
|
["LLM_CALL_FAILED" /* LLM_CALL_FAILED */]: 500,
|
|
11984
|
+
["GIT_API_NETWORK_ERROR" /* GIT_API_NETWORK_ERROR */]: 502,
|
|
11622
11985
|
["BACKUP_FAILED" /* BACKUP_FAILED */]: 500,
|
|
11623
11986
|
["RESTORE_FAILED" /* RESTORE_FAILED */]: 500,
|
|
11624
11987
|
["PURGE_FAILED" /* PURGE_FAILED */]: 500,
|
|
11988
|
+
["GIT_ARCHIVE_FAILED" /* GIT_ARCHIVE_FAILED */]: 500,
|
|
11625
11989
|
["EMBEDDING_NOT_AVAILABLE" /* EMBEDDING_NOT_AVAILABLE */]: 503,
|
|
11626
11990
|
["LLM_NOT_AVAILABLE" /* LLM_NOT_AVAILABLE */]: 503,
|
|
11627
|
-
["
|
|
11991
|
+
["DAEMON_OFFLINE" /* DAEMON_OFFLINE */]: 503,
|
|
11992
|
+
["DAEMON_AUTO_START_FAILED" /* DAEMON_AUTO_START_FAILED */]: 503,
|
|
11993
|
+
["GIT_API_AUTH_FAILED" /* GIT_API_AUTH_FAILED */]: 502,
|
|
11994
|
+
["GIT_API_REPO_NOT_FOUND" /* GIT_API_REPO_NOT_FOUND */]: 404,
|
|
11995
|
+
["AUTH_PROVIDER_ERROR" /* AUTH_PROVIDER_ERROR */]: 502,
|
|
11996
|
+
["DOC_INDEX_LLM_UNAVAILABLE" /* DOC_INDEX_LLM_UNAVAILABLE */]: 503,
|
|
11997
|
+
["DOC_INDEX_EMBEDDING_UNAVAILABLE" /* DOC_INDEX_EMBEDDING_UNAVAILABLE */]: 503,
|
|
11998
|
+
["DOC_INDEX_CONTENT_MISSING" /* DOC_INDEX_CONTENT_MISSING */]: 404,
|
|
11999
|
+
["DOC_INDEX_PARSE_FAILED" /* DOC_INDEX_PARSE_FAILED */]: 422,
|
|
12000
|
+
["DOC_INDEX_LLM_EXHAUSTED" /* DOC_INDEX_LLM_EXHAUSTED */]: 502,
|
|
12001
|
+
["UNKNOWN" /* UNKNOWN */]: 500,
|
|
12002
|
+
["WORKSPACE_ISOLATION" /* WORKSPACE_ISOLATION */]: 400
|
|
11628
12003
|
};
|
|
11629
12004
|
function mapErrorCodeToStatus(code) {
|
|
11630
12005
|
return ERROR_CODE_HTTP_STATUS[code] ?? 500;
|
|
@@ -11681,31 +12056,134 @@ function parseYaml(value) {
|
|
|
11681
12056
|
}
|
|
11682
12057
|
}
|
|
11683
12058
|
// src/constants.ts
|
|
11684
|
-
var
|
|
11685
|
-
var
|
|
11686
|
-
var
|
|
11687
|
-
var
|
|
11688
|
-
var
|
|
11689
|
-
var DEFAULT_CLOUD_LIBRARY_NAME = "个人云";
|
|
12059
|
+
var DEFAULT_WORKSPACE_NAME = "My Brain";
|
|
12060
|
+
var DEFAULT_CLOUD_LIBRARY_NAME = "My Drive";
|
|
12061
|
+
var SUPERTEST_EMAIL = "supertest@context4ai.org";
|
|
12062
|
+
var SUPERTEST_USER_NAME = "SuperTest";
|
|
12063
|
+
var RESERVED_USER_NAMES = ["SuperTest"];
|
|
11690
12064
|
var DAEMON_HEARTBEAT_INTERVAL = 30000;
|
|
11691
12065
|
var DAEMON_OFFLINE_THRESHOLD = 60000;
|
|
12066
|
+
var CLOUD_DAEMON_IDLE_TIMEOUT = 300000;
|
|
12067
|
+
// src/contentTypeRegistry.ts
|
|
12068
|
+
var DEFAULT_CONTENT_TYPES = [
|
|
12069
|
+
{
|
|
12070
|
+
id: "markdown",
|
|
12071
|
+
category: "doc",
|
|
12072
|
+
match: { extensions: [".md", ".txt"] },
|
|
12073
|
+
cas: { encoding: "utf8", hashInput: "content" },
|
|
12074
|
+
pipeline: { digest: ["summary", "outline"], extraction: ["entities", "relations"] },
|
|
12075
|
+
display: { icon: "\uD83D\uDCC4", renderer: "text" }
|
|
12076
|
+
},
|
|
12077
|
+
{
|
|
12078
|
+
id: "typescript",
|
|
12079
|
+
category: "code",
|
|
12080
|
+
match: { extensions: [".ts", ".tsx"] },
|
|
12081
|
+
cas: { encoding: "utf8", hashInput: "content" },
|
|
12082
|
+
pipeline: { digest: ["ast", "summary"], extraction: ["entities", "relations"] },
|
|
12083
|
+
display: { icon: "\uD83D\uDCDC", renderer: "code" }
|
|
12084
|
+
},
|
|
12085
|
+
{
|
|
12086
|
+
id: "package",
|
|
12087
|
+
category: "package",
|
|
12088
|
+
match: { filenames: ["package.json", "go.mod", "pyproject.toml", "Cargo.toml", "pom.xml"] },
|
|
12089
|
+
cas: { encoding: "utf8", hashInput: "identity" },
|
|
12090
|
+
pipeline: { digest: ["summary"], extraction: ["entities", "relations"] },
|
|
12091
|
+
display: { icon: "\uD83D\uDCE6", renderer: "package-card" }
|
|
12092
|
+
},
|
|
12093
|
+
{
|
|
12094
|
+
id: "pdf",
|
|
12095
|
+
category: "binary",
|
|
12096
|
+
match: { extensions: [".pdf"] },
|
|
12097
|
+
cas: { encoding: "base64", hashInput: "content" },
|
|
12098
|
+
pipeline: { digest: [], extraction: [] },
|
|
12099
|
+
display: { icon: "\uD83D\uDCD5", renderer: "binary-preview" }
|
|
12100
|
+
},
|
|
12101
|
+
{
|
|
12102
|
+
id: "msword",
|
|
12103
|
+
category: "binary",
|
|
12104
|
+
match: { extensions: [".doc", ".docx"] },
|
|
12105
|
+
cas: { encoding: "base64", hashInput: "content" },
|
|
12106
|
+
pipeline: { digest: [], extraction: [] },
|
|
12107
|
+
display: { icon: "\uD83D\uDCD8", renderer: "binary-preview" }
|
|
12108
|
+
},
|
|
12109
|
+
{
|
|
12110
|
+
id: "mspowerpoint",
|
|
12111
|
+
category: "binary",
|
|
12112
|
+
match: { extensions: [".ppt", ".pptx"] },
|
|
12113
|
+
cas: { encoding: "base64", hashInput: "content" },
|
|
12114
|
+
pipeline: { digest: [], extraction: [] },
|
|
12115
|
+
display: { icon: "\uD83D\uDCD9", renderer: "binary-preview" }
|
|
12116
|
+
}
|
|
12117
|
+
];
|
|
12118
|
+
var normalizeExtension = (ext) => ext.trim().toLowerCase();
|
|
12119
|
+
var normalizeFilename = (name) => name.trim().toLowerCase();
|
|
12120
|
+
|
|
12121
|
+
class ContentTypeRegistry {
|
|
12122
|
+
definitions;
|
|
12123
|
+
extensionIndex;
|
|
12124
|
+
filenameIndex;
|
|
12125
|
+
constructor(definitions) {
|
|
12126
|
+
this.definitions = definitions;
|
|
12127
|
+
this.extensionIndex = new Map;
|
|
12128
|
+
this.filenameIndex = new Map;
|
|
12129
|
+
for (const def of definitions) {
|
|
12130
|
+
for (const ext of def.match.extensions ?? []) {
|
|
12131
|
+
this.extensionIndex.set(normalizeExtension(ext), def);
|
|
12132
|
+
}
|
|
12133
|
+
for (const name of def.match.filenames ?? []) {
|
|
12134
|
+
this.filenameIndex.set(normalizeFilename(name), def);
|
|
12135
|
+
}
|
|
12136
|
+
}
|
|
12137
|
+
}
|
|
12138
|
+
resolve(filename) {
|
|
12139
|
+
const baseName = filename.includes("/") ? filename.split("/").pop() ?? filename : filename;
|
|
12140
|
+
const normalized = normalizeFilename(baseName);
|
|
12141
|
+
const byName = this.filenameIndex.get(normalized);
|
|
12142
|
+
if (byName)
|
|
12143
|
+
return byName;
|
|
12144
|
+
const dot = normalized.lastIndexOf(".");
|
|
12145
|
+
if (dot < 0)
|
|
12146
|
+
return null;
|
|
12147
|
+
const ext = normalizeExtension(normalized.slice(dot));
|
|
12148
|
+
return this.extensionIndex.get(ext) ?? null;
|
|
12149
|
+
}
|
|
12150
|
+
getManifestFilenames() {
|
|
12151
|
+
const names = new Set;
|
|
12152
|
+
for (const def of this.definitions) {
|
|
12153
|
+
if (def.category !== "package")
|
|
12154
|
+
continue;
|
|
12155
|
+
for (const name of def.match.filenames ?? []) {
|
|
12156
|
+
names.add(normalizeFilename(name));
|
|
12157
|
+
}
|
|
12158
|
+
}
|
|
12159
|
+
return Array.from(names);
|
|
12160
|
+
}
|
|
12161
|
+
getDefinitions() {
|
|
12162
|
+
return [...this.definitions];
|
|
12163
|
+
}
|
|
12164
|
+
}
|
|
12165
|
+
var defaultRegistry = new ContentTypeRegistry(DEFAULT_CONTENT_TYPES);
|
|
12166
|
+
var DEFAULT_CONTENT_TYPE_DEFINITIONS = DEFAULT_CONTENT_TYPES;
|
|
11692
12167
|
// src/fileTypes.ts
|
|
11693
|
-
var
|
|
11694
|
-
|
|
12168
|
+
var collectExtensions = (predicate) => {
|
|
12169
|
+
const extensions = new Set;
|
|
12170
|
+
for (const definition of DEFAULT_CONTENT_TYPE_DEFINITIONS) {
|
|
12171
|
+
if (!predicate(definition))
|
|
12172
|
+
continue;
|
|
12173
|
+
for (const ext of definition.match.extensions ?? []) {
|
|
12174
|
+
extensions.add(ext.toLowerCase());
|
|
12175
|
+
}
|
|
12176
|
+
}
|
|
12177
|
+
return extensions;
|
|
12178
|
+
};
|
|
12179
|
+
var INDEXABLE_CODE_EXTENSIONS = collectExtensions((definition) => definition.category === "code");
|
|
12180
|
+
var INDEXABLE_DOC_EXTENSIONS = collectExtensions((definition) => definition.category === "doc");
|
|
11695
12181
|
var INDEXABLE_EXTENSIONS = new Set([
|
|
11696
12182
|
...INDEXABLE_CODE_EXTENSIONS,
|
|
11697
12183
|
...INDEXABLE_DOC_EXTENSIONS
|
|
11698
12184
|
]);
|
|
11699
|
-
var UPLOAD_ALLOWED_EXTENSIONS =
|
|
11700
|
-
|
|
11701
|
-
".doc",
|
|
11702
|
-
".docx",
|
|
11703
|
-
".pdf",
|
|
11704
|
-
".ppt",
|
|
11705
|
-
".pptx",
|
|
11706
|
-
".txt"
|
|
11707
|
-
]);
|
|
11708
|
-
var TEXT_EXTENSIONS = new Set([".md", ".txt"]);
|
|
12185
|
+
var UPLOAD_ALLOWED_EXTENSIONS = collectExtensions(() => true);
|
|
12186
|
+
var TEXT_EXTENSIONS = collectExtensions((definition) => definition.cas.encoding === "utf8");
|
|
11709
12187
|
var UPLOAD_MAX_FILE_SIZE = 5 * 1024 * 1024;
|
|
11710
12188
|
var UPLOAD_MAX_FILES = 10;
|
|
11711
12189
|
function getFileExtension(name) {
|
|
@@ -11714,10 +12192,7 @@ function getFileExtension(name) {
|
|
|
11714
12192
|
}
|
|
11715
12193
|
function isIndexableFile(fileName, manifestFiles) {
|
|
11716
12194
|
const baseName = fileName.includes("/") ? fileName.split("/").pop() : fileName;
|
|
11717
|
-
|
|
11718
|
-
return true;
|
|
11719
|
-
const ext = getFileExtension(baseName);
|
|
11720
|
-
return INDEXABLE_EXTENSIONS.has(ext);
|
|
12195
|
+
return defaultRegistry.resolve(baseName) !== null;
|
|
11721
12196
|
}
|
|
11722
12197
|
// src/wsEvents.ts
|
|
11723
12198
|
var WS_SESSION_STATUS = "ws:session:status";
|
|
@@ -11728,14 +12203,22 @@ var WS_DAEMON_CONNECTED = "ws:daemon:connected";
|
|
|
11728
12203
|
var WS_DAEMON_STATUS = "ws:daemon:status";
|
|
11729
12204
|
var WS_DAEMON_HEARTBEAT = "ws:daemon:heartbeat";
|
|
11730
12205
|
var WS_LIBRARY_UPDATED = "ws:library:updated";
|
|
12206
|
+
var WS_INDEX_PROGRESS = "index/progress";
|
|
12207
|
+
var WS_INDEX_DONE = "index/done";
|
|
12208
|
+
var WS_INDEX_ERROR = "index/error";
|
|
12209
|
+
var WS_INDEX_TIMEOUT = "index/timeout";
|
|
11731
12210
|
export {
|
|
11732
12211
|
validateAtomsWhitelist,
|
|
11733
12212
|
transitionAtomSchema,
|
|
11734
12213
|
systemEntitySchema,
|
|
11735
12214
|
stateAtomSchema,
|
|
12215
|
+
sourceRefsSchema,
|
|
12216
|
+
sourceRefSpanSchema,
|
|
12217
|
+
sourceRefSchema,
|
|
11736
12218
|
sorEntitySchema,
|
|
11737
12219
|
sessionDecisionSchema,
|
|
11738
12220
|
serializeYaml,
|
|
12221
|
+
sectionSchema,
|
|
11739
12222
|
scopeSchema,
|
|
11740
12223
|
ruleAtomSchema,
|
|
11741
12224
|
roleAtomSchema,
|
|
@@ -11747,6 +12230,8 @@ export {
|
|
|
11747
12230
|
processEntitySchema,
|
|
11748
12231
|
perspectiveSchema,
|
|
11749
12232
|
parseYaml,
|
|
12233
|
+
parseRef,
|
|
12234
|
+
paragraphAtomSchema,
|
|
11750
12235
|
modelingSessionDataSchema,
|
|
11751
12236
|
metricMilestoneSchema,
|
|
11752
12237
|
metricAtomSchema,
|
|
@@ -11754,32 +12239,43 @@ export {
|
|
|
11754
12239
|
mapErrorCodeToStatus,
|
|
11755
12240
|
kindSchema,
|
|
11756
12241
|
isValidManifest,
|
|
12242
|
+
isRefPointer,
|
|
11757
12243
|
isPathSafe,
|
|
11758
12244
|
isIndexableFile,
|
|
11759
12245
|
getFileExtension,
|
|
11760
12246
|
generateUUID,
|
|
11761
12247
|
generateId,
|
|
12248
|
+
extractionConfidenceSchema,
|
|
12249
|
+
extractAllRefs,
|
|
11762
12250
|
eventAtomSchema,
|
|
11763
12251
|
epicEntitySchema,
|
|
11764
12252
|
entityTypeSchema,
|
|
11765
12253
|
entitySchema,
|
|
12254
|
+
entityRefPointerSchema,
|
|
11766
12255
|
entityAtomSchema,
|
|
12256
|
+
embeddingEntrySchema,
|
|
11767
12257
|
documentSchema,
|
|
11768
12258
|
documentModelingEntitySchema,
|
|
11769
12259
|
documentEntitySchema,
|
|
11770
12260
|
documentAdrEntitySchema,
|
|
12261
|
+
docDigestSchema,
|
|
12262
|
+
docChunkResultSchema,
|
|
12263
|
+
docChunkParagraphSchema,
|
|
12264
|
+
defaultRegistry,
|
|
11771
12265
|
decisionPhaseSchema,
|
|
11772
12266
|
decisionAtomSchema,
|
|
11773
12267
|
dataAtomsSchema,
|
|
11774
12268
|
contractEntitySchema,
|
|
12269
|
+
contractDataSchema,
|
|
11775
12270
|
contentHash,
|
|
11776
12271
|
containerEntitySchema,
|
|
11777
12272
|
constraintAtomSchema,
|
|
11778
|
-
confidenceSchema,
|
|
11779
12273
|
componentEntitySchema,
|
|
11780
12274
|
comparisonDimensionValueSchema,
|
|
11781
12275
|
comparisonDimensionSchema,
|
|
11782
12276
|
comparisonAtomSchema,
|
|
12277
|
+
claimAtomSchema,
|
|
12278
|
+
buildRef,
|
|
11783
12279
|
boundaryAtomSchema,
|
|
11784
12280
|
behaviorAtomSchema,
|
|
11785
12281
|
attributeAtomSchema,
|
|
@@ -11790,6 +12286,10 @@ export {
|
|
|
11790
12286
|
WS_SESSION_STATUS,
|
|
11791
12287
|
WS_SESSION_PROGRESS,
|
|
11792
12288
|
WS_LIBRARY_UPDATED,
|
|
12289
|
+
WS_INDEX_TIMEOUT,
|
|
12290
|
+
WS_INDEX_PROGRESS,
|
|
12291
|
+
WS_INDEX_ERROR,
|
|
12292
|
+
WS_INDEX_DONE,
|
|
11793
12293
|
WS_DAEMON_STATUS,
|
|
11794
12294
|
WS_DAEMON_HEARTBEAT,
|
|
11795
12295
|
WS_DAEMON_HANDSHAKE_ACK,
|
|
@@ -11799,7 +12299,10 @@ export {
|
|
|
11799
12299
|
UPLOAD_MAX_FILES,
|
|
11800
12300
|
UPLOAD_ALLOWED_EXTENSIONS,
|
|
11801
12301
|
TEXT_EXTENSIONS,
|
|
12302
|
+
SUPERTEST_USER_NAME,
|
|
12303
|
+
SUPERTEST_EMAIL,
|
|
11802
12304
|
RelationType,
|
|
12305
|
+
RESERVED_USER_NAMES,
|
|
11803
12306
|
Perspective,
|
|
11804
12307
|
Kind,
|
|
11805
12308
|
INDEXABLE_EXTENSIONS,
|
|
@@ -11807,16 +12310,16 @@ export {
|
|
|
11807
12310
|
INDEXABLE_CODE_EXTENSIONS,
|
|
11808
12311
|
ErrorCode,
|
|
11809
12312
|
EntityType,
|
|
12313
|
+
EDGE_SYNC_RULES,
|
|
11810
12314
|
DEFAULT_WORKSPACE_NAME,
|
|
11811
|
-
DEFAULT_WORKSPACE_ID,
|
|
11812
|
-
DEFAULT_USER_NAME,
|
|
11813
|
-
DEFAULT_USER_ID,
|
|
11814
12315
|
DEFAULT_SERVER_CONFIG,
|
|
12316
|
+
DEFAULT_CONTENT_TYPE_DEFINITIONS,
|
|
11815
12317
|
DEFAULT_CLOUD_LIBRARY_NAME,
|
|
11816
|
-
DEFAULT_CLOUD_LIBRARY_ID,
|
|
11817
12318
|
DAEMON_OFFLINE_THRESHOLD,
|
|
11818
12319
|
DAEMON_HEARTBEAT_INTERVAL,
|
|
12320
|
+
ContentTypeRegistry,
|
|
11819
12321
|
CODE_PACKAGE_FILES,
|
|
12322
|
+
CLOUD_DAEMON_IDLE_TIMEOUT,
|
|
11820
12323
|
C4AError,
|
|
11821
12324
|
AtomField
|
|
11822
12325
|
};
|