at-shared-types 1.2.2 → 1.2.3

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.
@@ -1,11 +1,34 @@
1
1
  type Brand<T, B extends string> = T & {
2
2
  readonly __brand: B;
3
3
  };
4
- export type ATAICapabilityID = Brand<string, "ATCapabilityID">;
5
- export type ATAIPromptID = Brand<string, "ATPromptID">;
4
+ export type ATAICapabilityID = Brand<string, "ATAICapabilityID">;
5
+ export type ATAIPromptID = Brand<string, "ATAIPromptID">;
6
6
  export declare const ATAIID: {
7
- readonly capability: (id: string) => ATAICapabilityID;
8
- readonly prompt: (id: string) => ATAIPromptID;
7
+ /** Validate & brand an existing capability id (throws if invalid). */
8
+ readonly validateCapability: (id: string) => ATAICapabilityID;
9
+ /** Validate & brand an existing prompt id (throws if invalid). */
10
+ readonly validatePrompt: (id: string) => ATAIPromptID;
11
+ /**
12
+ * Build a capability id from parts (then validates & brands).
13
+ * Format: cap.<app>.<area>.<object>.<verb>
14
+ */
15
+ readonly makeCapability: (parts: {
16
+ app: string;
17
+ area: string;
18
+ target: string;
19
+ action: string;
20
+ }) => ATAICapabilityID;
21
+ /**
22
+ * Build a prompt id from parts (then validates & brands).
23
+ * Format: prompt.<app>.<area>.<object>.<verb>.v<major>
24
+ */
25
+ readonly makePrompt: (parts: {
26
+ app: string;
27
+ area: string;
28
+ target: string;
29
+ action: string;
30
+ v: number;
31
+ }) => ATAIPromptID;
9
32
  };
10
33
  export {};
11
34
  //# sourceMappingURL=ids.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/ai/protocol/ids.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC/D,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAavD,eAAO,MAAM,MAAM;8BACF,MAAM,KAAG,gBAAgB;0BAK7B,MAAM,KAAG,YAAY;CAIxB,CAAC"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/ai/protocol/ids.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAoCzD,eAAO,MAAM,MAAM;IACf,sEAAsE;sCAC/C,MAAM,KAAG,gBAAgB;IAKhD,kEAAkE;kCAC/C,MAAM,KAAG,YAAY;IAKxC;;;OAGG;qCACmB;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAClB,KAAG,gBAAgB;IAKpB;;;OAGG;iCACe;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,EAAE,MAAM,CAAC;KACb,KAAG,YAAY;CAKV,CAAC"}
