@foothill/agent-move 1.0.6
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/.github/screenshot.png +0 -0
- package/README.md +266 -0
- package/bin/cli.js +229 -0
- package/package.json +53 -0
- package/packages/client/dist/assets/BufferResource-Ddjob236.js +185 -0
- package/packages/client/dist/assets/CanvasRenderer-B0w6SYyW.js +1 -0
- package/packages/client/dist/assets/Filter-NcMGuiK-.js +1 -0
- package/packages/client/dist/assets/RenderTargetSystem-DgAzY5_U.js +172 -0
- package/packages/client/dist/assets/WebGLRenderer-DUWXDPIX.js +156 -0
- package/packages/client/dist/assets/WebGPURenderer-C1HbrllR.js +41 -0
- package/packages/client/dist/assets/browserAll-CaF1Fl0O.js +14 -0
- package/packages/client/dist/assets/index-CMmR_RuS.css +1 -0
- package/packages/client/dist/assets/index-Dh8yWoLP.js +711 -0
- package/packages/client/dist/assets/webworkerAll-BJ6UhC7r.js +83 -0
- package/packages/client/dist/favicon.svg +27 -0
- package/packages/client/dist/index.html +167 -0
- package/packages/client/package.json +19 -0
- package/packages/server/dist/config.d.ts +12 -0
- package/packages/server/dist/config.d.ts.map +1 -0
- package/packages/server/dist/config.js +19 -0
- package/packages/server/dist/config.js.map +1 -0
- package/packages/server/dist/hooks/hook-event-manager.d.ts +39 -0
- package/packages/server/dist/hooks/hook-event-manager.d.ts.map +1 -0
- package/packages/server/dist/hooks/hook-event-manager.js +161 -0
- package/packages/server/dist/hooks/hook-event-manager.js.map +1 -0
- package/packages/server/dist/hooks/hook-installer.d.ts +14 -0
- package/packages/server/dist/hooks/hook-installer.d.ts.map +1 -0
- package/packages/server/dist/hooks/hook-installer.js +179 -0
- package/packages/server/dist/hooks/hook-installer.js.map +1 -0
- package/packages/server/dist/index.d.ts +4 -0
- package/packages/server/dist/index.d.ts.map +1 -0
- package/packages/server/dist/index.js +3544 -0
- package/packages/server/dist/index.js.map +1 -0
- package/packages/server/dist/routes/api.d.ts +4 -0
- package/packages/server/dist/routes/api.d.ts.map +1 -0
- package/packages/server/dist/routes/api.js +27 -0
- package/packages/server/dist/routes/api.js.map +1 -0
- package/packages/server/dist/state/activity-processor.d.ts +31 -0
- package/packages/server/dist/state/activity-processor.d.ts.map +1 -0
- package/packages/server/dist/state/activity-processor.js +417 -0
- package/packages/server/dist/state/activity-processor.js.map +1 -0
- package/packages/server/dist/state/agent-state-manager.d.ts +107 -0
- package/packages/server/dist/state/agent-state-manager.d.ts.map +1 -0
- package/packages/server/dist/state/agent-state-manager.js +1622 -0
- package/packages/server/dist/state/agent-state-manager.js.map +1 -0
- package/packages/server/dist/state/anomaly-detector.d.ts +23 -0
- package/packages/server/dist/state/anomaly-detector.d.ts.map +1 -0
- package/packages/server/dist/state/anomaly-detector.js +272 -0
- package/packages/server/dist/state/anomaly-detector.js.map +1 -0
- package/packages/server/dist/state/identity-manager.d.ts +31 -0
- package/packages/server/dist/state/identity-manager.d.ts.map +1 -0
- package/packages/server/dist/state/identity-manager.js +63 -0
- package/packages/server/dist/state/identity-manager.js.map +1 -0
- package/packages/server/dist/state/role-resolver.d.ts +23 -0
- package/packages/server/dist/state/role-resolver.d.ts.map +1 -0
- package/packages/server/dist/state/role-resolver.js +43 -0
- package/packages/server/dist/state/role-resolver.js.map +1 -0
- package/packages/server/dist/state/task-graph-manager.d.ts +31 -0
- package/packages/server/dist/state/task-graph-manager.d.ts.map +1 -0
- package/packages/server/dist/state/task-graph-manager.js +191 -0
- package/packages/server/dist/state/task-graph-manager.js.map +1 -0
- package/packages/server/dist/state/tool-chain-tracker.d.ts +23 -0
- package/packages/server/dist/state/tool-chain-tracker.d.ts.map +1 -0
- package/packages/server/dist/state/tool-chain-tracker.js +113 -0
- package/packages/server/dist/state/tool-chain-tracker.js.map +1 -0
- package/packages/server/dist/watcher/agent-watcher.d.ts +16 -0
- package/packages/server/dist/watcher/agent-watcher.d.ts.map +1 -0
- package/packages/server/dist/watcher/agent-watcher.js +0 -0
- package/packages/server/dist/watcher/agent-watcher.js.map +1 -0
- package/packages/server/dist/watcher/claude-paths.d.ts +32 -0
- package/packages/server/dist/watcher/claude-paths.d.ts.map +1 -0
- package/packages/server/dist/watcher/claude-paths.js +104 -0
- package/packages/server/dist/watcher/claude-paths.js.map +1 -0
- package/packages/server/dist/watcher/file-watcher.d.ts +17 -0
- package/packages/server/dist/watcher/file-watcher.d.ts.map +1 -0
- package/packages/server/dist/watcher/file-watcher.js +347 -0
- package/packages/server/dist/watcher/file-watcher.js.map +1 -0
- package/packages/server/dist/watcher/git-info.d.ts +3 -0
- package/packages/server/dist/watcher/git-info.d.ts.map +1 -0
- package/packages/server/dist/watcher/git-info.js +35 -0
- package/packages/server/dist/watcher/git-info.js.map +1 -0
- package/packages/server/dist/watcher/jsonl-parser.d.ts +21 -0
- package/packages/server/dist/watcher/jsonl-parser.d.ts.map +1 -0
- package/packages/server/dist/watcher/jsonl-parser.js +95 -0
- package/packages/server/dist/watcher/jsonl-parser.js.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-parser.d.ts +58 -0
- package/packages/server/dist/watcher/opencode/opencode-parser.d.ts.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-parser.js +256 -0
- package/packages/server/dist/watcher/opencode/opencode-parser.js.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-paths.d.ts +20 -0
- package/packages/server/dist/watcher/opencode/opencode-paths.d.ts.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-paths.js +35 -0
- package/packages/server/dist/watcher/opencode/opencode-paths.js.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-watcher.d.ts +49 -0
- package/packages/server/dist/watcher/opencode/opencode-watcher.d.ts.map +1 -0
- package/packages/server/dist/watcher/opencode/opencode-watcher.js +1292 -0
- package/packages/server/dist/watcher/opencode/opencode-watcher.js.map +1 -0
- package/packages/server/dist/watcher/session-scanner.d.ts +7 -0
- package/packages/server/dist/watcher/session-scanner.d.ts.map +1 -0
- package/packages/server/dist/watcher/session-scanner.js +69 -0
- package/packages/server/dist/watcher/session-scanner.js.map +1 -0
- package/packages/server/dist/ws/broadcaster.d.ts +18 -0
- package/packages/server/dist/ws/broadcaster.d.ts.map +1 -0
- package/packages/server/dist/ws/broadcaster.js +152 -0
- package/packages/server/dist/ws/broadcaster.js.map +1 -0
- package/packages/server/dist/ws/ws-handler.d.ts +6 -0
- package/packages/server/dist/ws/ws-handler.d.ts.map +1 -0
- package/packages/server/dist/ws/ws-handler.js +55 -0
- package/packages/server/dist/ws/ws-handler.js.map +1 -0
- package/packages/server/package.json +25 -0
- package/packages/shared/dist/constants/colors.d.ts +46 -0
- package/packages/shared/dist/constants/colors.d.ts.map +1 -0
- package/packages/shared/dist/constants/colors.js +178 -0
- package/packages/shared/dist/constants/colors.js.map +1 -0
- package/packages/shared/dist/constants/names.d.ts +6 -0
- package/packages/shared/dist/constants/names.d.ts.map +1 -0
- package/packages/shared/dist/constants/names.js +28 -0
- package/packages/shared/dist/constants/names.js.map +1 -0
- package/packages/shared/dist/constants/tools.d.ts +15 -0
- package/packages/shared/dist/constants/tools.d.ts.map +1 -0
- package/packages/shared/dist/constants/tools.js +120 -0
- package/packages/shared/dist/constants/tools.js.map +1 -0
- package/packages/shared/dist/constants/zones.d.ts +37 -0
- package/packages/shared/dist/constants/zones.d.ts.map +1 -0
- package/packages/shared/dist/constants/zones.js +128 -0
- package/packages/shared/dist/constants/zones.js.map +1 -0
- package/packages/shared/dist/index.d.ts +15 -0
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +7 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/types/agent.d.ts +85 -0
- package/packages/shared/dist/types/agent.d.ts.map +1 -0
- package/packages/shared/dist/types/agent.js +2 -0
- package/packages/shared/dist/types/agent.js.map +1 -0
- package/packages/shared/dist/types/anomaly.d.ts +18 -0
- package/packages/shared/dist/types/anomaly.d.ts.map +1 -0
- package/packages/shared/dist/types/anomaly.js +6 -0
- package/packages/shared/dist/types/anomaly.js.map +1 -0
- package/packages/shared/dist/types/hooks.d.ts +51 -0
- package/packages/shared/dist/types/hooks.d.ts.map +1 -0
- package/packages/shared/dist/types/hooks.js +2 -0
- package/packages/shared/dist/types/hooks.js.map +1 -0
- package/packages/shared/dist/types/jsonl.d.ts +62 -0
- package/packages/shared/dist/types/jsonl.d.ts.map +1 -0
- package/packages/shared/dist/types/jsonl.js +3 -0
- package/packages/shared/dist/types/jsonl.js.map +1 -0
- package/packages/shared/dist/types/task-graph.d.ts +20 -0
- package/packages/shared/dist/types/task-graph.d.ts.map +1 -0
- package/packages/shared/dist/types/task-graph.js +2 -0
- package/packages/shared/dist/types/task-graph.js.map +1 -0
- package/packages/shared/dist/types/tool-chain.d.ts +17 -0
- package/packages/shared/dist/types/tool-chain.d.ts.map +1 -0
- package/packages/shared/dist/types/tool-chain.js +2 -0
- package/packages/shared/dist/types/tool-chain.js.map +1 -0
- package/packages/shared/dist/types/websocket.d.ts +132 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -0
- package/packages/shared/dist/types/websocket.js +2 -0
- package/packages/shared/dist/types/websocket.js.map +1 -0
- package/packages/shared/dist/types/zone.d.ts +21 -0
- package/packages/shared/dist/types/zone.d.ts.map +1 -0
- package/packages/shared/dist/types/zone.js +2 -0
- package/packages/shared/dist/types/zone.js.map +1 -0
- package/packages/shared/package.json +15 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import{G,b as I,i as _,M as k,K as B,z as O,$ as m,T as v,ai as A,R as C,w as z,_ as E,p as w}from"./index-Dh8yWoLP.js";import{F as U}from"./Filter-NcMGuiK-.js";var M=`in vec2 aPosition;
|
|
2
|
+
out vec2 vTextureCoord;
|
|
3
|
+
|
|
4
|
+
uniform vec4 uInputSize;
|
|
5
|
+
uniform vec4 uOutputFrame;
|
|
6
|
+
uniform vec4 uOutputTexture;
|
|
7
|
+
|
|
8
|
+
vec4 filterVertexPosition( void )
|
|
9
|
+
{
|
|
10
|
+
vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;
|
|
11
|
+
|
|
12
|
+
position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;
|
|
13
|
+
position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;
|
|
14
|
+
|
|
15
|
+
return vec4(position, 0.0, 1.0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
vec2 filterTextureCoord( void )
|
|
19
|
+
{
|
|
20
|
+
return aPosition * (uOutputFrame.zw * uInputSize.zw);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
void main(void)
|
|
24
|
+
{
|
|
25
|
+
gl_Position = filterVertexPosition();
|
|
26
|
+
vTextureCoord = filterTextureCoord();
|
|
27
|
+
}
|
|
28
|
+
`,V=`in vec2 vTextureCoord;
|
|
29
|
+
out vec4 finalColor;
|
|
30
|
+
uniform sampler2D uTexture;
|
|
31
|
+
void main() {
|
|
32
|
+
finalColor = texture(uTexture, vTextureCoord);
|
|
33
|
+
}
|
|
34
|
+
`,y=`struct GlobalFilterUniforms {
|
|
35
|
+
uInputSize: vec4<f32>,
|
|
36
|
+
uInputPixel: vec4<f32>,
|
|
37
|
+
uInputClamp: vec4<f32>,
|
|
38
|
+
uOutputFrame: vec4<f32>,
|
|
39
|
+
uGlobalFrame: vec4<f32>,
|
|
40
|
+
uOutputTexture: vec4<f32>,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
@group(0) @binding(0) var <uniform> gfu: GlobalFilterUniforms;
|
|
44
|
+
@group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
45
|
+
@group(0) @binding(2) var uSampler: sampler;
|
|
46
|
+
|
|
47
|
+
struct VSOutput {
|
|
48
|
+
@builtin(position) position: vec4<f32>,
|
|
49
|
+
@location(0) uv: vec2<f32>
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
fn filterVertexPosition(aPosition: vec2<f32>) -> vec4<f32>
|
|
53
|
+
{
|
|
54
|
+
var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;
|
|
55
|
+
|
|
56
|
+
position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;
|
|
57
|
+
position.y = position.y * (2.0 * gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;
|
|
58
|
+
|
|
59
|
+
return vec4(position, 0.0, 1.0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fn filterTextureCoord(aPosition: vec2<f32>) -> vec2<f32>
|
|
63
|
+
{
|
|
64
|
+
return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@vertex
|
|
68
|
+
fn mainVertex(
|
|
69
|
+
@location(0) aPosition: vec2<f32>,
|
|
70
|
+
) -> VSOutput {
|
|
71
|
+
return VSOutput(
|
|
72
|
+
filterVertexPosition(aPosition),
|
|
73
|
+
filterTextureCoord(aPosition)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@fragment
|
|
78
|
+
fn mainFragment(
|
|
79
|
+
@location(0) uv: vec2<f32>,
|
|
80
|
+
) -> @location(0) vec4<f32> {
|
|
81
|
+
return textureSample(uTexture, uSampler, uv);
|
|
82
|
+
}
|
|
83
|
+
`;class Y extends U{constructor(){const e=G.from({vertex:{source:y,entryPoint:"mainVertex"},fragment:{source:y,entryPoint:"mainFragment"},name:"passthrough-filter"}),t=I.from({vertex:M,fragment:V,name:"passthrough-filter"});super({gpuProgram:e,glProgram:t})}}class R{constructor(e){this._renderer=e}push(e,t,r){this._renderer.renderPipes.batch.break(r),r.add({renderPipeId:"filter",canBundle:!1,action:"pushFilter",container:t,filterEffect:e})}pop(e,t,r){this._renderer.renderPipes.batch.break(r),r.add({renderPipeId:"filter",action:"popFilter",canBundle:!1})}execute(e){e.action==="pushFilter"?this._renderer.filter.push(e):e.action==="popFilter"&&this._renderer.filter.pop()}destroy(){this._renderer=null}}R.extension={type:[_.WebGLPipes,_.WebGPUPipes,_.CanvasPipes],name:"filter"};const P=new k;function X(T,e){e.clear();const t=e.matrix;for(let r=0;r<T.length;r++){const n=T[r];if(n.globalDisplayStatus<7)continue;const i=n.renderGroup??n.parentRenderGroup;i!=null&&i.isCachedAsTexture?e.matrix=P.copyFrom(i.textureOffsetInverseTransform).append(n.worldTransform):i!=null&&i._parentCacheAsTextureRenderGroup?e.matrix=P.copyFrom(i._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(n.groupTransform):e.matrix=n.worldTransform,e.addBounds(n.bounds)}return e.matrix=t,e}const q=new A({attributes:{aPosition:{buffer:new Float32Array([0,0,1,0,1,1,0,1]),format:"float32x2",stride:8,offset:0}},indexBuffer:new Uint32Array([0,1,2,0,2,3])});class W{constructor(){this.skip=!1,this.inputTexture=null,this.backTexture=null,this.filters=null,this.bounds=new E,this.container=null,this.blendRequired=!1,this.outputRenderSurface=null,this.globalFrame={x:0,y:0,width:0,height:0},this.firstEnabledIndex=-1,this.lastEnabledIndex=-1}}class S{constructor(e){this._filterStackIndex=0,this._filterStack=[],this._filterGlobalUniforms=new B({uInputSize:{value:new Float32Array(4),type:"vec4<f32>"},uInputPixel:{value:new Float32Array(4),type:"vec4<f32>"},uInputClamp:{value:new Float32Array(4),type:"vec4<f32>"},uOutputFrame:{value:new Float32Array(4),type:"vec4<f32>"},uGlobalFrame:{value:new Float32Array(4),type:"vec4<f32>"},uOutputTexture:{value:new Float32Array(4),type:"vec4<f32>"}}),this._globalFilterBindGroup=new O({}),this.renderer=e}get activeBackTexture(){var e;return(e=this._activeFilterData)==null?void 0:e.backTexture}push(e){const t=this.renderer,r=e.filterEffect.filters,n=this._pushFilterData();n.skip=!1,n.filters=r,n.container=e.container,n.outputRenderSurface=t.renderTarget.renderSurface;const i=t.renderTarget.renderTarget.colorTexture.source,o=i.resolution,s=i.antialias;if(r.every(d=>!d.enabled)){n.skip=!0;return}const c=n.bounds;if(this._calculateFilterArea(e,c),this._calculateFilterBounds(n,t.renderTarget.rootViewPort,s,o,1),n.skip)return;const u=this._getPreviousFilterData(),f=this._findFilterResolution(o);let l=0,a=0;u&&(l=u.bounds.minX,a=u.bounds.minY),this._calculateGlobalFrame(n,l,a,f,i.width,i.height),this._setupFilterTextures(n,c,t,u)}generateFilteredTexture({texture:e,filters:t}){const r=this._pushFilterData();this._activeFilterData=r,r.skip=!1,r.filters=t;const n=e.source,i=n.resolution,o=n.antialias;if(t.every(d=>!d.enabled))return r.skip=!0,e;const s=r.bounds;if(s.addRect(e.frame),this._calculateFilterBounds(r,s.rectangle,o,i,0),r.skip)return e;const c=i;this._calculateGlobalFrame(r,0,0,c,n.width,n.height),r.outputRenderSurface=m.getOptimalTexture(s.width,s.height,r.resolution,r.antialias),r.backTexture=v.EMPTY,r.inputTexture=e,this.renderer.renderTarget.finishRenderPass(),this._applyFiltersToTexture(r,!0);const a=r.outputRenderSurface;return a.source.alphaMode="premultiplied-alpha",a}pop(){const e=this.renderer,t=this._popFilterData();t.skip||(e.globalUniforms.pop(),e.renderTarget.finishRenderPass(),this._activeFilterData=t,this._applyFiltersToTexture(t,!1),t.blendRequired&&m.returnTexture(t.backTexture),m.returnTexture(t.inputTexture))}getBackTexture(e,t,r){const n=e.colorTexture.source._resolution,i=m.getOptimalTexture(t.width,t.height,n,!1);let o=t.minX,s=t.minY;r&&(o-=r.minX,s-=r.minY),o=Math.floor(o*n),s=Math.floor(s*n);const c=Math.ceil(t.width*n),u=Math.ceil(t.height*n);return this.renderer.renderTarget.copyToTexture(e,i,{x:o,y:s},{width:c,height:u},{x:0,y:0}),i}applyFilter(e,t,r,n){const i=this.renderer,o=this._activeFilterData,c=o.outputRenderSurface===r,u=i.renderTarget.rootRenderTarget.colorTexture.source._resolution,f=this._findFilterResolution(u);let l=0,a=0;if(c){const p=this._findPreviousFilterOffset();l=p.x,a=p.y}this._updateFilterUniforms(t,r,o,l,a,f,c,n);const d=e.enabled?e:this._getPassthroughFilter();this._setupBindGroupsAndRender(d,t,i)}calculateSpriteMatrix(e,t){const r=this._activeFilterData,n=e.set(r.inputTexture._source.width,0,0,r.inputTexture._source.height,r.bounds.minX,r.bounds.minY),i=t.worldTransform.copyTo(k.shared),o=t.renderGroup||t.parentRenderGroup;return o&&o.cacheToLocalTransform&&i.prepend(o.cacheToLocalTransform),i.invert(),n.prepend(i),n.scale(1/t.texture.orig.width,1/t.texture.orig.height),n.translate(t.anchor.x,t.anchor.y),n}destroy(){var e;(e=this._passthroughFilter)==null||e.destroy(!0),this._passthroughFilter=null}_getPassthroughFilter(){return this._passthroughFilter??(this._passthroughFilter=new Y),this._passthroughFilter}_setupBindGroupsAndRender(e,t,r){if(r.renderPipes.uniformBatch){const n=r.renderPipes.uniformBatch.getUboResource(this._filterGlobalUniforms);this._globalFilterBindGroup.setResource(n,0)}else this._globalFilterBindGroup.setResource(this._filterGlobalUniforms,0);this._globalFilterBindGroup.setResource(t.source,1),this._globalFilterBindGroup.setResource(t.source.style,2),e.groups[0]=this._globalFilterBindGroup,r.encoder.draw({geometry:q,shader:e,state:e._state,topology:"triangle-list"}),r.type===C.WEBGL&&r.renderTarget.finishRenderPass()}_setupFilterTextures(e,t,r,n){if(e.backTexture=v.EMPTY,e.inputTexture=m.getOptimalTexture(t.width,t.height,e.resolution,e.antialias),e.blendRequired){r.renderTarget.finishRenderPass();const i=r.renderTarget.getRenderTarget(e.outputRenderSurface);e.backTexture=this.getBackTexture(i,t,n==null?void 0:n.bounds)}r.renderTarget.bind(e.inputTexture,!0),r.globalUniforms.push({offset:t})}_calculateGlobalFrame(e,t,r,n,i,o){const s=e.globalFrame;s.x=t*n,s.y=r*n,s.width=i*n,s.height=o*n}_updateFilterUniforms(e,t,r,n,i,o,s,c){const u=this._filterGlobalUniforms.uniforms,f=u.uOutputFrame,l=u.uInputSize,a=u.uInputPixel,d=u.uInputClamp,p=u.uGlobalFrame,x=u.uOutputTexture;s?(f[0]=r.bounds.minX-n,f[1]=r.bounds.minY-i):(f[0]=0,f[1]=0),f[2]=e.frame.width,f[3]=e.frame.height,l[0]=e.source.width,l[1]=e.source.height,l[2]=1/l[0],l[3]=1/l[1],a[0]=e.source.pixelWidth,a[1]=e.source.pixelHeight,a[2]=1/a[0],a[3]=1/a[1],d[0]=.5*a[2],d[1]=.5*a[3],d[2]=e.frame.width*l[2]-.5*a[2],d[3]=e.frame.height*l[3]-.5*a[3];const b=this.renderer.renderTarget.rootRenderTarget.colorTexture;p[0]=n*o,p[1]=i*o,p[2]=b.source.width*o,p[3]=b.source.height*o,t instanceof v&&(t.source.resource=null);const g=this.renderer.renderTarget.getRenderTarget(t);this.renderer.renderTarget.bind(t,!!c),t instanceof v?(x[0]=t.frame.width,x[1]=t.frame.height):(x[0]=g.width,x[1]=g.height),x[2]=g.isRoot?-1:1,this._filterGlobalUniforms.update()}_findFilterResolution(e){let t=this._filterStackIndex-1;for(;t>0&&this._filterStack[t].skip;)--t;return t>0&&this._filterStack[t].inputTexture?this._filterStack[t].inputTexture.source._resolution:e}_findPreviousFilterOffset(){let e=0,t=0,r=this._filterStackIndex;for(;r>0;){r--;const n=this._filterStack[r];if(!n.skip){e=n.bounds.minX,t=n.bounds.minY;break}}return{x:e,y:t}}_calculateFilterArea(e,t){if(e.renderables?X(e.renderables,t):e.filterEffect.filterArea?(t.clear(),t.addRect(e.filterEffect.filterArea),t.applyMatrix(e.container.worldTransform)):e.container.getFastGlobalBounds(!0,t),e.container){const n=(e.container.renderGroup||e.container.parentRenderGroup).cacheToLocalTransform;n&&t.applyMatrix(n)}}_applyFiltersToTexture(e,t){const r=e.inputTexture,n=e.bounds,i=e.filters,o=e.firstEnabledIndex,s=e.lastEnabledIndex;if(this._globalFilterBindGroup.setResource(r.source.style,2),this._globalFilterBindGroup.setResource(e.backTexture.source,3),o===s)i[o].apply(this,r,e.outputRenderSurface,t);else{let c=e.inputTexture;const u=m.getOptimalTexture(n.width,n.height,c.source._resolution,!1);let f=u;for(let l=o;l<s;l++){const a=i[l];if(!a.enabled)continue;a.apply(this,c,f,!0);const d=c;c=f,f=d}i[s].apply(this,c,e.outputRenderSurface,t),m.returnTexture(u)}}_calculateFilterBounds(e,t,r,n,i){var g;const o=this.renderer,s=e.bounds,c=e.filters;let u=1/0,f=0,l=!0,a=!1,d=!1,p=!0,x=-1,b=-1;for(let F=0;F<c.length;F++){const h=c[F];if(!h.enabled)continue;if(x===-1&&(x=F),b=F,u=Math.min(u,h.resolution==="inherit"?n:h.resolution),f+=h.padding,h.antialias==="off"?l=!1:h.antialias==="inherit"&&l&&(l=r),h.clipToViewport||(p=!1),!!!(h.compatibleRenderers&o.type)){d=!1;break}if(h.blendRequired&&!(((g=o.backBuffer)==null?void 0:g.useBackBuffer)??!0)){z("Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options."),d=!1;break}d=!0,a||(a=h.blendRequired)}if(!d){e.skip=!0;return}if(p&&s.fitBounds(0,t.width/n,0,t.height/n),s.scale(u).ceil().scale(1/u).pad((f|0)*i),!s.isPositive){e.skip=!0;return}e.antialias=l,e.resolution=u,e.blendRequired=a,e.firstEnabledIndex=x,e.lastEnabledIndex=b}_popFilterData(){return this._filterStackIndex--,this._filterStack[this._filterStackIndex]}_getPreviousFilterData(){let e,t=this._filterStackIndex-1;for(;t>0&&(t--,e=this._filterStack[t],!!e.skip););return e}_pushFilterData(){let e=this._filterStack[this._filterStackIndex];return e||(e=this._filterStack[this._filterStackIndex]=new W),this._filterStackIndex++,e}}S.extension={type:[_.WebGLSystem,_.WebGPUSystem],name:"filter"};w.add(S);w.add(R);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#e94560"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#c23152"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="32" height="32" rx="6" fill="url(#bg)"/>
|
|
9
|
+
<!-- Pixel-art agent character -->
|
|
10
|
+
<g fill="#fff">
|
|
11
|
+
<!-- Head -->
|
|
12
|
+
<rect x="12" y="5" width="8" height="8" rx="1"/>
|
|
13
|
+
<!-- Eyes -->
|
|
14
|
+
<rect x="14" y="8" width="2" height="2" fill="#1a1e38"/>
|
|
15
|
+
<rect x="18" y="8" width="2" height="2" fill="#1a1e38"/>
|
|
16
|
+
<!-- Body -->
|
|
17
|
+
<rect x="13" y="14" width="6" height="7" rx="1"/>
|
|
18
|
+
<!-- Arms -->
|
|
19
|
+
<rect x="9" y="15" width="4" height="2" rx="1"/>
|
|
20
|
+
<rect x="19" y="15" width="4" height="2" rx="1"/>
|
|
21
|
+
<!-- Legs -->
|
|
22
|
+
<rect x="13" y="22" width="2" height="4" rx="1"/>
|
|
23
|
+
<rect x="17" y="22" width="2" height="4" rx="1"/>
|
|
24
|
+
</g>
|
|
25
|
+
<!-- Movement arrow -->
|
|
26
|
+
<path d="M24 22 L27 25 L24 28" stroke="#fff" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/>
|
|
27
|
+
</svg>
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>AgentMove — Live AI Agent Activity Monitor</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
|
+
<meta name="description" content="Watch your AI agents work in real-time with pixel-art visualizations. Monitor Claude Code sessions, tool usage, and agent activity live." />
|
|
9
|
+
<meta name="theme-color" content="#1a1e38" />
|
|
10
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
11
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
12
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-Dh8yWoLP.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CMmR_RuS.css">
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div id="disconnected-bar"></div>
|
|
18
|
+
<div id="top-bar">
|
|
19
|
+
<div class="tb-left">
|
|
20
|
+
<button id="sb-toggle" class="tb-hamburger" title="Toggle sidebar ([)" aria-label="Toggle sidebar">
|
|
21
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>
|
|
22
|
+
</button>
|
|
23
|
+
<div class="tb-logo">
|
|
24
|
+
<svg class="logo-icon" viewBox="0 0 32 32" width="18" height="18">
|
|
25
|
+
<defs><linearGradient id="logo-bg" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#e94560"/><stop offset="100%" style="stop-color:#c23152"/></linearGradient></defs>
|
|
26
|
+
<rect width="32" height="32" rx="6" fill="url(#logo-bg)"/>
|
|
27
|
+
<g fill="#fff"><rect x="12" y="5" width="8" height="8" rx="1"/><rect x="14" y="8" width="2" height="2" fill="#1a1e38"/><rect x="18" y="8" width="2" height="2" fill="#1a1e38"/><rect x="13" y="14" width="6" height="7" rx="1"/><rect x="9" y="15" width="4" height="2" rx="1"/><rect x="19" y="15" width="4" height="2" rx="1"/><rect x="13" y="22" width="2" height="4" rx="1"/><rect x="17" y="22" width="2" height="4" rx="1"/></g>
|
|
28
|
+
<path d="M24 22 L27 25 L24 28" stroke="#fff" stroke-width="1.5" fill="none" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/>
|
|
29
|
+
</svg>
|
|
30
|
+
<span class="tb-logo-dot" id="connection-dot" title="Disconnected"></span>
|
|
31
|
+
<span class="tb-logo-dot" id="hooks-dot" title="Hooks: not detected"></span>
|
|
32
|
+
<span class="tb-logo-text">AgentMove</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="tb-right">
|
|
36
|
+
<div class="tb-stats" id="tb-stats">
|
|
37
|
+
<span class="tb-stat" id="tb-active"><span class="tb-stat-dot active"></span><span class="tb-stat-val">0</span> active</span>
|
|
38
|
+
<span class="tb-stat" id="tb-idle"><span class="tb-stat-dot idle"></span><span class="tb-stat-val">0</span> idle</span>
|
|
39
|
+
<span class="tb-stat" id="tb-cost"><span class="tb-stat-icon">$</span><span class="tb-stat-val">0.00</span></span>
|
|
40
|
+
<span class="tb-stat" id="tb-velocity"><span class="tb-stat-icon tb-bolt">⚡</span><span class="tb-stat-val">0</span><span class="tb-stat-unit">/min</span></span>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="tb-actions">
|
|
43
|
+
<button id="notif-btn" title="Notifications (N)" aria-label="Notifications" style="position:relative">🔔</button>
|
|
44
|
+
<button id="cmd-hint" title="Command Palette (Ctrl+K)" aria-label="Command palette">
|
|
45
|
+
<svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor"><path d="M15.5 14h-.79l-.28-.27A6.47 6.47 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
|
|
46
|
+
</button>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<!-- Left Sidebar Navigation -->
|
|
52
|
+
<div id="sidebar">
|
|
53
|
+
<nav class="sb-nav">
|
|
54
|
+
<!-- Primary -->
|
|
55
|
+
<div class="sb-section">
|
|
56
|
+
<button class="sb-item active" data-tab="monitor">
|
|
57
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>
|
|
58
|
+
<span class="sb-label">Monitor</span>
|
|
59
|
+
</button>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- Observe -->
|
|
63
|
+
<div class="sb-section">
|
|
64
|
+
<div class="sb-section-title">OBSERVE</div>
|
|
65
|
+
<button class="sb-item" data-tab="activity">
|
|
66
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></svg>
|
|
67
|
+
<span class="sb-label">Activity</span>
|
|
68
|
+
<span class="sb-shortcut">V</span>
|
|
69
|
+
</button>
|
|
70
|
+
<button class="sb-item" data-tab="waterfall">
|
|
71
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M3 3v18h18V3H3zm16 16H5V5h14v14zM7 7h2v10H7V7zm4 4h2v6h-2v-6zm4-2h2v8h-2V9z"/></svg>
|
|
72
|
+
<span class="sb-label">Waterfall</span>
|
|
73
|
+
<span class="sb-shortcut">W</span>
|
|
74
|
+
</button>
|
|
75
|
+
<button class="sb-item" data-tab="toolchain">
|
|
76
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"/></svg>
|
|
77
|
+
<span class="sb-label">Tool Chains</span>
|
|
78
|
+
<span class="sb-shortcut">C</span>
|
|
79
|
+
</button>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<!-- Analyze -->
|
|
83
|
+
<div class="sb-section">
|
|
84
|
+
<div class="sb-section-title">ANALYZE</div>
|
|
85
|
+
<button class="sb-item" data-tab="analytics">
|
|
86
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></svg>
|
|
87
|
+
<span class="sb-label">Analytics</span>
|
|
88
|
+
<span class="sb-shortcut">A</span>
|
|
89
|
+
</button>
|
|
90
|
+
<button class="sb-item" data-tab="leaderboard">
|
|
91
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M7.5 21H2V9h5.5v12zm7.25-18h-5.5v18h5.5V3zM22 11h-5.5v10H22V11z"/></svg>
|
|
92
|
+
<span class="sb-label">Leaderboard</span>
|
|
93
|
+
<span class="sb-shortcut">L</span>
|
|
94
|
+
</button>
|
|
95
|
+
<button class="sb-item" data-tab="taskgraph">
|
|
96
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M14 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V8l-6-6zm-1 7V3.5L18.5 9H13zM8 15h8v2H8v-2zm0-4h8v2H8v-2z"/></svg>
|
|
97
|
+
<span class="sb-label">Tasks</span>
|
|
98
|
+
<span class="sb-shortcut">G</span>
|
|
99
|
+
</button>
|
|
100
|
+
<button class="sb-item" data-tab="graph">
|
|
101
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M15.89 8.11C15.5 7.72 14.83 7 13.53 7c-1.86 0-2.97 1.45-2.97 3.09 0 1.36.46 2.13 2.2 3.72.46.43.9.82 1.25 1.19.35-.37.79-.76 1.25-1.19 1.74-1.59 2.2-2.36 2.2-3.72 0-.66-.13-1.28-.5-1.8l1.04-1.04V4h-3.26l-1.04 1.04c-.52-.37-1.14-.5-1.8-.5-1.64 0-3.09 1.11-3.09 2.97 0 1.3.72 1.97 1.11 2.36L12 11.76l1.89-1.89zM12 20l-1.77-1.63C6.19 14.68 2 11.11 2 6.5 2 3.42 4.42 1 7.5 1c1.74 0 3.41.81 4.5 2.09C13.09 1.81 14.76 1 16.5 1 19.58 1 22 3.42 22 6.5c0 4.61-4.19 8.18-8.23 11.87L12 20z"/></svg>
|
|
102
|
+
<span class="sb-label">Agent Graph</span>
|
|
103
|
+
<span class="sb-shortcut">R</span>
|
|
104
|
+
</button>
|
|
105
|
+
</div>
|
|
106
|
+
</nav>
|
|
107
|
+
|
|
108
|
+
<div class="sb-footer">
|
|
109
|
+
<div class="sb-footer-controls">
|
|
110
|
+
<button id="mute-btn" class="sb-footer-btn" title="Toggle Sound (M)" aria-label="Toggle sound">
|
|
111
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></svg>
|
|
112
|
+
<span class="sb-label">Sound</span>
|
|
113
|
+
</button>
|
|
114
|
+
<input id="volume-slider" type="range" min="0" max="100" value="30" title="Volume" aria-label="Volume" step="1" class="sb-volume">
|
|
115
|
+
</div>
|
|
116
|
+
<div class="sb-footer-controls">
|
|
117
|
+
<div class="sb-theme-row">
|
|
118
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-1 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></svg>
|
|
119
|
+
<select id="theme-select" title="Select Theme" aria-label="Select theme" class="sb-theme-select">
|
|
120
|
+
<option value="office">Office</option>
|
|
121
|
+
<option value="space">Space</option>
|
|
122
|
+
<option value="castle">Castle</option>
|
|
123
|
+
<option value="cyberpunk">Cyberpunk</option>
|
|
124
|
+
</select>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="sb-footer-controls">
|
|
128
|
+
<button id="shortcuts-btn" class="sb-footer-btn" title="Keyboard Shortcuts (?)" aria-label="Keyboard shortcuts">
|
|
129
|
+
<svg class="sb-icon" viewBox="0 0 24 24" fill="currentColor"><path d="M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"/></svg>
|
|
130
|
+
<span class="sb-label">Shortcuts</span>
|
|
131
|
+
</button>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
<div id="focus-sub-bar">
|
|
136
|
+
<span class="fi-icon"><svg viewBox="0 0 24 24" width="14" height="14" fill="currentColor" style="vertical-align:-2px;opacity:0.8"><circle cx="12" cy="12" r="3"/><path d="M12 2a10 10 0 100 20 10 10 0 000-20zm0 18a8 8 0 110-16 8 8 0 010 16z"/></svg></span>
|
|
137
|
+
Following: <span class="fi-name"></span>
|
|
138
|
+
<span class="fi-hint">F to cycle · Esc to exit</span>
|
|
139
|
+
<button class="fi-stop" id="focus-stop">Stop Following</button>
|
|
140
|
+
</div>
|
|
141
|
+
<div id="app-layout">
|
|
142
|
+
<div id="canvas-container" class="with-sidebar">
|
|
143
|
+
<div id="app"></div>
|
|
144
|
+
<div id="zoom-controls">
|
|
145
|
+
<button id="zoom-in" title="Zoom In" aria-label="Zoom in">
|
|
146
|
+
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>
|
|
147
|
+
</button>
|
|
148
|
+
<button id="zoom-out" title="Zoom Out" aria-label="Zoom out">
|
|
149
|
+
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M19 13H5v-2h14v2z"/></svg>
|
|
150
|
+
</button>
|
|
151
|
+
<button id="zoom-reset" title="Fit to View" aria-label="Fit to view">
|
|
152
|
+
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 5v4h2V5h4V3H5a2 2 0 00-2 2zm2 10H3v4a2 2 0 002 2h4v-2H5v-4zm14 4h-4v2h4a2 2 0 002-2v-4h-2v4zm0-16h-4v2h4v4h2V5a2 2 0 00-2-2z"/></svg>
|
|
153
|
+
</button>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
<div id="right-panel">
|
|
157
|
+
<div class="panel-header">
|
|
158
|
+
<span class="panel-title" id="right-panel-title">Agents</span>
|
|
159
|
+
</div>
|
|
160
|
+
<div id="overlay">
|
|
161
|
+
<div id="agent-list"></div>
|
|
162
|
+
</div>
|
|
163
|
+
<div id="right-panel-content" style="display:none;flex:1;overflow-y:auto;padding:12px 16px;"></div>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</body>
|
|
167
|
+
</html>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agent-move/client",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"preview": "vite preview"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@agent-move/shared": "*",
|
|
13
|
+
"pixi.js": "^8.6.6"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"vite": "^6.1.0",
|
|
17
|
+
"typescript": "^5.7.3"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const config: {
|
|
2
|
+
readonly port: number;
|
|
3
|
+
readonly claudeHome: string;
|
|
4
|
+
readonly idleTimeoutMs: 45000;
|
|
5
|
+
/** How long after going idle before an agent is automatically shutdown/removed */
|
|
6
|
+
readonly shutdownTimeoutMs: number;
|
|
7
|
+
/** How recently a session file must be modified to be considered "active" on startup */
|
|
8
|
+
readonly activeThresholdMs: number;
|
|
9
|
+
/** Enable OpenCode session watching (auto-detected if storage dir exists) */
|
|
10
|
+
readonly enableOpenCode: boolean;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM;;;;IAIjB,kFAAkF;;IAElF,wFAAwF;;IAExF,6EAA6E;;CAErE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// dist/config.js
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
var config = {
|
|
5
|
+
port: parseInt(process.env.AGENT_MOVE_PORT || "3333", 10),
|
|
6
|
+
claudeHome: join(homedir(), ".claude"),
|
|
7
|
+
idleTimeoutMs: 45e3,
|
|
8
|
+
/** How long after going idle before an agent is automatically shutdown/removed */
|
|
9
|
+
shutdownTimeoutMs: 30 * 60 * 1e3,
|
|
10
|
+
// 30 minutes
|
|
11
|
+
/** How recently a session file must be modified to be considered "active" on startup */
|
|
12
|
+
activeThresholdMs: 10 * 60 * 1e3,
|
|
13
|
+
// 10 minutes
|
|
14
|
+
/** Enable OpenCode session watching (auto-detected if storage dir exists) */
|
|
15
|
+
enableOpenCode: process.env.AGENT_MOVE_OPENCODE !== "false"
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
config
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC;IACzD,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM;IACrB,kFAAkF;IAClF,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IAChD,wFAAwF;IACxF,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IAChD,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO;CACnD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import type { HookEvent, PermissionDecision, PendingPermission } from '@agent-move/shared';
|
|
3
|
+
import type { AgentStateManager } from '../state/agent-state-manager.js';
|
|
4
|
+
/**
|
|
5
|
+
* Processes Claude Code hook events and bridges them to AgentStateManager.
|
|
6
|
+
* Also manages the blocking permission request flow (holds HTTP connections
|
|
7
|
+
* open until a WS client approves or denies).
|
|
8
|
+
*
|
|
9
|
+
* Emits:
|
|
10
|
+
* 'permission:request' — a new permission request arrived (broadcast to WS clients)
|
|
11
|
+
* 'permission:resolved' — a permission was resolved (broadcast to WS clients)
|
|
12
|
+
*/
|
|
13
|
+
export declare class HookEventManager extends EventEmitter {
|
|
14
|
+
private stateManager;
|
|
15
|
+
private pending;
|
|
16
|
+
constructor(stateManager: AgentStateManager);
|
|
17
|
+
/**
|
|
18
|
+
* Main entry point for incoming hook events.
|
|
19
|
+
*
|
|
20
|
+
* - For PermissionRequest: returns a Promise that resolves when the user
|
|
21
|
+
* decides. Fastify holds the HTTP connection open while awaiting.
|
|
22
|
+
* - For all other events: processes state updates and returns null immediately
|
|
23
|
+
* (fire-and-forget from the HTTP handler's perspective).
|
|
24
|
+
*/
|
|
25
|
+
handleEvent(event: HookEvent): Promise<{
|
|
26
|
+
body: object;
|
|
27
|
+
statusCode: number;
|
|
28
|
+
} | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Called by the WS handler when a client approves a permission.
|
|
31
|
+
*/
|
|
32
|
+
resolvePermission(permissionId: string, decision: PermissionDecision): void;
|
|
33
|
+
/** All currently pending permission requests (for sending on new WS connect) */
|
|
34
|
+
getPendingPermissions(): PendingPermission[];
|
|
35
|
+
dispose(): void;
|
|
36
|
+
private handlePermissionRequest;
|
|
37
|
+
private processLifecycleEvent;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=hook-event-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-event-manager.d.ts","sourceRoot":"","sources":["../../src/hooks/hook-event-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAsB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AASzE;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAGpC,OAAO,CAAC,YAAY;IAFhC,OAAO,CAAC,OAAO,CAAyC;gBAEpC,YAAY,EAAE,iBAAiB;IAInD;;;;;;;OAOG;IACG,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAQzF;;OAEG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAS3E,gFAAgF;IAChF,qBAAqB,IAAI,iBAAiB,EAAE;IAM5C,OAAO,IAAI,IAAI;YAYD,uBAAuB;IAyCrC,OAAO,CAAC,qBAAqB;CAuG9B"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// dist/hooks/hook-event-manager.js
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
import { randomUUID } from "crypto";
|
|
4
|
+
var PERMISSION_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
5
|
+
var HookEventManager = class extends EventEmitter {
|
|
6
|
+
stateManager;
|
|
7
|
+
pending = /* @__PURE__ */ new Map();
|
|
8
|
+
constructor(stateManager) {
|
|
9
|
+
super();
|
|
10
|
+
this.stateManager = stateManager;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Main entry point for incoming hook events.
|
|
14
|
+
*
|
|
15
|
+
* - For PermissionRequest: returns a Promise that resolves when the user
|
|
16
|
+
* decides. Fastify holds the HTTP connection open while awaiting.
|
|
17
|
+
* - For all other events: processes state updates and returns null immediately
|
|
18
|
+
* (fire-and-forget from the HTTP handler's perspective).
|
|
19
|
+
*/
|
|
20
|
+
async handleEvent(event) {
|
|
21
|
+
if (event.hook_event_name === "PermissionRequest") {
|
|
22
|
+
return this.handlePermissionRequest(event);
|
|
23
|
+
}
|
|
24
|
+
this.processLifecycleEvent(event);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Called by the WS handler when a client approves a permission.
|
|
29
|
+
*/
|
|
30
|
+
resolvePermission(permissionId, decision) {
|
|
31
|
+
const deferred = this.pending.get(permissionId);
|
|
32
|
+
if (!deferred)
|
|
33
|
+
return;
|
|
34
|
+
clearTimeout(deferred.timeout);
|
|
35
|
+
this.pending.delete(permissionId);
|
|
36
|
+
deferred.resolve(decision);
|
|
37
|
+
this.emit("permission:resolved", { permissionId, decision: decision.behavior });
|
|
38
|
+
}
|
|
39
|
+
/** All currently pending permission requests (for sending on new WS connect) */
|
|
40
|
+
getPendingPermissions() {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
dispose() {
|
|
44
|
+
for (const deferred of this.pending.values()) {
|
|
45
|
+
clearTimeout(deferred.timeout);
|
|
46
|
+
}
|
|
47
|
+
this.pending.clear();
|
|
48
|
+
this.removeAllListeners();
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Private
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
async handlePermissionRequest(event) {
|
|
54
|
+
const permissionId = randomUUID();
|
|
55
|
+
const permission = {
|
|
56
|
+
permissionId,
|
|
57
|
+
sessionId: event.session_id,
|
|
58
|
+
toolName: event.tool_name ?? "",
|
|
59
|
+
toolInput: event.tool_input ?? null,
|
|
60
|
+
toolUseId: event.tool_use_id ?? "",
|
|
61
|
+
permissionSuggestions: event.permission_suggestions,
|
|
62
|
+
timestamp: Date.now()
|
|
63
|
+
};
|
|
64
|
+
this.emit("permission:request", permission);
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
const timeout = setTimeout(() => {
|
|
67
|
+
this.pending.delete(permissionId);
|
|
68
|
+
this.emit("permission:resolved", { permissionId, decision: "deny" });
|
|
69
|
+
resolve({
|
|
70
|
+
statusCode: 403,
|
|
71
|
+
body: buildResponse({ behavior: "deny" })
|
|
72
|
+
});
|
|
73
|
+
}, PERMISSION_TIMEOUT_MS);
|
|
74
|
+
this.pending.set(permissionId, {
|
|
75
|
+
timeout,
|
|
76
|
+
resolve: (decision) => {
|
|
77
|
+
if (decision.behavior === "deny") {
|
|
78
|
+
resolve({ statusCode: 403, body: buildResponse(decision) });
|
|
79
|
+
} else {
|
|
80
|
+
resolve({ statusCode: 200, body: buildResponse(decision) });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
processLifecycleEvent(event) {
|
|
87
|
+
const { hook_event_name, session_id } = event;
|
|
88
|
+
switch (hook_event_name) {
|
|
89
|
+
case "SessionStart":
|
|
90
|
+
this.stateManager.hookSessionStart(session_id, event.cwd ?? "");
|
|
91
|
+
break;
|
|
92
|
+
case "SessionEnd":
|
|
93
|
+
this.stateManager.hookSessionEnd(session_id);
|
|
94
|
+
break;
|
|
95
|
+
case "UserPromptSubmit":
|
|
96
|
+
this.stateManager.hookUserPromptSubmit(session_id);
|
|
97
|
+
break;
|
|
98
|
+
case "Stop":
|
|
99
|
+
this.stateManager.hookStop(session_id, event.last_assistant_message);
|
|
100
|
+
break;
|
|
101
|
+
case "PreCompact":
|
|
102
|
+
this.stateManager.hookPreCompact(session_id);
|
|
103
|
+
break;
|
|
104
|
+
case "PreToolUse":
|
|
105
|
+
if (event.tool_name) {
|
|
106
|
+
this.stateManager.hookPreToolUse(session_id, event.tool_name, event.tool_input, event.tool_use_id ?? "");
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
case "PostToolUse":
|
|
110
|
+
if (event.tool_name) {
|
|
111
|
+
this.stateManager.hookPostToolUse(session_id, event.tool_name, event.tool_use_id ?? "", true);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case "PostToolUseFailure":
|
|
115
|
+
if (event.tool_name) {
|
|
116
|
+
this.stateManager.hookPostToolUse(session_id, event.tool_name, event.tool_use_id ?? "", false);
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case "TaskCompleted":
|
|
120
|
+
if (event.task_id) {
|
|
121
|
+
this.stateManager.hookTaskCompleted(session_id, event.task_id, event.task_subject);
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case "SubagentStart":
|
|
125
|
+
break;
|
|
126
|
+
case "SubagentStop":
|
|
127
|
+
if (event.agent_id) {
|
|
128
|
+
this.stateManager.hookSessionEnd(event.agent_id);
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case "Notification":
|
|
132
|
+
break;
|
|
133
|
+
case "TeammateIdle":
|
|
134
|
+
this.emit("teammate:idle", {
|
|
135
|
+
sessionId: session_id,
|
|
136
|
+
agentId: event.agent_id,
|
|
137
|
+
message: event.message
|
|
138
|
+
});
|
|
139
|
+
break;
|
|
140
|
+
case "WorktreeCreate":
|
|
141
|
+
console.log(`[hook] Worktree created: session=${session_id}`);
|
|
142
|
+
break;
|
|
143
|
+
case "WorktreeRemove":
|
|
144
|
+
console.log(`[hook] Worktree removed: session=${session_id}`);
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
function buildResponse(decision) {
|
|
152
|
+
return {
|
|
153
|
+
hookSpecificOutput: {
|
|
154
|
+
hookEventName: "PermissionRequest",
|
|
155
|
+
decision
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export {
|
|
160
|
+
HookEventManager
|
|
161
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-event-manager.js","sourceRoot":"","sources":["../../src/hooks/hook-event-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface InstallResult {
|
|
2
|
+
installed: boolean;
|
|
3
|
+
scriptPath: string;
|
|
4
|
+
settingsPath: string;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function installHooks(port?: number): InstallResult;
|
|
8
|
+
export declare function uninstallHooks(): InstallResult;
|
|
9
|
+
export declare function checkHookStatus(): {
|
|
10
|
+
installed: boolean;
|
|
11
|
+
events: string[];
|
|
12
|
+
scriptExists: boolean;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=hook-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../src/hooks/hook-installer.ts"],"names":[],"mappings":"AAgGA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAO,GAAG,aAAa,CA4CvD;AAED,wBAAgB,cAAc,IAAI,aAAa,CAgC9C;AAED,wBAAgB,eAAe,IAAI;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAuBjG"}
|