@defai.digital/ability-domain 13.4.9 → 13.4.10

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/dist/manager.d.ts CHANGED
@@ -19,6 +19,8 @@ export declare class DefaultAbilityManager implements AbilityManager {
19
19
  /**
20
20
  * Inject abilities into agent context
21
21
  * Also auto-injects .automatosx/rules.md if present in the project
22
+ *
23
+ * INV-ABL-001: Core abilities are injected first (before project rules)
22
24
  */
23
25
  injectAbilities(agentId: string, task: string, coreAbilities?: string[], options?: AbilityInjectionOptions): Promise<AbilityInjectionResult>;
24
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAwBpB;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAExD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,eAAe,EACzB,MAAM,GAAE,mBAAmD;IAG9E;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBrB;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,sBAAsB,CAAC;IA0DlC;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOjE;;OAEG;IACH,OAAO,CAAC,YAAY;IAmCpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAIvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,cAAc,CAKhB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAwBpB;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAExD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,eAAe,EACzB,MAAM,GAAE,mBAAmD;IAG9E;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBrB;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAoFlC;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOjE;;OAEG;IACH,OAAO,CAAC,YAAY;IAmCpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAIvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,cAAc,CAKhB"}
package/dist/manager.js CHANGED
@@ -57,6 +57,8 @@ export class DefaultAbilityManager {
57
57
  /**
58
58
  * Inject abilities into agent context
59
59
  * Also auto-injects .automatosx/rules.md if present in the project
60
+ *
61
+ * INV-ABL-001: Core abilities are injected first (before project rules)
60
62
  */
61
63
  async injectAbilities(agentId, task, coreAbilities, options) {
62
64
  const maxAbilities = options?.maxAbilities ?? this.config.maxAbilitiesPerAgent;
@@ -68,23 +70,15 @@ export class DefaultAbilityManager {
68
70
  const contentParts = [];
69
71
  let currentTokens = 0;
70
72
  let truncated = false;
71
- // Auto-inject project rules if present (.automatosx/rules.md)
72
- const projectRules = loadProjectRules();
73
- if (projectRules) {
74
- const rulesHeader = '## Project Rules\n\nThe following rules MUST be followed for all code in this project:\n\n';
75
- const rulesContent = rulesHeader + projectRules;
76
- const rulesTokens = this.estimateTokens(rulesContent);
77
- if (rulesTokens <= maxTokens) {
78
- contentParts.push(rulesContent);
79
- injectedAbilities.push('_project-rules');
80
- currentTokens += rulesTokens;
81
- }
82
- }
83
- for (const ability of abilities) {
73
+ // INV-ABL-001: Separate core abilities from others to inject them first
74
+ const coreAbilitySet = new Set(coreAbilities ?? []);
75
+ const coreAbilitiesList = abilities.filter(a => coreAbilitySet.has(a.abilityId));
76
+ const otherAbilities = abilities.filter(a => !coreAbilitySet.has(a.abilityId));
77
+ // Helper function to inject an ability
78
+ const injectAbility = (ability) => {
84
79
  const abilityTokens = this.estimateTokens(ability.content);
85
80
  if (currentTokens + abilityTokens > maxTokens) {
86
- truncated = true;
87
- break;
81
+ return false; // Would exceed token limit
88
82
  }
89
83
  const header = options?.includeMetadata
90
84
  ? `## ${ability.displayName ?? ability.abilityId}\n\n`
@@ -92,6 +86,37 @@ export class DefaultAbilityManager {
92
86
  contentParts.push(header + ability.content);
93
87
  injectedAbilities.push(ability.abilityId);
94
88
  currentTokens += abilityTokens;
89
+ return true;
90
+ };
91
+ // INV-ABL-001: First inject core abilities (in order of relevance score)
92
+ for (const ability of coreAbilitiesList) {
93
+ if (!injectAbility(ability)) {
94
+ truncated = true;
95
+ break;
96
+ }
97
+ }
98
+ // Then inject project rules if present (.automatosx/rules.md)
99
+ if (!truncated) {
100
+ const projectRules = loadProjectRules();
101
+ if (projectRules) {
102
+ const rulesHeader = '## Project Rules\n\nThe following rules MUST be followed for all code in this project:\n\n';
103
+ const rulesContent = rulesHeader + projectRules;
104
+ const rulesTokens = this.estimateTokens(rulesContent);
105
+ if (currentTokens + rulesTokens <= maxTokens) {
106
+ contentParts.push(rulesContent);
107
+ injectedAbilities.push('_project-rules');
108
+ currentTokens += rulesTokens;
109
+ }
110
+ }
111
+ }
112
+ // Finally inject remaining abilities
113
+ if (!truncated) {
114
+ for (const ability of otherAbilities) {
115
+ if (!injectAbility(ability)) {
116
+ truncated = true;
117
+ break;
118
+ }
119
+ }
95
120
  }
96
121
  return {
97
122
  agentId,
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAQ7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,SAAS,gBAAgB,CAAC,UAAmB;IAC3C,MAAM,OAAO,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IAFnB,YACmB,QAAyB,EACzB,SAA8B,6BAA6B;QAD3D,aAAQ,GAAR,QAAQ,CAAiB;QACzB,WAAM,GAAN,MAAM,CAAqD;IAC3E,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,IAAY,EACZ,aAAwB,EACxB,YAAqB;QAErB,MAAM,GAAG,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAElD,+BAA+B;QAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAE9D,uCAAuC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,IAAI,EAAE,CAAC;SAClE,CAAC,CAAC,CAAC;QAEJ,2BAA2B;QAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzC,yBAAyB;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,OAAe,EACf,IAAY,EACZ,aAAwB,EACxB,OAAiC;QAEjC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC/E,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAE1E,yBAAyB;QACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC9C,OAAO,EACP,IAAI,EACJ,aAAa,EACb,YAAY,CACb,CAAC;QAEF,yBAAyB;QACzB,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,8DAA8D;QAC9D,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;QACxC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,4FAA4F,CAAC;YACjH,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;YAChD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAEtD,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAChC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACzC,aAAa,IAAI,WAAW,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE3D,IAAI,aAAa,GAAG,aAAa,GAAG,SAAS,EAAE,CAAC;gBAC9C,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,EAAE,eAAe;gBACrC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,MAAM;gBACtD,CAAC,CAAC,EAAE,CAAC;YAEP,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,aAAa,IAAI,aAAa,CAAC;QACjC,CAAC;QAED,OAAO;YACL,OAAO;YACP,iBAAiB;YACjB,eAAe,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;YACjD,UAAU,EAAE,aAAa;YACzB,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,OAAe;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,OAAgB,EAChB,SAAmB,EACnB,aAAuB;QAEvB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,qBAAqB;QACrB,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,cAAc;QACd,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC1C,KAAK,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3E,KAAK,IAAI,EAAE,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAChF,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1C,iBAAiB;QACjB,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;QAEvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAY;QAClC,OAAO,IAAI;aACR,KAAK,CAAC,aAAa,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,IAAY;QACjC,0CAA0C;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAyB,EACzB,MAAqC;IAErC,OAAO,IAAI,qBAAqB,CAAC,QAAQ,EAAE;QACzC,GAAG,6BAA6B;QAChC,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/ability-domain",
3
- "version": "13.4.9",
3
+ "version": "13.4.10",
4
4
  "type": "module",
5
5
  "description": "Ability management for AutomatosX agents",
6
6
  "license": "BUSL-1.1",
@@ -33,7 +33,7 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@defai.digital/contracts": "13.4.9"
36
+ "@defai.digital/contracts": "13.4.10"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "^5.7.2"
package/src/manager.ts CHANGED
@@ -77,6 +77,8 @@ export class DefaultAbilityManager implements AbilityManager {
77
77
  /**
78
78
  * Inject abilities into agent context
79
79
  * Also auto-injects .automatosx/rules.md if present in the project
80
+ *
81
+ * INV-ABL-001: Core abilities are injected first (before project rules)
80
82
  */
81
83
  async injectAbilities(
82
84
  agentId: string,
@@ -101,26 +103,17 @@ export class DefaultAbilityManager implements AbilityManager {
101
103
  let currentTokens = 0;
102
104
  let truncated = false;
103
105
 
104
- // Auto-inject project rules if present (.automatosx/rules.md)
105
- const projectRules = loadProjectRules();
106
- if (projectRules) {
107
- const rulesHeader = '## Project Rules\n\nThe following rules MUST be followed for all code in this project:\n\n';
108
- const rulesContent = rulesHeader + projectRules;
109
- const rulesTokens = this.estimateTokens(rulesContent);
110
-
111
- if (rulesTokens <= maxTokens) {
112
- contentParts.push(rulesContent);
113
- injectedAbilities.push('_project-rules');
114
- currentTokens += rulesTokens;
115
- }
116
- }
106
+ // INV-ABL-001: Separate core abilities from others to inject them first
107
+ const coreAbilitySet = new Set(coreAbilities ?? []);
108
+ const coreAbilitiesList = abilities.filter(a => coreAbilitySet.has(a.abilityId));
109
+ const otherAbilities = abilities.filter(a => !coreAbilitySet.has(a.abilityId));
117
110
 
118
- for (const ability of abilities) {
111
+ // Helper function to inject an ability
112
+ const injectAbility = (ability: typeof abilities[0]): boolean => {
119
113
  const abilityTokens = this.estimateTokens(ability.content);
120
114
 
121
115
  if (currentTokens + abilityTokens > maxTokens) {
122
- truncated = true;
123
- break;
116
+ return false; // Would exceed token limit
124
117
  }
125
118
 
126
119
  const header = options?.includeMetadata
@@ -130,6 +123,41 @@ export class DefaultAbilityManager implements AbilityManager {
130
123
  contentParts.push(header + ability.content);
131
124
  injectedAbilities.push(ability.abilityId);
132
125
  currentTokens += abilityTokens;
126
+ return true;
127
+ };
128
+
129
+ // INV-ABL-001: First inject core abilities (in order of relevance score)
130
+ for (const ability of coreAbilitiesList) {
131
+ if (!injectAbility(ability)) {
132
+ truncated = true;
133
+ break;
134
+ }
135
+ }
136
+
137
+ // Then inject project rules if present (.automatosx/rules.md)
138
+ if (!truncated) {
139
+ const projectRules = loadProjectRules();
140
+ if (projectRules) {
141
+ const rulesHeader = '## Project Rules\n\nThe following rules MUST be followed for all code in this project:\n\n';
142
+ const rulesContent = rulesHeader + projectRules;
143
+ const rulesTokens = this.estimateTokens(rulesContent);
144
+
145
+ if (currentTokens + rulesTokens <= maxTokens) {
146
+ contentParts.push(rulesContent);
147
+ injectedAbilities.push('_project-rules');
148
+ currentTokens += rulesTokens;
149
+ }
150
+ }
151
+ }
152
+
153
+ // Finally inject remaining abilities
154
+ if (!truncated) {
155
+ for (const ability of otherAbilities) {
156
+ if (!injectAbility(ability)) {
157
+ truncated = true;
158
+ break;
159
+ }
160
+ }
133
161
  }
134
162
 
135
163
  return {