@agents-tower/core 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ import type { ProjectAdapter } from "./types";
2
+ export declare const PROVIDER_CONTRACT_VERSION = 1;
3
+ export interface ContractCheckOptions {
4
+ projectRoot?: string;
5
+ refreshTimeoutMs?: number;
6
+ }
7
+ export declare function validateAdapterShape(adapter: ProjectAdapter): string[];
8
+ export declare function runAdapterContractChecks(adapter: ProjectAdapter, options?: ContractCheckOptions): Promise<string[]>;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROVIDER_CONTRACT_VERSION = void 0;
4
+ exports.validateAdapterShape = validateAdapterShape;
5
+ exports.runAdapterContractChecks = runAdapterContractChecks;
6
+ exports.PROVIDER_CONTRACT_VERSION = 1;
7
+ const VALID_HEALTH_STATUSES = new Set(["ready", "unconfigured", "degraded", "error"]);
8
+ const VALID_CONFIDENCES = new Set(["typed", "inferred"]);
9
+ function checkSnapshotShape(snapshot, adapterId, failures) {
10
+ if (!snapshot || typeof snapshot !== "object") {
11
+ failures.push(`${adapterId}: getCachedSnapshot() must return an AdapterSnapshot object`);
12
+ return;
13
+ }
14
+ if (snapshot.adapterId !== adapterId) {
15
+ failures.push(`${adapterId}: snapshot.adapterId must equal the adapter id (got ${String(snapshot.adapterId)})`);
16
+ }
17
+ if (!Number.isFinite(Date.parse(snapshot.generatedAt))) {
18
+ failures.push(`${adapterId}: snapshot.generatedAt must be a parseable ISO timestamp`);
19
+ }
20
+ for (const field of ["agents", "events", "notes"]) {
21
+ if (!Array.isArray(snapshot[field])) {
22
+ failures.push(`${adapterId}: snapshot.${field} must be an array`);
23
+ }
24
+ }
25
+ if (!snapshot.health || !VALID_HEALTH_STATUSES.has(snapshot.health.status)) {
26
+ failures.push(`${adapterId}: snapshot.health.status must be one of ${Array.from(VALID_HEALTH_STATUSES).join("/")}`);
27
+ }
28
+ if (snapshot.health && snapshot.health.status !== "ready" && !snapshot.health.detail) {
29
+ failures.push(`${adapterId}: non-ready health must carry a human-readable detail`);
30
+ }
31
+ for (const agent of Array.isArray(snapshot.agents) ? snapshot.agents : []) {
32
+ if (!VALID_CONFIDENCES.has(agent.confidence)) {
33
+ failures.push(`${adapterId}: agent ${agent.id} confidence must be typed or inferred`);
34
+ break;
35
+ }
36
+ }
37
+ }
38
+ function validateAdapterShape(adapter) {
39
+ const failures = [];
40
+ if (!adapter || typeof adapter !== "object") {
41
+ return ["adapter must be an object"];
42
+ }
43
+ if (typeof adapter.id !== "string" || adapter.id.length === 0) {
44
+ failures.push("adapter.id must be a non-empty string");
45
+ }
46
+ if (typeof adapter.source !== "string" || adapter.source.length === 0) {
47
+ failures.push(`${adapter.id ?? "adapter"}: source must be a non-empty string`);
48
+ }
49
+ if (!adapter.capabilities || typeof adapter.capabilities !== "object") {
50
+ failures.push(`${adapter.id}: capabilities must be an object (empty object is fine)`);
51
+ }
52
+ if (typeof adapter.createSource !== "function") {
53
+ failures.push(`${adapter.id}: createSource(context) must be a function`);
54
+ }
55
+ if (adapter.capabilities?.discoverProjects === true && typeof adapter.discoverProjects !== "function") {
56
+ failures.push(`${adapter.id}: capabilities.discoverProjects requires a discoverProjects() implementation`);
57
+ }
58
+ return failures;
59
+ }
60
+ async function runAdapterContractChecks(adapter, options = {}) {
61
+ const failures = validateAdapterShape(adapter);
62
+ if (failures.length > 0) {
63
+ return failures;
64
+ }
65
+ const projectRoot = options.projectRoot ?? "/tmp/agents-tower-contract-fixture";
66
+ const refreshTimeoutMs = options.refreshTimeoutMs ?? 10_000;
67
+ let source;
68
+ try {
69
+ source = adapter.createSource({ projectRoot });
70
+ }
71
+ catch (error) {
72
+ failures.push(`${adapter.id}: createSource threw synchronously: ${error instanceof Error ? error.message : String(error)}`);
73
+ return failures;
74
+ }
75
+ for (const method of ["warm", "refresh", "getCachedSnapshot", "dispose"]) {
76
+ if (typeof source[method] !== "function") {
77
+ failures.push(`${adapter.id}: source.${method} must be a function`);
78
+ }
79
+ }
80
+ if (failures.length > 0) {
81
+ return failures;
82
+ }
83
+ checkSnapshotShape(source.getCachedSnapshot(), adapter.id, failures);
84
+ try {
85
+ await Promise.race([
86
+ source.refresh("manual"),
87
+ new Promise((_, reject) => setTimeout(() => reject(new Error("refresh timed out")), refreshTimeoutMs))
88
+ ]);
89
+ }
90
+ catch (error) {
91
+ failures.push(`${adapter.id}: refresh("manual") must resolve without throwing (providers report failures via degraded/error health): `
92
+ + (error instanceof Error ? error.message : String(error)));
93
+ }
94
+ checkSnapshotShape(source.getCachedSnapshot(), adapter.id, failures);
95
+ try {
96
+ await source.dispose();
97
+ }
98
+ catch (error) {
99
+ failures.push(`${adapter.id}: dispose() must resolve without throwing: ${error instanceof Error ? error.message : String(error)}`);
100
+ }
101
+ return failures;
102
+ }
103
+ //# sourceMappingURL=contract-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-harness.js","sourceRoot":"","sources":["../../src/adapters/contract-harness.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ exports.cursorCloudAdapter = {
21
21
  source: "cursor",
