@kintsugi-ai/hook 0.1.0 → 0.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.
@@ -1,42 +0,0 @@
1
- import { test, describe } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { detectAgent, getModifiedFilePath } from './agent-detect.js';
4
- describe('Agent Detection & Protocol Adaptation', () => {
5
- test('detects Antigravity (agy) from stdin payload markers', () => {
6
- const agyPayload = {
7
- conversationId: '550e8400-e29b-41d4-a716-446655440000',
8
- workspacePaths: ['/workspace/kintsugi'],
9
- toolCall: {
10
- name: 'write_to_file',
11
- args: {
12
- TargetFile: 'src/components/Checkout.tsx',
13
- }
14
- }
15
- };
16
- const detected = detectAgent(agyPayload);
17
- assert.equal(detected, 'agy');
18
- const filePath = getModifiedFilePath(detected, agyPayload);
19
- assert.equal(filePath, 'src/components/Checkout.tsx');
20
- });
21
- test('detects Antigravity from Stop event payload', () => {
22
- const stopPayload = {
23
- conversationId: '550e8400-e29b-41d4-a716-446655440000',
24
- terminationReason: 'model_stop',
25
- fullyIdle: true
26
- };
27
- const detected = detectAgent(stopPayload);
28
- assert.equal(detected, 'agy');
29
- });
30
- test('extracts modified file path from Codex tool input', () => {
31
- const codexPayload = {
32
- tool_input: {
33
- file_path: 'src/Navbar.tsx'
34
- }
35
- };
36
- const detected = detectAgent(codexPayload);
37
- assert.equal(detected, 'codex');
38
- const filePath = getModifiedFilePath(detected, codexPayload);
39
- assert.equal(filePath, 'src/Navbar.tsx');
40
- });
41
- });
42
- //# sourceMappingURL=agent-detect.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-detect.test.js","sourceRoot":"","sources":["../src/agent-detect.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACH,WAAW,EACX,mBAAmB,EAEtB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACnD,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,UAAU,GAAc;YAC1B,cAAc,EAAE,sCAAsC;YACtD,cAAc,EAAE,CAAC,qBAAqB,CAAC;YACvC,QAAQ,EAAE;gBACN,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE;oBACF,UAAU,EAAE,6BAA6B;iBAC5C;aACJ;SACJ,CAAC;QAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE9B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,WAAW,GAAc;YAC3B,cAAc,EAAE,sCAAsC;YACtD,iBAAiB,EAAE,YAAY;YAC/B,SAAS,EAAE,IAAI;SAClB,CAAC;QAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,YAAY,GAAc;YAC5B,UAAU,EAAE;gBACR,SAAS,EAAE,gBAAgB;aAC9B;SACJ,CAAC;QAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAmC3D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IAC/C,MAAM,cAAc,GAChB,CAAC,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,KAAK,CAAC,eAAe,CAAC;QACpE,KAAK,CAAC,cAAc,CAAC;IACzB,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAE/B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,KAAU,CAAC;YACf,IAAI,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;YACD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,IAAI;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,MAAM,GAAG,iBAAiB;YACrC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,GAAG;YAC3C,CAAC,CAAC,OAAO,CAAC;IAClB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,mFAAmF;QACnF,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC3H,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,0CAA0C,cAAc,GAAG,EAAE,GAAG,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAU;IAC/B,sHAAsH;IACtH,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC1D,sEAAsE;IACtE,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO;aACf,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;aACpE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,GAAG,CAAC;aACT,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,oFAAoF;AACpF,SAAS,OAAO,CAAC,IAAY;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,KAAK,+BAA+B;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escalation.d.ts","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAMD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjG;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQzF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"escalation.js","sourceRoot":"","sources":["../src/escalation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,SAAS,qBAAqB,CAAC,UAAkB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,MAAwB;IAC9E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACnD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACpD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC3H,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-matcher.d.ts","sourceRoot":"","sources":["../src/flow-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAInF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-matcher.js","sourceRoot":"","sources":["../src/flow-matcher.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,KAAqB;IACrE,yFAAyF;IACzF,4EAA4E;IAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAiBA,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM;oBAkBvB,MAAM,SAAS,OAAO;oBAGtB,MAAM,SAAS,OAAO;qBAGrB,MAAM,UAAU,OAAO;;EAK/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;GASG;AAEH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACnD,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAEjE,SAAS,KAAK,CAAC,IAAY;QACvB,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC;QACxD,IAAI,CAAC;YACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACL,mCAAmC;QACvC,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,EAAE,CAAC,OAAe,EAAE,IAAc,EAAE,EAAE;YACtC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,IAAc,EAAE,EAAE;YACtC,KAAK,CAAC,SAAS,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE;YACxC,KAAK,CAAC,UAAU,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO;KACV,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAChC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-file-detector.d.ts","sourceRoot":"","sources":["../src/ui-file-detector.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,UAG/B,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAwB,GAAG,OAAO,CAuB5F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-file-detector.js","sourceRoot":"","sources":["../src/ui-file-detector.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa;IACjD,WAAW,EAAE,UAAU,EAAE,WAAW;CACvC,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7F,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,WAAqB,mBAAmB;IAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,0DAA0D;IAC1D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,kEAAkE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtD,IAAI,QAAQ,IAAI,GAAG,KAAK,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -1,53 +0,0 @@
1
- import { test, describe } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import {
4
- detectAgent,
5
- getModifiedFilePath,
6
- type HookInput
7
- } from './agent-detect.js';
8
-
9
- describe('Agent Detection & Protocol Adaptation', () => {
10
- test('detects Antigravity (agy) from stdin payload markers', () => {
11
- const agyPayload: HookInput = {
12
- conversationId: '550e8400-e29b-41d4-a716-446655440000',
13
- workspacePaths: ['/workspace/kintsugi'],
14
- toolCall: {
15
- name: 'write_to_file',
16
- args: {
17
- TargetFile: 'src/components/Checkout.tsx',
18
- }
19
- }
20
- };
21
-
22
- const detected = detectAgent(agyPayload);
23
- assert.equal(detected, 'agy');
24
-
25
- const filePath = getModifiedFilePath(detected, agyPayload);
26
- assert.equal(filePath, 'src/components/Checkout.tsx');
27
- });
28
-
29
- test('detects Antigravity from Stop event payload', () => {
30
- const stopPayload: HookInput = {
31
- conversationId: '550e8400-e29b-41d4-a716-446655440000',
32
- terminationReason: 'model_stop',
33
- fullyIdle: true
34
- };
35
-
36
- const detected = detectAgent(stopPayload);
37
- assert.equal(detected, 'agy');
38
- });
39
-
40
- test('extracts modified file path from Codex tool input', () => {
41
- const codexPayload: HookInput = {
42
- tool_input: {
43
- file_path: 'src/Navbar.tsx'
44
- }
45
- };
46
-
47
- const detected = detectAgent(codexPayload);
48
- assert.equal(detected, 'codex');
49
-
50
- const filePath = getModifiedFilePath(detected, codexPayload);
51
- assert.equal(filePath, 'src/Navbar.tsx');
52
- });
53
- });
@@ -1,167 +0,0 @@
1
- /**
2
- * Agent type detection and protocol helpers for Claude Code, Codex CLI, and Antigravity (agy).
3
- */
4
-
5
- export type AgentType = 'claude-code' | 'codex' | 'agy' | 'unknown';
6
-
7
- export interface HookInput {
8
- // Antigravity (agy) protocol fields
9
- conversationId?: string;
10
- workspacePaths?: string[];
11
- transcriptPath?: string;
12
- artifactDirectoryPath?: string;
13
- terminationReason?: string;
14
- toolCall?: {
15
- name: string;
16
- args?: {
17
- TargetFile?: string;
18
- CommandLine?: string;
19
- [key: string]: unknown;
20
- };
21
- };
22
-
23
- // Claude / Codex protocol fields
24
- hook_event_name?: string;
25
- tool_input?: {
26
- file_path?: string;
27
- path?: string;
28
- TargetFile?: string;
29
- [key: string]: unknown;
30
- };
31
- tool_name?: string;
32
- session_id?: string;
33
- [key: string]: unknown;
34
- }
35
-
36
- /**
37
- * Detects the type of agent invoking the hook.
38
- * @param stdin Optional parsed stdin payload to inspect markers.
39
- * @returns The detected agent type.
40
- */
41
- export function detectAgent(stdin?: HookInput): AgentType {
42
- // 1. Explicit Antigravity (agy) payload markers in stdin
43
- if (
44
- stdin?.conversationId ||
45
- stdin?.transcriptPath ||
46
- stdin?.toolCall
47
- ) {
48
- return 'agy';
49
- }
50
-
51
- // 2. Explicit Claude Code markers
52
- if (process.env.CLAUDE_SESSION_ID || process.env.CLAUDE_FILE_PATH) {
53
- return 'claude-code';
54
- }
55
-
56
- // 3. Explicit Codex payload marker (tool_input without agy headers)
57
- if (stdin?.tool_input && !stdin?.conversationId) {
58
- return 'codex';
59
- }
60
-
61
- // 4. Ambient environment markers
62
- if (process.env.ANTIGRAVITY_AGENT || process.env.GEMINI_CLI) {
63
- return 'agy';
64
- }
65
-
66
- // 5. Default fallback
67
- return 'codex';
68
- }
69
-
70
- /**
71
- * Extracts the modified file path from the agent context.
72
- * @param agent The type of agent.
73
- * @param stdin The input from standard input.
74
- * @returns The modified file path, if found.
75
- */
76
- export function getModifiedFilePath(agent: AgentType, stdin: HookInput): string | undefined {
77
- if (agent === 'agy') {
78
- return (
79
- stdin?.toolCall?.args?.TargetFile ||
80
- (stdin?.toolCall?.args?.['target_file'] as string | undefined) ||
81
- stdin?.tool_input?.TargetFile ||
82
- stdin?.tool_input?.file_path
83
- );
84
- }
85
-
86
- if (agent === 'claude-code') {
87
- return (
88
- process.env.CLAUDE_FILE_PATH ||
89
- stdin?.tool_input?.file_path ||
90
- (stdin?.tool_input?.['filePath'] as string | undefined)
91
- );
92
- }
93
-
94
- return (
95
- stdin?.tool_input?.file_path ||
96
- stdin?.tool_input?.path ||
97
- stdin?.tool_input?.TargetFile
98
- );
99
- }
100
-
101
- /**
102
- * Outputs feedback based on the agent type protocols.
103
- * @param agent The type of agent.
104
- * @param feedback The formatted feedback string.
105
- * @param options Additional metadata such as whether this is a Stop event.
106
- */
107
- export function outputFeedback(
108
- agent: AgentType,
109
- feedback: string,
110
- options?: { isStopEvent?: boolean; hasRegression?: boolean }
111
- ): void {
112
- if (agent === 'agy') {
113
- if (options?.isStopEvent) {
114
- if (options.hasRegression) {
115
- // Antigravity Stop Hook protocol: continue execution loop with reason
116
- const response = {
117
- decision: 'continue',
118
- reason: feedback
119
- };
120
- process.stdout.write(JSON.stringify(response, null, 2) + '\n');
121
- } else {
122
- process.stdout.write('{}\n');
123
- }
124
- } else {
125
- // Antigravity PostToolUse contract expects empty JSON {}
126
- process.stdout.write('{}\n');
127
- }
128
- } else if (agent === 'claude-code') {
129
- if (options?.isStopEvent) {
130
- // Claude Code Stop-hook contract: {"decision":"block"} keeps the
131
- // agent working with `reason` as the feedback. Plain stdout text
132
- // would not reach the model on a Stop event.
133
- if (options.hasRegression) {
134
- const response = {
135
- decision: 'block',
136
- reason: feedback
137
- };
138
- process.stdout.write(JSON.stringify(response, null, 2) + '\n');
139
- } else {
140
- process.stdout.write('{}\n');
141
- }
142
- } else {
143
- process.stdout.write(feedback + '\n');
144
- }
145
- } else {
146
- process.stderr.write(feedback + '\n');
147
- }
148
- }
149
-
150
- /**
151
- * Exits the process with the appropriate code for the agent.
152
- * @param agent The type of agent.
153
- * @param hasRegression Whether a regression was detected.
154
- */
155
- export function exitWithResult(agent: AgentType, hasRegression: boolean): never {
156
- if (agent === 'agy') {
157
- // Antigravity communicates decisions via JSON on stdout, with exit code 0
158
- process.exit(0);
159
- } else if (agent === 'claude-code') {
160
- // Claude always expects exit 0; feedback is passed via stdout
161
- process.exit(0);
162
- } else if (agent === 'codex') {
163
- // Codex expects exit 2 for failure (reject action)
164
- process.exit(hasRegression ? 2 : 0);
165
- }
166
- process.exit(0);
167
- }
package/src/context.ts DELETED
@@ -1,80 +0,0 @@
1
- import fs from 'node:fs';
2
- import type { HookInput } from './agent-detect.js';
3
-
4
- const MAX_CONTEXT_CHARS = 600;
5
-
6
- /**
7
- * Best-effort extraction of "what was the agent asked to do" from the latest
8
- * turn, to give the vision classifier intent context. Claude Code Stop
9
- * payloads carry `transcript_path` (JSONL); Antigravity carries
10
- * `transcriptPath`. Codex has none — return empty and let the classifier
11
- * decide without context.
12
- */
13
- export function extractTurnContext(input: HookInput): string {
14
- const transcriptPath =
15
- (typeof input.transcript_path === 'string' && input.transcript_path) ||
16
- input.transcriptPath;
17
- if (!transcriptPath) return '';
18
-
19
- try {
20
- const content = fs.readFileSync(transcriptPath, 'utf-8');
21
- const userTexts: string[] = [];
22
-
23
- for (const line of content.split('\n')) {
24
- const trimmed = line.trim();
25
- if (!trimmed) continue;
26
- let entry: any;
27
- try {
28
- entry = JSON.parse(trimmed);
29
- } catch {
30
- continue;
31
- }
32
- const text = extractUserText(entry);
33
- if (text) userTexts.push(text);
34
- }
35
-
36
- const context = userTexts.slice(-2).join(' | ');
37
- return context.length > MAX_CONTEXT_CHARS
38
- ? context.slice(0, MAX_CONTEXT_CHARS) + '…'
39
- : context;
40
- } catch (err: unknown) {
41
- // ENOENT is expected when the agent has no transcript — everything else is unusual
42
- const isNotFound = typeof err === 'object' && err !== null && 'code' in err && (err as { code: string }).code === 'ENOENT';
43
- if (!isNotFound) {
44
- console.warn(`kintsugi: failed to read transcript at ${transcriptPath}:`, err);
45
- }
46
- return '';
47
- }
48
- }
49
-
50
- function extractUserText(entry: any): string | undefined {
51
- // Claude Code transcript entries: { type: "user", message: { role: "user", content: string | [{type:"text",text}] } }
52
- const message = entry?.message ?? entry;
53
- const role = message?.role ?? entry?.type;
54
- if (role !== 'user' && role !== 'human') return undefined;
55
- // Skip tool results / interrupt notices — only real instructions help
56
- if (entry?.type === 'tool_result') return undefined;
57
-
58
- const content = message?.content;
59
- if (typeof content === 'string' && content.trim()) {
60
- return isNoise(content) ? undefined : content.trim();
61
- }
62
- if (Array.isArray(content)) {
63
- const text = content
64
- .filter((c: any) => c?.type === 'text' && typeof c.text === 'string')
65
- .map((c: any) => c.text)
66
- .join(' ')
67
- .trim();
68
- return text && !isNoise(text) ? text : undefined;
69
- }
70
- return undefined;
71
- }
72
-
73
- /** Filters transcript noise like system-injected reminders and empty interrupts. */
74
- function isNoise(text: string): boolean {
75
- const t = text.trim();
76
- if (!t) return true;
77
- if (t.startsWith('<')) return true;
78
- if (t === '[Request interrupted by user]') return true;
79
- return false;
80
- }
package/src/escalation.ts DELETED
@@ -1,60 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import type { ComparisonResult } from '@kintsugi-ai/core';
4
-
5
- export interface EscalationSignal {
6
- flowName: string;
7
- result: ComparisonResult;
8
- oldVideoPath?: string;
9
- newVideoPath?: string;
10
- timestamp: string;
11
- attempt: number;
12
- maxAttempts: number;
13
- }
14
-
15
- function getEscalationFilePath(projectDir: string): string {
16
- return path.join(projectDir, '.kintsugi', '.escalation.json');
17
- }
18
-
19
- /**
20
- * Writes an escalation signal for the VS Code extension.
21
- * @param projectDir The project directory.
22
- * @param signal The escalation signal data.
23
- */
24
- export async function writeEscalation(projectDir: string, signal: EscalationSignal): Promise<void> {
25
- const filePath = getEscalationFilePath(projectDir);
26
- const dir = path.dirname(filePath);
27
- await fs.mkdir(dir, { recursive: true });
28
- await fs.writeFile(filePath, JSON.stringify(signal, null, 2), 'utf-8');
29
- }
30
-
31
- /**
32
- * Reads the current escalation signal.
33
- * @param projectDir The project directory.
34
- * @returns The current escalation signal or null if not found.
35
- */
36
- export async function readEscalation(projectDir: string): Promise<EscalationSignal | null> {
37
- const filePath = getEscalationFilePath(projectDir);
38
- try {
39
- const content = await fs.readFile(filePath, 'utf-8');
40
- return JSON.parse(content) as EscalationSignal;
41
- } catch {
42
- return null;
43
- }
44
- }
45
-
46
- /**
47
- * Clears the escalation signal.
48
- * @param projectDir The project directory.
49
- */
50
- export async function clearEscalation(projectDir: string): Promise<void> {
51
- const filePath = getEscalationFilePath(projectDir);
52
- try {
53
- await fs.unlink(filePath);
54
- } catch (err: unknown) {
55
- const isNotFound = typeof err === 'object' && err !== null && 'code' in err && (err as { code: string }).code === 'ENOENT';
56
- if (!isNotFound) {
57
- throw err;
58
- }
59
- }
60
- }
@@ -1,13 +0,0 @@
1
- import type { FlowMetadata } from '@kintsugi-ai/core';
2
-
3
- /**
4
- * Determines which flows are affected by a file change.
5
- * @param filePath The modified file path.
6
- * @param flows The list of available flows.
7
- * @returns Array of affected flow names.
8
- */
9
- export function findAffectedFlows(filePath: string, flows: FlowMetadata[]): string[] {
10
- // A conservative approach: for now, assume all flows might be affected by the UI change.
11
- // Future enhancements can check if the file path matches explicit mappings.
12
- return flows.map(f => f.name);
13
- }