package/dist/protocol.cjs CHANGED
@@ -43,19 +43,49 @@ function validate(kind, id) {
43
43
  throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: "${id}"`);
44
44
  }
45
45
  }
46
+ function normalizeSegment(seg) {
47
+ return seg.trim().toLowerCase().replace(/[\s_]+/g, ".").replace(/[^a-z0-9.]/g, "").replace(/\.+/g, ".").replace(/^\.+|\.+$/g, "");
48
+ }
49
+ function joinSegments(...segs) {
50
+ return segs.map(normalizeSegment).filter(Boolean).join(".");
51
+ }
46
52
  var ATAIID = {
47
- capability(id) {
53
+ /** Validate & brand an existing capability id (throws if invalid). */
54
+ validateCapability(id) {
48
55
  validate("capability", id);
49
56
  return id;
50
57
  },
51
- prompt(id) {
58
+ /** Validate & brand an existing prompt id (throws if invalid). */
59
+ validatePrompt(id) {
52
60
  validate("prompt", id);
53
61
  return id;
62
+ },
63
+ /**
64
+ * Build a capability id from parts (then validates & brands).
65
+ * Format: cap.<app>.<area>.<object>.<verb>
66
+ */
67
+ makeCapability(parts) {
68
+ const id = `cap.${joinSegments(parts.app, parts.area, parts.target, parts.action)}`;
69
+ return ATAIID.validateCapability(id);
70
+ },
71
+ /**
72
+ * Build a prompt id from parts (then validates & brands).
73
+ * Format: prompt.<app>.<area>.<object>.<verb>.v<major>
74
+ */
75
+ makePrompt(parts) {
76
+ const major = Math.max(0, Math.floor(parts.v));
77
+ const id = `prompt.${joinSegments(parts.app, parts.area, parts.target, parts.action)}.v${major}`;
78
+ return ATAIID.validatePrompt(id);
54
79
  }
55
80
  };
56
81
 
57
82
  // src/protocol.ts
58
- var ATProtocol = { ATAPIErrorCodeMap, ATAIID };
83
+ var ATProtocol = {
84
+ ATAPIErrorCodeMap,
85
+ ATID: {
86
+ ai: ATAIID
87
+ }
88
+ };
59
89
  // Annotate the CommonJS export names for ESM import in node:
60
90
  0 && (module.exports = {
61
91
  ATAIID,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/protocol.ts","../src/core/protocol/errors.ts","../src/ai/protocol/ids.ts"],"sourcesContent":["export * from \"./core/protocol/errors\";\r\nexport * from \"./ai/protocol/ids\";\r\n\r\nimport { ATAPIErrorCodeMap } from \"./core/protocol/errors\";\r\nimport { ATAIID } from \"./ai/protocol/ids\";\r\n\r\nexport const ATProtocol = { ATAPIErrorCodeMap, ATAIID } as const;\r\n\r\nexport namespace ATProtocol {\r\n export type ATAPIErrorCode =\r\n import(\"./core/protocol/errors\").ATAPIErrorCode;\r\n export type ATAICapabilityID =\r\n import(\"./ai/protocol/ids\").ATAICapabilityID;\r\n export type ATAIPromptID =\r\n import(\"./ai/protocol/ids\").ATAIPromptID;\r\n}\r\n","export const ATAPIErrorCodeMap = {\r\n AI_SESSION_EXPIRED: 4501,\r\n AI_SESSION_NOT_FOUND: 4502,\r\n AI_REQUEST_CONTEXT_MISSING: 4503,\r\n} as const;\r\n\r\nexport type ATAPIErrorCode = typeof ATAPIErrorCodeMap[keyof typeof ATAPIErrorCodeMap];\r\n","type Brand<T, B extends string> = T & { readonly __brand: B };\r\n\r\nexport type ATAICapabilityID = Brand<string, \"ATCapabilityID\">;\r\nexport type ATAIPromptID = Brand<string, \"ATPromptID\">;\r\n\r\nconst RX = {\r\n capability: /^cap\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}$/i,\r\n prompt: /^prompt\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}\\.v[0-9]+$/i,\r\n};\r\n\r\nfunction validate(kind: keyof typeof RX, id: string): void {\r\n if (!RX[kind].test(id)) {\r\n throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: \"${id}\"`);\r\n }\r\n}\r\n\r\nexport const ATAIID = {\r\n capability(id: string): ATAICapabilityID {\r\n validate(\"capability\", id);\r\n return id as ATAICapabilityID;\r\n },\r\n\r\n prompt(id: string): ATAIPromptID {\r\n validate(\"prompt\", id);\r\n return id as ATAIPromptID;\r\n },\r\n} as const;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,oBAAoB;AAAA,EAC7B,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,4BAA4B;AAChC;;;ACCA,IAAM,KAAK;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AACV;AAEA,SAAS,SAAS,MAAuB,IAAkB;AACzD,MAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG;AACtB,UAAM,IAAI,MAAM,yBAAyB,IAAI,SAAS,EAAE,GAAG;AAAA,EAC7D;AACF;AAEO,IAAM,SAAS;AAAA,EACpB,WAAW,IAA8B;AACvC,aAAS,cAAc,EAAE;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,IAA0B;AAC/B,aAAS,UAAU,EAAE;AACrB,WAAO;AAAA,EACT;AACF;;;AFpBO,IAAM,aAAa,EAAE,mBAAmB,OAAO;","names":[]}
1
+ {"version":3,"sources":["../src/protocol.ts","../src/core/protocol/errors.ts","../src/ai/protocol/ids.ts"],"sourcesContent":["export * from \"./core/protocol/errors\";\r\nexport * from \"./ai/protocol/ids\";\r\n\r\nimport { ATAPIErrorCodeMap } from \"./core/protocol/errors\";\r\nimport { ATAIID } from \"./ai/protocol/ids\";\r\n\r\nexport const ATProtocol = {\r\n ATAPIErrorCodeMap,\r\n ATID: {\r\n ai: ATAIID,\r\n }\r\n} as const;\r\n\r\nexport namespace ATProtocol {\r\n export type ATAPIErrorCode =\r\n import(\"./core/protocol/errors\").ATAPIErrorCode;\r\n export type ATAICapabilityID =\r\n import(\"./ai/protocol/ids\").ATAICapabilityID;\r\n export type ATAIPromptID =\r\n import(\"./ai/protocol/ids\").ATAIPromptID;\r\n}\r\n","export const ATAPIErrorCodeMap = {\r\n AI_SESSION_EXPIRED: 4501,\r\n AI_SESSION_NOT_FOUND: 4502,\r\n AI_REQUEST_CONTEXT_MISSING: 4503,\r\n} as const;\r\n\r\nexport type ATAPIErrorCode = typeof ATAPIErrorCodeMap[keyof typeof ATAPIErrorCodeMap];\r\n","type Brand<T, B extends string> = T & { readonly __brand: B };\r\n\r\nexport type ATAICapabilityID = Brand<string, \"ATAICapabilityID\">;\r\nexport type ATAIPromptID = Brand<string, \"ATAIPromptID\">;\r\n\r\nconst RX = {\r\n capability: /^cap\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}$/i,\r\n prompt: /^prompt\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}\\.v[0-9]+$/i,\r\n} as const;\r\n\r\nfunction validate(kind: keyof typeof RX, id: string): void {\r\n if (!RX[kind].test(id)) {\r\n throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: \"${id}\"`);\r\n }\r\n}\r\n\r\n/**\r\n * Normalize a segment for IDs.\r\n * Keep it strict: IDs should be stable, grep-friendly, and predictable.\r\n * - trims\r\n * - lowercases\r\n * - converts spaces/underscores to dots\r\n * - removes illegal chars (keeps a-z0-9 and dots)\r\n * - collapses multiple dots\r\n */\r\nfunction normalizeSegment(seg: string): string {\r\n return seg\r\n .trim()\r\n .toLowerCase()\r\n .replace(/[\\s_]+/g, \".\")\r\n .replace(/[^a-z0-9.]/g, \"\")\r\n .replace(/\\.+/g, \".\")\r\n .replace(/^\\.+|\\.+$/g, \"\");\r\n}\r\n\r\nfunction joinSegments(...segs: string[]): string {\r\n return segs.map(normalizeSegment).filter(Boolean).join(\".\");\r\n}\r\n\r\nexport const ATAIID = {\r\n /** Validate & brand an existing capability id (throws if invalid). */\r\n validateCapability(id: string): ATAICapabilityID {\r\n validate(\"capability\", id);\r\n return id as ATAICapabilityID;\r\n },\r\n\r\n /** Validate & brand an existing prompt id (throws if invalid). */\r\n validatePrompt(id: string): ATAIPromptID {\r\n validate(\"prompt\", id);\r\n return id as ATAIPromptID;\r\n },\r\n\r\n /**\r\n * Build a capability id from parts (then validates & brands).\r\n * Format: cap.<app>.<area>.<object>.<verb>\r\n */\r\n makeCapability(parts: {\r\n app: string;\r\n area: string;\r\n target: string;\r\n action: string;\r\n }): ATAICapabilityID {\r\n const id = `cap.${joinSegments(parts.app, parts.area, parts.target, parts.action)}`;\r\n return ATAIID.validateCapability(id);\r\n },\r\n\r\n /**\r\n * Build a prompt id from parts (then validates & brands).\r\n * Format: prompt.<app>.<area>.<object>.<verb>.v<major>\r\n */\r\n makePrompt(parts: {\r\n app: string;\r\n area: string;\r\n target: string;\r\n action: string;\r\n v: number; // major version\r\n }): ATAIPromptID {\r\n const major = Math.max(0, Math.floor(parts.v));\r\n const id = `prompt.${joinSegments(parts.app, parts.area, parts.target, parts.action)}.v${major}`;\r\n return ATAIID.validatePrompt(id);\r\n },\r\n} as const;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,oBAAoB;AAAA,EAC7B,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,4BAA4B;AAChC;;;ACCA,IAAM,KAAK;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AACZ;AAEA,SAAS,SAAS,MAAuB,IAAkB;AACvD,MAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG;AACpB,UAAM,IAAI,MAAM,yBAAyB,IAAI,SAAS,EAAE,GAAG;AAAA,EAC/D;AACJ;AAWA,SAAS,iBAAiB,KAAqB;AAC3C,SAAO,IACF,KAAK,EACL,YAAY,EACZ,QAAQ,WAAW,GAAG,EACtB,QAAQ,eAAe,EAAE,EACzB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,cAAc,EAAE;AACjC;AAEA,SAAS,gBAAgB,MAAwB;AAC7C,SAAO,KAAK,IAAI,gBAAgB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC9D;AAEO,IAAM,SAAS;AAAA;AAAA,EAElB,mBAAmB,IAA8B;AAC7C,aAAS,cAAc,EAAE;AACzB,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,eAAe,IAA0B;AACrC,aAAS,UAAU,EAAE;AACrB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,OAKM;AACjB,UAAM,KAAK,OAAO,aAAa,MAAM,KAAK,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,CAAC;AACjF,WAAO,OAAO,mBAAmB,EAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,OAMM;AACb,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAC7C,UAAM,KAAK,UAAU,aAAa,MAAM,KAAK,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,CAAC,KAAK,KAAK;AAC9F,WAAO,OAAO,eAAe,EAAE;AAAA,EACnC;AACJ;;;AF3EO,IAAM,aAAa;AAAA,EACtB;AAAA,EACA,MAAM;AAAA,IACF,IAAI;AAAA,EACR;AACJ;","names":[]}
@@ -6,9 +6,24 @@ export declare const ATProtocol: {
6
6
  readonly AI_SESSION_NOT_FOUND: 4502;
7
7
  readonly AI_REQUEST_CONTEXT_MISSING: 4503;
8
8
  };
9
- readonly ATAIID: {
10
- readonly capability: (id: string) => import("./protocol").ATAICapabilityID;
11
- readonly prompt: (id: string) => import("./protocol").ATAIPromptID;
9
+ readonly ATID: {
10
+ readonly ai: {
11
+ readonly validateCapability: (id: string) => import("./protocol").ATAICapabilityID;
12
+ readonly validatePrompt: (id: string) => import("./protocol").ATAIPromptID;
13
+ readonly makeCapability: (parts: {
14
+ app: string;
15
+ area: string;
16
+ target: string;
17
+ action: string;
18
+ }) => import("./protocol").ATAICapabilityID;
19
+ readonly makePrompt: (parts: {
20
+ app: string;
21
+ area: string;
22
+ target: string;
23
+ action: string;
24
+ v: number;
25
+ }) => import("./protocol").ATAIPromptID;
26
+ };
12
27
  };
13
28
  };
14
29
  export declare namespace ATProtocol {
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAKlC,eAAO,MAAM,UAAU;;;;;;;;;;CAAyC,CAAC;AAEjE,yBAAiB,UAAU,CAAC;IACxB,KAAY,cAAc,GACtB,OAAO,wBAAwB,EAAE,cAAc,CAAC;IACpD,KAAY,gBAAgB,GACxB,OAAO,mBAAmB,EAAE,gBAAgB,CAAC;IACjD,KAAY,YAAY,GACpB,OAAO,mBAAmB,EAAE,YAAY,CAAC;CAChD"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAKlC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;CAKb,CAAC;AAEX,yBAAiB,UAAU,CAAC;IACxB,KAAY,cAAc,GACtB,OAAO,wBAAwB,EAAE,cAAc,CAAC;IACpD,KAAY,gBAAgB,GACxB,OAAO,mBAAmB,EAAE,gBAAgB,CAAC;IACjD,KAAY,YAAY,GACpB,OAAO,mBAAmB,EAAE,YAAY,CAAC;CAChD"}
package/dist/protocol.mjs CHANGED
@@ -17,19 +17,49 @@ function validate(kind, id) {
17
17
  throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: "${id}"`);
18
18
  }
19
19
  }
20
+ function normalizeSegment(seg) {
21
+ return seg.trim().toLowerCase().replace(/[\s_]+/g, ".").replace(/[^a-z0-9.]/g, "").replace(/\.+/g, ".").replace(/^\.+|\.+$/g, "");
22
+ }
23
+ function joinSegments(...segs) {
24
+ return segs.map(normalizeSegment).filter(Boolean).join(".");
25
+ }
20
26
  var ATAIID = {
21
- capability(id) {
27
+ /** Validate & brand an existing capability id (throws if invalid). */
28
+ validateCapability(id) {
22
29
  validate("capability", id);
23
30
  return id;
24
31
  },
25
- prompt(id) {
32
+ /** Validate & brand an existing prompt id (throws if invalid). */
33
+ validatePrompt(id) {
26
34
  validate("prompt", id);
27
35
  return id;
36
+ },
37
+ /**
38
+ * Build a capability id from parts (then validates & brands).
39
+ * Format: cap.<app>.<area>.<object>.<verb>
40
+ */
41
+ makeCapability(parts) {
42
+ const id = `cap.${joinSegments(parts.app, parts.area, parts.target, parts.action)}`;
43
+ return ATAIID.validateCapability(id);
44
+ },
45
+ /**
46
+ * Build a prompt id from parts (then validates & brands).
47
+ * Format: prompt.<app>.<area>.<object>.<verb>.v<major>
48
+ */
49
+ makePrompt(parts) {
50
+ const major = Math.max(0, Math.floor(parts.v));
51
+ const id = `prompt.${joinSegments(parts.app, parts.area, parts.target, parts.action)}.v${major}`;
52
+ return ATAIID.validatePrompt(id);
28
53
  }
29
54
  };
30
55
 
31
56
  // src/protocol.ts
32
- var ATProtocol = { ATAPIErrorCodeMap, ATAIID };
57
+ var ATProtocol = {
58
+ ATAPIErrorCodeMap,
59
+ ATID: {
60
+ ai: ATAIID
61
+ }
62
+ };
33
63
  export {
34
64
  ATAIID,
35
65
  ATAPIErrorCodeMap,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/protocol/errors.ts","../src/ai/protocol/ids.ts","../src/protocol.ts"],"sourcesContent":["export const ATAPIErrorCodeMap = {\r\n AI_SESSION_EXPIRED: 4501,\r\n AI_SESSION_NOT_FOUND: 4502,\r\n AI_REQUEST_CONTEXT_MISSING: 4503,\r\n} as const;\r\n\r\nexport type ATAPIErrorCode = typeof ATAPIErrorCodeMap[keyof typeof ATAPIErrorCodeMap];\r\n","type Brand<T, B extends string> = T & { readonly __brand: B };\r\n\r\nexport type ATAICapabilityID = Brand<string, \"ATCapabilityID\">;\r\nexport type ATAIPromptID = Brand<string, \"ATPromptID\">;\r\n\r\nconst RX = {\r\n capability: /^cap\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}$/i,\r\n prompt: /^prompt\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}\\.v[0-9]+$/i,\r\n};\r\n\r\nfunction validate(kind: keyof typeof RX, id: string): void {\r\n if (!RX[kind].test(id)) {\r\n throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: \"${id}\"`);\r\n }\r\n}\r\n\r\nexport const ATAIID = {\r\n capability(id: string): ATAICapabilityID {\r\n validate(\"capability\", id);\r\n return id as ATAICapabilityID;\r\n },\r\n\r\n prompt(id: string): ATAIPromptID {\r\n validate(\"prompt\", id);\r\n return id as ATAIPromptID;\r\n },\r\n} as const;\r\n","export * from \"./core/protocol/errors\";\r\nexport * from \"./ai/protocol/ids\";\r\n\r\nimport { ATAPIErrorCodeMap } from \"./core/protocol/errors\";\r\nimport { ATAIID } from \"./ai/protocol/ids\";\r\n\r\nexport const ATProtocol = { ATAPIErrorCodeMap, ATAIID } as const;\r\n\r\nexport namespace ATProtocol {\r\n export type ATAPIErrorCode =\r\n import(\"./core/protocol/errors\").ATAPIErrorCode;\r\n export type ATAICapabilityID =\r\n import(\"./ai/protocol/ids\").ATAICapabilityID;\r\n export type ATAIPromptID =\r\n import(\"./ai/protocol/ids\").ATAIPromptID;\r\n}\r\n"],"mappings":";;;AAAO,IAAM,oBAAoB;AAAA,EAC7B,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,4BAA4B;AAChC;;;ACCA,IAAM,KAAK;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AACV;AAEA,SAAS,SAAS,MAAuB,IAAkB;AACzD,MAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG;AACtB,UAAM,IAAI,MAAM,yBAAyB,IAAI,SAAS,EAAE,GAAG;AAAA,EAC7D;AACF;AAEO,IAAM,SAAS;AAAA,EACpB,WAAW,IAA8B;AACvC,aAAS,cAAc,EAAE;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,IAA0B;AAC/B,aAAS,UAAU,EAAE;AACrB,WAAO;AAAA,EACT;AACF;;;ACpBO,IAAM,aAAa,EAAE,mBAAmB,OAAO;","names":[]}
1
+ {"version":3,"sources":["../src/core/protocol/errors.ts","../src/ai/protocol/ids.ts","../src/protocol.ts"],"sourcesContent":["export const ATAPIErrorCodeMap = {\r\n AI_SESSION_EXPIRED: 4501,\r\n AI_SESSION_NOT_FOUND: 4502,\r\n AI_REQUEST_CONTEXT_MISSING: 4503,\r\n} as const;\r\n\r\nexport type ATAPIErrorCode = typeof ATAPIErrorCodeMap[keyof typeof ATAPIErrorCodeMap];\r\n","type Brand<T, B extends string> = T & { readonly __brand: B };\r\n\r\nexport type ATAICapabilityID = Brand<string, \"ATAICapabilityID\">;\r\nexport type ATAIPromptID = Brand<string, \"ATAIPromptID\">;\r\n\r\nconst RX = {\r\n capability: /^cap\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}$/i,\r\n prompt: /^prompt\\.[a-z0-9]+(?:\\.[a-z0-9]+){3,}\\.v[0-9]+$/i,\r\n} as const;\r\n\r\nfunction validate(kind: keyof typeof RX, id: string): void {\r\n if (!RX[kind].test(id)) {\r\n throw new Error(`[AI-PROTOCOL] Invalid ${kind} id: \"${id}\"`);\r\n }\r\n}\r\n\r\n/**\r\n * Normalize a segment for IDs.\r\n * Keep it strict: IDs should be stable, grep-friendly, and predictable.\r\n * - trims\r\n * - lowercases\r\n * - converts spaces/underscores to dots\r\n * - removes illegal chars (keeps a-z0-9 and dots)\r\n * - collapses multiple dots\r\n */\r\nfunction normalizeSegment(seg: string): string {\r\n return seg\r\n .trim()\r\n .toLowerCase()\r\n .replace(/[\\s_]+/g, \".\")\r\n .replace(/[^a-z0-9.]/g, \"\")\r\n .replace(/\\.+/g, \".\")\r\n .replace(/^\\.+|\\.+$/g, \"\");\r\n}\r\n\r\nfunction joinSegments(...segs: string[]): string {\r\n return segs.map(normalizeSegment).filter(Boolean).join(\".\");\r\n}\r\n\r\nexport const ATAIID = {\r\n /** Validate & brand an existing capability id (throws if invalid). */\r\n validateCapability(id: string): ATAICapabilityID {\r\n validate(\"capability\", id);\r\n return id as ATAICapabilityID;\r\n },\r\n\r\n /** Validate & brand an existing prompt id (throws if invalid). */\r\n validatePrompt(id: string): ATAIPromptID {\r\n validate(\"prompt\", id);\r\n return id as ATAIPromptID;\r\n },\r\n\r\n /**\r\n * Build a capability id from parts (then validates & brands).\r\n * Format: cap.<app>.<area>.<object>.<verb>\r\n */\r\n makeCapability(parts: {\r\n app: string;\r\n area: string;\r\n target: string;\r\n action: string;\r\n }): ATAICapabilityID {\r\n const id = `cap.${joinSegments(parts.app, parts.area, parts.target, parts.action)}`;\r\n return ATAIID.validateCapability(id);\r\n },\r\n\r\n /**\r\n * Build a prompt id from parts (then validates & brands).\r\n * Format: prompt.<app>.<area>.<object>.<verb>.v<major>\r\n */\r\n makePrompt(parts: {\r\n app: string;\r\n area: string;\r\n target: string;\r\n action: string;\r\n v: number; // major version\r\n }): ATAIPromptID {\r\n const major = Math.max(0, Math.floor(parts.v));\r\n const id = `prompt.${joinSegments(parts.app, parts.area, parts.target, parts.action)}.v${major}`;\r\n return ATAIID.validatePrompt(id);\r\n },\r\n} as const;\r\n","export * from \"./core/protocol/errors\";\r\nexport * from \"./ai/protocol/ids\";\r\n\r\nimport { ATAPIErrorCodeMap } from \"./core/protocol/errors\";\r\nimport { ATAIID } from \"./ai/protocol/ids\";\r\n\r\nexport const ATProtocol = {\r\n ATAPIErrorCodeMap,\r\n ATID: {\r\n ai: ATAIID,\r\n }\r\n} as const;\r\n\r\nexport namespace ATProtocol {\r\n export type ATAPIErrorCode =\r\n import(\"./core/protocol/errors\").ATAPIErrorCode;\r\n export type ATAICapabilityID =\r\n import(\"./ai/protocol/ids\").ATAICapabilityID;\r\n export type ATAIPromptID =\r\n import(\"./ai/protocol/ids\").ATAIPromptID;\r\n}\r\n"],"mappings":";;;AAAO,IAAM,oBAAoB;AAAA,EAC7B,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,4BAA4B;AAChC;;;ACCA,IAAM,KAAK;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AACZ;AAEA,SAAS,SAAS,MAAuB,IAAkB;AACvD,MAAI,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG;AACpB,UAAM,IAAI,MAAM,yBAAyB,IAAI,SAAS,EAAE,GAAG;AAAA,EAC/D;AACJ;AAWA,SAAS,iBAAiB,KAAqB;AAC3C,SAAO,IACF,KAAK,EACL,YAAY,EACZ,QAAQ,WAAW,GAAG,EACtB,QAAQ,eAAe,EAAE,EACzB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,cAAc,EAAE;AACjC;AAEA,SAAS,gBAAgB,MAAwB;AAC7C,SAAO,KAAK,IAAI,gBAAgB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC9D;AAEO,IAAM,SAAS;AAAA;AAAA,EAElB,mBAAmB,IAA8B;AAC7C,aAAS,cAAc,EAAE;AACzB,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,eAAe,IAA0B;AACrC,aAAS,UAAU,EAAE;AACrB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,OAKM;AACjB,UAAM,KAAK,OAAO,aAAa,MAAM,KAAK,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,CAAC;AACjF,WAAO,OAAO,mBAAmB,EAAE;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,OAMM;AACb,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAC7C,UAAM,KAAK,UAAU,aAAa,MAAM,KAAK,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,CAAC,KAAK,KAAK;AAC9F,WAAO,OAAO,eAAe,EAAE;AAAA,EACnC;AACJ;;;AC3EO,IAAM,aAAa;AAAA,EACtB;AAAA,EACA,MAAM;AAAA,IACF,IAAI;AAAA,EACR;AACJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "at-shared-types",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "type": "commonjs",
5
5
  "main": "./dist/index.cjs",
6
6
  "types": "./dist/index.d.ts",