22
22
  notes: [availabilityNote],
23
23
  generatedAt,
24
- health: (0, helpers_1.degradedHealth)(availabilityNote, generatedAt)
24
+ health: (0, helpers_1.unconfiguredHealth)(availabilityNote, generatedAt)
25
25
  });
26
26
  }
27
27
  const snapshotData = await (0, cursor_1.loadCursorCloudProjectSnapshotData)(context.projectRoot, {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-cloud.js","sourceRoot":"","sources":["../../src/adapters/cursor-cloud.ts"],"names":[],"mappings":";;;AAAA,sCAAgG;AAEhG,uCAAiE;AACjE,mDAAsD;AAEzC,QAAA,kBAAkB,GAAmB;IAChD,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,EAAE;IAChB,YAAY,CAAC,OAAO;QAClB,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAuB,CAAC;QACnE,IAAI,sBAAsB,GAAG,KAAK,CAAC;QACnC,OAAO,IAAI,mCAAmB,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,MAAM,IAAA,wCAA+B,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACpF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,OAAO,IAAA,8BAAoB,EAAC;wBAC1B,SAAS,EAAE,cAAc;wBACzB,MAAM,EAAE,QAAQ;wBAChB,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACzB,WAAW;wBACX,MAAM,EAAE,IAAA,wBAAc,EAAC,gBAAgB,EAAE,WAAW,CAAC;qBACtD,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAA,2CAAkC,EAAC,OAAO,CAAC,WAAW,EAAE;oBACjF,2BAA2B;oBAC3B,sBAAsB;iBACvB,CAAC,CAAC;gBACH,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,OAAO,IAAA,8BAAoB,EAAC;oBAC1B,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,IAAA,8BAAoB,EAAC;oBAC1B,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,QAAQ;oBAChB,WAAW;oBACX,KAAK,EAAE,CAAC,yCAAyC,OAAO,EAAE,CAAC;oBAC3D,MAAM,EAAE,IAAA,wBAAc,EAAC,OAAO,EAAE,WAAW,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAA,8BAAoB,EAAC,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"cursor-cloud.js","sourceRoot":"","sources":["../../src/adapters/cursor-cloud.ts"],"names":[],"mappings":";;;AAAA,sCAAgG;AAEhG,uCAAqF;AACrF,mDAAsD;AAEzC,QAAA,kBAAkB,GAAmB;IAChD,EAAE,EAAE,cAAc;IAClB,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,EAAE;IAChB,YAAY,CAAC,OAAO;QAClB,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAuB,CAAC;QACnE,IAAI,sBAAsB,GAAG,KAAK,CAAC;QACnC,OAAO,IAAI,mCAAmB,CAAC,KAAK,IAAI,EAAE;YACxC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,MAAM,IAAA,wCAA+B,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACpF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,OAAO,IAAA,8BAAoB,EAAC;wBAC1B,SAAS,EAAE,cAAc;wBACzB,MAAM,EAAE,QAAQ;wBAChB,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACzB,WAAW;wBACX,MAAM,EAAE,IAAA,4BAAkB,EAAC,gBAAgB,EAAE,WAAW,CAAC;qBAC1D,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAA,2CAAkC,EAAC,OAAO,CAAC,WAAW,EAAE;oBACjF,2BAA2B;oBAC3B,sBAAsB;iBACvB,CAAC,CAAC;gBACH,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,OAAO,IAAA,8BAAoB,EAAC;oBAC1B,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sBAAsB,GAAG,IAAI,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,IAAA,8BAAoB,EAAC;oBAC1B,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,QAAQ;oBAChB,WAAW;oBACX,KAAK,EAAE,CAAC,yCAAyC,OAAO,EAAE,CAAC;oBAC3D,MAAM,EAAE,IAAA,wBAAc,EAAC,OAAO,EAAE,WAAW,CAAC;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,IAAA,8BAAoB,EAAC,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF,CAAC"}
@@ -2,6 +2,8 @@ import type { AdapterHealth, AdapterSnapshot } from "./types";
2
2
  import type { CloudTask, DashboardAgent, DashboardEvent } from "../types";
3
3
  export declare function readyHealth(detail?: string | null, generatedAt?: string): AdapterHealth;
4
4
  export declare function degradedHealth(detail: string, generatedAt?: string): AdapterHealth;
5
+ export declare function errorHealth(detail: string, generatedAt?: string): AdapterHealth;
6
+ export declare function unconfiguredHealth(detail: string, generatedAt?: string): AdapterHealth;
5
7
  export declare function emptyAdapterSnapshot(input: {
6
8
  adapterId: string;
7
9
  source: DashboardAgent["source"];
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readyHealth = readyHealth;
4
4
  exports.degradedHealth = degradedHealth;
5
+ exports.errorHealth = errorHealth;
6
+ exports.unconfiguredHealth = unconfiguredHealth;
5
7
  exports.emptyAdapterSnapshot = emptyAdapterSnapshot;
6
8
  function readyHealth(detail = null, generatedAt = new Date().toISOString()) {
7
9
  return {
@@ -17,6 +19,20 @@ function degradedHealth(detail, generatedAt = new Date().toISOString()) {
17
19
  lastUpdatedAt: generatedAt
18
20
  };
19
21
  }
22
+ function errorHealth(detail, generatedAt = new Date().toISOString()) {
23
+ return {
24
+ status: "error",
25
+ detail,
26
+ lastUpdatedAt: generatedAt
27
+ };
28
+ }
29
+ function unconfiguredHealth(detail, generatedAt = new Date().toISOString()) {
30
+ return {
31
+ status: "unconfigured",
32
+ detail,
33
+ lastUpdatedAt: generatedAt
34
+ };
35
+ }
20
36
  function emptyAdapterSnapshot(input) {
21
37
  const generatedAt = input.generatedAt ?? new Date().toISOString();
22
38
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/adapters/helpers.ts"],"names":[],"mappings":";;AAGA,kCAMC;AAED,wCAMC;AAED,oDAsBC;AAtCD,SAAgB,WAAW,CAAC,SAAwB,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC9F,OAAO;QACL,MAAM,EAAE,OAAO;QACf,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnF,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAUpC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW;QACX,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,WAAW,CAAC;KACvE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/adapters/helpers.ts"],"names":[],"mappings":";;AAGA,kCAMC;AAED,wCAMC;AAED,kCAMC;AAED,gDAMC;AAED,oDAsBC;AAtDD,SAAgB,WAAW,CAAC,SAAwB,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAC9F,OAAO;QACL,MAAM,EAAE,OAAO;QACf,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnF,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,MAAc,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAChF,OAAO;QACL,MAAM,EAAE,OAAO;QACf,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAc,EAAE,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACvF,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,aAAa,EAAE,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAUpC;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW;QACX,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,WAAW,CAAC;KACvE,CAAC;AACJ,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./types";
2
+ export * from "./contract-harness";
2
3
  export declare const PROJECT_ADAPTERS: readonly [import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter, import("./types").ProjectAdapter];
@@ -24,6 +24,7 @@ const hermes_1 = require("./hermes");
24
24
  const openclaw_1 = require("./openclaw");
25
25
  const presence_1 = require("./presence");
26
26
  __exportStar(require("./types"), exports);
27
+ __exportStar(require("./contract-harness"), exports);
27
28
  exports.PROJECT_ADAPTERS = [
28
29
  codex_local_1.codexLocalAdapter,
29
30
  claude_1.claudeAdapter,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAyC;AACzC,+CAAkD;AAClD,+CAAkD;AAClD,iDAAoD;AACpD,iDAAoD;AACpD,qCAAyC;AACzC,yCAA6C;AAC7C,yCAA6C;AAE7C,0CAAwB;AAEX,QAAA,gBAAgB,GAAG;IAC9B,+BAAiB;IACjB,sBAAa;IACb,iCAAkB;IAClB,iCAAkB;IAClB,sBAAa;IACb,0BAAe;IACf,0BAAe;IACf,+BAAiB;CACT,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAyC;AACzC,+CAAkD;AAClD,+CAAkD;AAClD,iDAAoD;AACpD,iDAAoD;AACpD,qCAAyC;AACzC,yCAA6C;AAC7C,yCAA6C;AAE7C,0CAAwB;AACxB,qDAAmC;AAEtB,QAAA,gBAAgB,GAAG;IAC9B,+BAAiB;IACjB,sBAAa;IACb,iCAAkB;IAClB,iCAAkB;IAClB,sBAAa;IACb,0BAAe;IACf,0BAAe;IACf,+BAAiB;CACT,CAAC"}
@@ -1,6 +1,6 @@
1
- import type { CloudTask, DashboardAgent, DashboardEvent } from "../types";
1
+ import type { CloudTask, DashboardAgent, DashboardEvent, ProviderHealthStatus } from "../types";
2
2
  import type { DiscoveredProject } from "../project-paths";
3
- export type AdapterHealthStatus = "ready" | "degraded" | "error";
3
+ export type AdapterHealthStatus = ProviderHealthStatus;
4
4
  export type AdapterRefreshReason = "warm" | "startup" | "interval" | "manual" | "event";
5
5
  export interface AdapterCapabilities {
6
6
  discoverProjects?: boolean;
@@ -0,0 +1,17 @@
1
+ export interface AuditRecord {
2
+ at: string;
3
+ actor: "browser" | "cli";
4
+ action: string;
5
+ target: {
6
+ projectRoot: string;
7
+ requestId?: string;
8
+ threadId?: string;
9
+ };
10
+ detail: string | null;
11
+ outcome: "ok" | "error";
12
+ error?: string;
13
+ }
14
+ export declare function appendAuditRecord(record: Omit<AuditRecord, "at"> & {
15
+ at?: string;
16
+ }): AuditRecord;
17
+ export declare function readAuditJournal(limit?: number): AuditRecord[];
package/dist/audit.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appendAuditRecord = appendAuditRecord;
4
+ exports.readAuditJournal = readAuditJournal;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const app_settings_1 = require("./app-settings");
8
+ function auditJournalPath() {
9
+ return (0, node_path_1.join)((0, app_settings_1.getAppDataDirectory)(), "audit", "journal.jsonl");
10
+ }
11
+ function appendAuditRecord(record) {
12
+ const complete = {
13
+ at: record.at ?? new Date().toISOString(),
14
+ actor: record.actor,
15
+ action: record.action,
16
+ target: record.target,
17
+ detail: record.detail ?? null,
18
+ outcome: record.outcome,
19
+ ...(record.error ? { error: record.error } : {})
20
+ };
21
+ const path = auditJournalPath();
22
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)((0, app_settings_1.getAppDataDirectory)(), "audit"), { recursive: true });
23
+ (0, node_fs_1.appendFileSync)(path, `${JSON.stringify(complete)}\n`);
24
+ return complete;
25
+ }
26
+ function readAuditJournal(limit = 50) {
27
+ const path = auditJournalPath();
28
+ if (!(0, node_fs_1.existsSync)(path)) {
29
+ return [];
30
+ }
31
+ const lines = (0, node_fs_1.readFileSync)(path, "utf8").split(/\r?\n/).filter(Boolean);
32
+ const records = [];
33
+ for (const line of lines.slice(-Math.max(1, limit))) {
34
+ try {
35
+ records.push(JSON.parse(line));
36
+ }
37
+ catch {
38
+ // Skip corrupted lines rather than failing the whole read.
39
+ }
40
+ }
41
+ return records;
42
+ }
43
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":";;AAuBA,8CAcC;AAED,4CAeC;AAtDD,qCAA8E;AAC9E,yCAAiC;AAEjC,iDAAqD;AAgBrD,SAAS,gBAAgB;IACvB,OAAO,IAAA,gBAAI,EAAC,IAAA,kCAAmB,GAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAC/D,CAAC;AAED,SAAgB,iBAAiB,CAAC,MAAiD;IACjF,MAAM,QAAQ,GAAgB;QAC5B,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;IACF,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAA,mBAAS,EAAC,IAAA,gBAAI,EAAC,IAAA,kCAAmB,GAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,IAAA,wBAAc,EAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAK,GAAG,EAAE;IACzC,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { CoordinationClaim, CoordinationClaimView } from "./types";
2
+ export declare const DEFAULT_CLAIM_TTL_MS: number;
3
+ export declare function startCoordinationClaim(input: {
4
+ projectRoot: string;
5
+ objective: string;
6
+ scope?: string[];
7
+ branch?: string | null;
8
+ agentLabel?: string | null;
9
+ blockedOn?: string | null;
10
+ ttlMs?: number;
11
+ nowMs?: number;
12
+ }): CoordinationClaim;
13
+ export declare function heartbeatCoordinationClaim(projectRoot: string, id: string, options?: {
14
+ ttlMs?: number;
15
+ blockedOn?: string | null;
16
+ nowMs?: number;
17
+ }): CoordinationClaim | null;
18
+ export declare function releaseCoordinationClaim(projectRoot: string, id: string, options?: {
19
+ handoff?: boolean;
20
+ nowMs?: number;
21
+ }): CoordinationClaim | null;
22
+ export declare function listCoordinationClaims(projectRoot: string, nowMs?: number): CoordinationClaimView[];
23
+ export interface ClaimOverlapAdvice {
24
+ verdict: "proceed" | "caution";
25
+ reasons: string[];
26
+ overlapping: CoordinationClaimView[];
27
+ }
28
+ export declare function adviseOnClaimOverlap(projectRoot: string, requestedScope: string[], nowMs?: number): ClaimOverlapAdvice;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CLAIM_TTL_MS = void 0;
4
+ exports.startCoordinationClaim = startCoordinationClaim;
5
+ exports.heartbeatCoordinationClaim = heartbeatCoordinationClaim;
6
+ exports.releaseCoordinationClaim = releaseCoordinationClaim;
7
+ exports.listCoordinationClaims = listCoordinationClaims;
8
+ exports.adviseOnClaimOverlap = adviseOnClaimOverlap;
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = require("node:path");
12
+ const app_settings_1 = require("./app-settings");
13
+ const project_paths_1 = require("./project-paths");
14
+ exports.DEFAULT_CLAIM_TTL_MS = 20 * 60 * 1000;
15
+ const RESOLVED_CLAIM_RETENTION_MS = 10 * 60 * 1000;
16
+ const STALE_CLAIM_RETENTION_MS = 24 * 60 * 60 * 1000;
17
+ function claimsDirectory(projectRoot) {
18
+ const hash = (0, node_crypto_1.createHash)("sha256").update((0, project_paths_1.projectPathIdentityKey)(projectRoot) ?? projectRoot).digest("hex").slice(0, 16);
19
+ return (0, node_path_1.join)((0, app_settings_1.getAppDataDirectory)(), "coordination", hash);
20
+ }
21
+ function claimFilePath(projectRoot, id) {
22
+ return (0, node_path_1.join)(claimsDirectory(projectRoot), `${id}.json`);
23
+ }
24
+ function readClaimFile(path) {
25
+ try {
26
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
27
+ return typeof parsed?.id === "string" && typeof parsed?.objective === "string" ? parsed : null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ function writeClaimFile(claim) {
34
+ const directory = claimsDirectory(claim.projectRoot);
35
+ (0, node_fs_1.mkdirSync)(directory, { recursive: true });
36
+ (0, node_fs_1.writeFileSync)(claimFilePath(claim.projectRoot, claim.id), `${JSON.stringify(claim, null, 2)}\n`);
37
+ }
38
+ function claimLifecycle(claim, nowMs) {
39
+ if (claim.status === "released" || claim.status === "handoff") {
40
+ return claim.status;
41
+ }
42
+ const expiresMs = Date.parse(claim.expiresAt);
43
+ return Number.isFinite(expiresMs) && nowMs > expiresMs ? "stale" : "active";
44
+ }
45
+ function shouldPruneClaim(claim, lifecycle, nowMs) {
46
+ if (lifecycle === "released" || lifecycle === "handoff") {
47
+ const heartbeatMs = Date.parse(claim.heartbeatAt);
48
+ return !Number.isFinite(heartbeatMs) || nowMs - heartbeatMs > RESOLVED_CLAIM_RETENTION_MS;
49
+ }
50
+ if (lifecycle === "stale") {
51
+ const expiresMs = Date.parse(claim.expiresAt);
52
+ return !Number.isFinite(expiresMs) || nowMs - expiresMs > STALE_CLAIM_RETENTION_MS;
53
+ }
54
+ return false;
55
+ }
56
+ function startCoordinationClaim(input) {
57
+ const nowMs = input.nowMs ?? Date.now();
58
+ const ttlMs = Number.isFinite(input.ttlMs) && input.ttlMs > 0 ? input.ttlMs : exports.DEFAULT_CLAIM_TTL_MS;
59
+ const now = new Date(nowMs).toISOString();
60
+ const claim = {
61
+ id: (0, node_crypto_1.randomUUID)(),
62
+ projectRoot: input.projectRoot,
63
+ objective: input.objective,
64
+ scope: input.scope?.filter(Boolean) ?? [],
65
+ branch: input.branch ?? null,
66
+ agentLabel: input.agentLabel ?? null,
67
+ status: "active",
68
+ blockedOn: input.blockedOn ?? null,
69
+ createdAt: now,
70
+ heartbeatAt: now,
71
+ expiresAt: new Date(nowMs + ttlMs).toISOString()
72
+ };
73
+ writeClaimFile(claim);
74
+ return claim;
75
+ }
76
+ function heartbeatCoordinationClaim(projectRoot, id, options = {}) {
77
+ const existing = readClaimFile(claimFilePath(projectRoot, id));
78
+ if (!existing || existing.status !== "active") {
79
+ return null;
80
+ }
81
+ const nowMs = options.nowMs ?? Date.now();
82
+ const ttlMs = Number.isFinite(options.ttlMs) && options.ttlMs > 0 ? options.ttlMs : exports.DEFAULT_CLAIM_TTL_MS;
83
+ const updated = {
84
+ ...existing,
85
+ blockedOn: options.blockedOn !== undefined ? options.blockedOn : existing.blockedOn,
86
+ heartbeatAt: new Date(nowMs).toISOString(),
87
+ expiresAt: new Date(nowMs + ttlMs).toISOString()
88
+ };
89
+ writeClaimFile(updated);
90
+ return updated;
91
+ }
92
+ function releaseCoordinationClaim(projectRoot, id, options = {}) {
93
+ const existing = readClaimFile(claimFilePath(projectRoot, id));
94
+ if (!existing) {
95
+ return null;
96
+ }
97
+ const nowMs = options.nowMs ?? Date.now();
98
+ const updated = {
99
+ ...existing,
100
+ status: options.handoff === true ? "handoff" : "released",
101
+ heartbeatAt: new Date(nowMs).toISOString()
102
+ };
103
+ writeClaimFile(updated);
104
+ return updated;
105
+ }
106
+ function listCoordinationClaims(projectRoot, nowMs = Date.now()) {
107
+ const directory = claimsDirectory(projectRoot);
108
+ if (!(0, node_fs_1.existsSync)(directory)) {
109
+ return [];
110
+ }
111
+ const views = [];
112
+ for (const entry of (0, node_fs_1.readdirSync)(directory)) {
113
+ if (!entry.endsWith(".json")) {
114
+ continue;
115
+ }
116
+ const path = (0, node_path_1.join)(directory, entry);
117
+ const claim = readClaimFile(path);
118
+ if (!claim) {
119
+ (0, node_fs_1.rmSync)(path, { force: true });
120
+ continue;
121
+ }
122
+ const lifecycle = claimLifecycle(claim, nowMs);
123
+ if (shouldPruneClaim(claim, lifecycle, nowMs)) {
124
+ (0, node_fs_1.rmSync)(path, { force: true });
125
+ continue;
126
+ }
127
+ views.push({ ...claim, lifecycle });
128
+ }
129
+ return views.sort((left, right) => right.heartbeatAt.localeCompare(left.heartbeatAt));
130
+ }
131
+ function normalizedScopePath(value) {
132
+ return value.replace(/\\/g, "/").replace(/\/+$/g, "").toLowerCase();
133
+ }
134
+ function scopesOverlap(left, right) {
135
+ const a = normalizedScopePath(left);
136
+ const b = normalizedScopePath(right);
137
+ return a === b || a.startsWith(`${b}/`) || b.startsWith(`${a}/`);
138
+ }
139
+ function adviseOnClaimOverlap(projectRoot, requestedScope, nowMs = Date.now()) {
140
+ const claims = listCoordinationClaims(projectRoot, nowMs)
141
+ .filter((claim) => claim.lifecycle === "active" || claim.lifecycle === "stale");
142
+ const overlapping = claims.filter((claim) => claim.scope.length > 0
143
+ && requestedScope.some((requested) => claim.scope.some((declared) => scopesOverlap(requested, declared))));
144
+ if (overlapping.length === 0) {
145
+ return {
146
+ verdict: "proceed",
147
+ reasons: claims.length === 0
148
+ ? ["No declared claims for this project."]
149
+ : ["Declared scopes appear disjoint from the requested paths."],
150
+ overlapping: []
151
+ };
152
+ }
153
+ const reasons = overlapping.map((claim) => claim.lifecycle === "stale"
154
+ ? `Stale claim "${claim.objective}" overlaps and was not explicitly released — confirm before proceeding.`
155
+ : `Active claim "${claim.objective}"${claim.agentLabel ? ` by ${claim.agentLabel}` : ""} overlaps the requested scope.`);
156
+ return { verdict: "caution", reasons, overlapping };
157
+ }
158
+ //# sourceMappingURL=coordination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.js","sourceRoot":"","sources":["../src/coordination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { DashboardSnapshot } from "./types";
2
+ export type HistoryEventKind = "wait.opened" | "wait.resolved" | "session.started" | "session.finished";
3
+ export interface HistoryEvent {
4
+ at: string;
5
+ kind: HistoryEventKind;
6
+ projectLabel: string;
7
+ agentLabel: string;
8
+ provenance: string;
9
+ detail: string | null;
10
+ waitMs?: number;
11
+ }
12
+ export interface HistoryFleetView {
13
+ projects: Pick<DashboardSnapshot, "projectLabel" | "agents">[];
14
+ }
15
+ export declare function diffFleetForHistory(previous: HistoryFleetView | null, next: HistoryFleetView, nowMs?: number): HistoryEvent[];
16
+ export declare function appendHistoryEvents(events: HistoryEvent[]): void;
17
+ export declare function readHistoryEvents(sinceMs: number, nowMs?: number): HistoryEvent[];
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.diffFleetForHistory = diffFleetForHistory;
4
+ exports.appendHistoryEvents = appendHistoryEvents;
5
+ exports.readHistoryEvents = readHistoryEvents;
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const app_settings_1 = require("./app-settings");
9
+ const HISTORY_JOURNAL_MAX_BYTES = 2 * 1024 * 1024;
10
+ function historyDirectory() {
11
+ return (0, node_path_1.join)((0, app_settings_1.getAppDataDirectory)(), "history");
12
+ }
13
+ function historyJournalPath() {
14
+ return (0, node_path_1.join)(historyDirectory(), "journal.jsonl");
15
+ }
16
+ function isBusy(agent) {
17
+ return agent.isCurrent === true || agent.isOngoing === true;
18
+ }
19
+ function trackedAgents(fleet) {
20
+ const tracked = new Map();
21
+ for (const project of fleet.projects) {
22
+ for (const agent of project.agents) {
23
+ tracked.set(agent.id, { agent, projectLabel: project.projectLabel });
24
+ }
25
+ }
26
+ return tracked;
27
+ }
28
+ function diffFleetForHistory(previous, next, nowMs = Date.now()) {
29
+ const at = new Date(nowMs).toISOString();
30
+ const events = [];
31
+ const before = previous ? trackedAgents(previous) : new Map();
32
+ const after = trackedAgents(next);
33
+ for (const [id, { agent, projectLabel }] of after) {
34
+ const prior = before.get(id);
35
+ if (agent.needsUser && !prior?.agent.needsUser) {
36
+ events.push({
37
+ at,
38
+ kind: "wait.opened",
39
+ projectLabel,
40
+ agentLabel: agent.label,
41
+ provenance: agent.provenance,
42
+ detail: agent.needsUser.kind
43
+ });
44
+ }
45
+ if (!agent.needsUser && prior?.agent.needsUser) {
46
+ const openedMs = Date.parse(prior.agent.updatedAt);
47
+ events.push({
48
+ at,
49
+ kind: "wait.resolved",
50
+ projectLabel,
51
+ agentLabel: agent.label,
52
+ provenance: agent.provenance,
53
+ detail: prior.agent.needsUser?.kind ?? null,
54
+ waitMs: Number.isFinite(openedMs) ? Math.max(0, nowMs - openedMs) : undefined
55
+ });
56
+ }
57
+ if (previous && isBusy(agent) && (!prior || !isBusy(prior.agent))) {
58
+ events.push({
59
+ at,
60
+ kind: "session.started",
61
+ projectLabel,
62
+ agentLabel: agent.label,
63
+ provenance: agent.provenance,
64
+ detail: agent.detail || null
65
+ });
66
+ }
67
+ if (prior && isBusy(prior.agent) && !isBusy(agent)) {
68
+ events.push({
69
+ at,
70
+ kind: "session.finished",
71
+ projectLabel,
72
+ agentLabel: agent.label,
73
+ provenance: agent.provenance,
74
+ detail: agent.detail || null
75
+ });
76
+ }
77
+ }
78
+ for (const [id, { agent, projectLabel }] of before) {
79
+ if (after.has(id)) {
80
+ continue;
81
+ }
82
+ if (isBusy(agent)) {
83
+ events.push({
84
+ at,
85
+ kind: "session.finished",
86
+ projectLabel,
87
+ agentLabel: agent.label,
88
+ provenance: agent.provenance,
89
+ detail: agent.detail || null
90
+ });
91
+ }
92
+ if (agent.needsUser) {
93
+ const openedMs = Date.parse(agent.updatedAt);
94
+ events.push({
95
+ at,
96
+ kind: "wait.resolved",
97
+ projectLabel,
98
+ agentLabel: agent.label,
99
+ provenance: agent.provenance,
100
+ detail: agent.needsUser.kind,
101
+ waitMs: Number.isFinite(openedMs) ? Math.max(0, nowMs - openedMs) : undefined
102
+ });
103
+ }
104
+ }
105
+ return events;
106
+ }
107
+ function appendHistoryEvents(events) {
108
+ if (events.length === 0) {
109
+ return;
110
+ }
111
+ (0, node_fs_1.mkdirSync)(historyDirectory(), { recursive: true });
112
+ const path = historyJournalPath();
113
+ try {
114
+ if ((0, node_fs_1.existsSync)(path) && (0, node_fs_1.statSync)(path).size > HISTORY_JOURNAL_MAX_BYTES) {
115
+ (0, node_fs_1.renameSync)(path, (0, node_path_1.join)(historyDirectory(), "journal.previous.jsonl"));
116
+ }
117
+ }
118
+ catch {
119
+ // Rotation is best-effort; appending still proceeds.
120
+ }
121
+ (0, node_fs_1.appendFileSync)(path, events.map((event) => JSON.stringify(event)).join("\n") + "\n");
122
+ }
123
+ function readHistoryEvents(sinceMs, nowMs = Date.now()) {
124
+ const events = [];
125
+ for (const file of ["journal.previous.jsonl", "journal.jsonl"]) {
126
+ const path = (0, node_path_1.join)(historyDirectory(), file);
127
+ if (!(0, node_fs_1.existsSync)(path)) {
128
+ continue;
129
+ }
130
+ for (const line of (0, node_fs_1.readFileSync)(path, "utf8").split(/\r?\n/)) {
131
+ if (!line) {
132
+ continue;
133
+ }
134
+ try {
135
+ const event = JSON.parse(line);
136
+ const atMs = Date.parse(event.at);
137
+ if (Number.isFinite(atMs) && atMs >= sinceMs && atMs <= nowMs) {
138
+ events.push(event);
139
+ }
140
+ }
141
+ catch {
142
+ // Skip corrupted lines.
143
+ }
144
+ }
145
+ }
146
+ return events.sort((left, right) => left.at.localeCompare(right.at));
147
+ }
148
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,12 +3,15 @@ export * from "./aseprite";
3
3
  export * from "./appearance";
4
4
  export * from "./app-server";
5
5
  export * from "./app-settings";
6
+ export * from "./audit";
6
7
  export * from "./cloud";
8
+ export * from "./coordination";
7
9
  export * from "./claude-agent-sdk";
8
10
  export * from "./claude-home-cache";
9
11
  export * from "./codex-command";
10
12
  export { normalizeRepositoryUrl } from "./cursor-lib/shared";
11
13
  export * from "./domain/workspace-activity";
14
+ export * from "./history";
12
15
  export * from "./hermes";
13
16
  export * from "./hermes-hook-install";
14
17
  export * from "./openclaw";
package/dist/index.js CHANGED
@@ -20,13 +20,16 @@ __exportStar(require("./aseprite"), exports);
20
20
  __exportStar(require("./appearance"), exports);
21
21
  __exportStar(require("./app-server"), exports);
22
22
  __exportStar(require("./app-settings"), exports);
23
+ __exportStar(require("./audit"), exports);
23
24
  __exportStar(require("./cloud"), exports);
25
+ __exportStar(require("./coordination"), exports);
24
26
  __exportStar(require("./claude-agent-sdk"), exports);
25
27
  __exportStar(require("./claude-home-cache"), exports);
26
28
  __exportStar(require("./codex-command"), exports);
27
29
  var shared_1 = require("./cursor-lib/shared");
28
30
  Object.defineProperty(exports, "normalizeRepositoryUrl", { enumerable: true, get: function () { return shared_1.normalizeRepositoryUrl; } });
29
31
  __exportStar(require("./domain/workspace-activity"), exports);
32
+ __exportStar(require("./history"), exports);
30
33
  __exportStar(require("./hermes"), exports);
31
34
  __exportStar(require("./hermes-hook-install"), exports);
32
35
  __exportStar(require("./openclaw"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,iDAA+B;AAC/B,0CAAwB;AACxB,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAChC,8CAA6D;AAApD,gHAAA,sBAAsB,OAAA;AAC/B,8DAA4C;AAC5C,2CAAyB;AACzB,wDAAsC;AACtC,6CAA2B;AAC3B,6CAA2B;AAC3B,qDAAmC;AACnC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,+DAA6C;AAC7C,kEAAgD;AAChD,0EAAwD;AACxD,+DAA6C;AAC7C,gEAA8C;AAC9C,0DAAwC;AACxC,6CAA2B;AAC3B,0CAAwB;AACxB,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,iDAA+B;AAC/B,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAChC,8CAA6D;AAApD,gHAAA,sBAAsB,OAAA;AAC/B,8DAA4C;AAC5C,4CAA0B;AAC1B,2CAAyB;AACzB,wDAAsC;AACtC,6CAA2B;AAC3B,6CAA2B;AAC3B,qDAAmC;AACnC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,+DAA6C;AAC7C,kEAAgD;AAChD,0EAAwD;AACxD,+DAA6C;AAC7C,gEAA8C;AAC9C,0DAAwC;AACxC,6CAA2B;AAC3B,0CAAwB;AACxB,6CAA2B"}
@@ -7,6 +7,7 @@ const app_settings_1 = require("../app-settings");
7
7
  const room_config_1 = require("../room-config");
8
8
  const project_identity_1 = require("../project-identity");
9
9
  const workload_policy_1 = require("../domain/workload-policy");
10
+ const coordination_1 = require("../coordination");
10
11
  const workspace_activity_1 = require("../domain/workspace-activity");
11
12
  const activity_summary_1 = require("../snapshot-lib/activity-summary");
12
13
  const project_paths_1 = require("../project-paths");
@@ -32,6 +33,16 @@ function aggregateNotes(snapshots) {
32
33
  function aggregateCloudTasks(snapshots) {
33
34
  return snapshots.flatMap((snapshot) => snapshot.cloudTasks ?? []);
34
35
  }
36
+ function aggregateProviderHealth(snapshots) {
37
+ return snapshots.map((snapshot) => ({
38
+ adapterId: snapshot.adapterId,
39
+ provider: snapshot.source,
40
+ status: snapshot.health.status,
41
+ detail: snapshot.health.detail,
42
+ lastUpdatedAt: snapshot.health.lastUpdatedAt,
43
+ snapshotGeneratedAt: snapshot.generatedAt
44
+ }));
45
+ }
35
46
  function parseGitStatusPath(line) {
36
47
  const rawPath = line.slice(3).trim();
37
48
  if (!rawPath) {
@@ -157,7 +168,9 @@ async function assembleProjectSnapshot(input) {
157
168
  cloudTasks,
158
169
  events,
159
170
  activity,
160
- notes: aggregateNotes(input.adapterSnapshots)
171
+ notes: aggregateNotes(input.adapterSnapshots),
172
+ providerHealth: aggregateProviderHealth(input.adapterSnapshots),
173
+ claims: (0, coordination_1.listCoordinationClaims)(projectRoot, now)
161
174
  }, now);
162
175
  const diagnostics = freshUnseatedHotChangeAgentDiagnostics(snapshot, now);
163
176
  return diagnostics.length > 0
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-assembler.js","sourceRoot":"","sources":["../../src/services/snapshot-assembler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-assembler.js","sourceRoot":"","sources":["../../src/services/snapshot-assembler.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -348,6 +348,33 @@ export interface WorkspaceActivitySnapshot {
348
348
  hotTools: HotToolSummary[];
349
349
  runningCommands: RunningCommandSummary[];
350
350
  }
351
+ export type CoordinationClaimStatus = "active" | "released" | "handoff";
352
+ export type CoordinationClaimLifecycle = "active" | "stale" | "released" | "handoff";
353
+ export interface CoordinationClaim {
354
+ id: string;
355
+ projectRoot: string;
356
+ objective: string;
357
+ scope: string[];
358
+ branch: string | null;
359
+ agentLabel: string | null;
360
+ status: CoordinationClaimStatus;
361
+ blockedOn: string | null;
362
+ createdAt: string;
363
+ heartbeatAt: string;
364
+ expiresAt: string;
365
+ }
366
+ export interface CoordinationClaimView extends CoordinationClaim {
367
+ lifecycle: CoordinationClaimLifecycle;
368
+ }
369
+ export type ProviderHealthStatus = "ready" | "unconfigured" | "degraded" | "error";
370
+ export interface ProviderHealth {
371
+ adapterId: string;
372
+ provider: DashboardAgent["source"];
373
+ status: ProviderHealthStatus;
374
+ detail: string | null;
375
+ lastUpdatedAt: string | null;
376
+ snapshotGeneratedAt: string;
377
+ }
351
378
  export interface DashboardSnapshot {
352
379
  projectRoot: string;
353
380
  projectLabel: string;
@@ -359,6 +386,8 @@ export interface DashboardSnapshot {
359
386
  events: DashboardEvent[];
360
387
  activity: WorkspaceActivitySnapshot;
361
388
  notes: string[];
389
+ providerHealth: ProviderHealth[];
390
+ claims: CoordinationClaimView[];
362
391
  }
363
392
  export interface SnapshotOptions {
364
393
  projectRoot: string;
package/package.json CHANGED
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "name": "@agents-tower/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/Kundara/AgentsOfficeTower.git",
8
+ "directory": "packages/core"
9
+ },
5
10
  "main": "dist/index.js",
6
11
  "types": "dist/index.d.ts",
7
12
  "files": [