jfl 0.1.1 → 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.
Files changed (112) hide show
  1. package/README.md +77 -7
  2. package/clawdbot-plugin/clawdbot.plugin.json +20 -0
  3. package/clawdbot-plugin/index.js +555 -0
  4. package/clawdbot-plugin/index.ts +582 -0
  5. package/clawdbot-skill/SKILL.md +33 -336
  6. package/clawdbot-skill/index.ts +491 -321
  7. package/clawdbot-skill/skill.json +4 -13
  8. package/dist/commands/clawdbot.d.ts +11 -0
  9. package/dist/commands/clawdbot.d.ts.map +1 -0
  10. package/dist/commands/clawdbot.js +215 -0
  11. package/dist/commands/clawdbot.js.map +1 -0
  12. package/dist/commands/gtm-process-update.d.ts +10 -0
  13. package/dist/commands/gtm-process-update.d.ts.map +1 -0
  14. package/dist/commands/gtm-process-update.js +101 -0
  15. package/dist/commands/gtm-process-update.js.map +1 -0
  16. package/dist/commands/onboard.d.ts.map +1 -1
  17. package/dist/commands/onboard.js +203 -15
  18. package/dist/commands/onboard.js.map +1 -1
  19. package/dist/commands/openclaw.d.ts +56 -0
  20. package/dist/commands/openclaw.d.ts.map +1 -0
  21. package/dist/commands/openclaw.js +700 -0
  22. package/dist/commands/openclaw.js.map +1 -0
  23. package/dist/commands/service-validate.d.ts +12 -0
  24. package/dist/commands/service-validate.d.ts.map +1 -0
  25. package/dist/commands/service-validate.js +611 -0
  26. package/dist/commands/service-validate.js.map +1 -0
  27. package/dist/commands/services-create.d.ts +15 -0
  28. package/dist/commands/services-create.d.ts.map +1 -0
  29. package/dist/commands/services-create.js +1452 -0
  30. package/dist/commands/services-create.js.map +1 -0
  31. package/dist/commands/services-sync-agents.d.ts +23 -0
  32. package/dist/commands/services-sync-agents.d.ts.map +1 -0
  33. package/dist/commands/services-sync-agents.js +207 -0
  34. package/dist/commands/services-sync-agents.js.map +1 -0
  35. package/dist/commands/services.d.ts +7 -1
  36. package/dist/commands/services.d.ts.map +1 -1
  37. package/dist/commands/services.js +347 -22
  38. package/dist/commands/services.js.map +1 -1
  39. package/dist/commands/update.js +0 -0
  40. package/dist/commands/validate-settings.d.ts +37 -0
  41. package/dist/commands/validate-settings.d.ts.map +1 -0
  42. package/dist/commands/validate-settings.js +197 -0
  43. package/dist/commands/validate-settings.js.map +1 -0
  44. package/dist/index.js +155 -60
  45. package/dist/index.js.map +1 -1
  46. package/dist/lib/agent-generator.d.ts.map +1 -1
  47. package/dist/lib/agent-generator.js +94 -1
  48. package/dist/lib/agent-generator.js.map +1 -1
  49. package/dist/lib/openclaw-registry.d.ts +48 -0
  50. package/dist/lib/openclaw-registry.d.ts.map +1 -0
  51. package/dist/lib/openclaw-registry.js +181 -0
  52. package/dist/lib/openclaw-registry.js.map +1 -0
  53. package/dist/lib/openclaw-sdk.d.ts +107 -0
  54. package/dist/lib/openclaw-sdk.d.ts.map +1 -0
  55. package/dist/lib/openclaw-sdk.js +208 -0
  56. package/dist/lib/openclaw-sdk.js.map +1 -0
  57. package/dist/lib/peer-agent-generator.d.ts +44 -0
  58. package/dist/lib/peer-agent-generator.d.ts.map +1 -0
  59. package/dist/lib/peer-agent-generator.js +286 -0
  60. package/dist/lib/peer-agent-generator.js.map +1 -0
  61. package/dist/lib/service-detector.d.ts +1 -1
  62. package/dist/lib/service-detector.d.ts.map +1 -1
  63. package/dist/lib/service-detector.js +118 -5
  64. package/dist/lib/service-detector.js.map +1 -1
  65. package/dist/lib/service-gtm.d.ts +157 -0
  66. package/dist/lib/service-gtm.d.ts.map +1 -0
  67. package/dist/lib/service-gtm.js +786 -0
  68. package/dist/lib/service-gtm.js.map +1 -0
  69. package/dist/lib/service-mcp-base.d.ts +10 -1
  70. package/dist/lib/service-mcp-base.d.ts.map +1 -1
  71. package/dist/lib/service-mcp-base.js +20 -1
  72. package/dist/lib/service-mcp-base.js.map +1 -1
  73. package/dist/mcp/service-peer-mcp.d.ts +36 -0
  74. package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
  75. package/dist/mcp/service-peer-mcp.js +220 -0
  76. package/dist/mcp/service-peer-mcp.js.map +1 -0
  77. package/dist/mcp/service-registry-mcp.js +0 -0
  78. package/dist/utils/settings-validator.d.ts +4 -1
  79. package/dist/utils/settings-validator.d.ts.map +1 -1
  80. package/dist/utils/settings-validator.js +25 -1
  81. package/dist/utils/settings-validator.js.map +1 -1
  82. package/package.json +2 -1
  83. package/template/.claude/service-settings.json +32 -0
  84. package/template/.claude/settings.json +10 -0
  85. package/template/.claude/skills/end/SKILL.md +1780 -0
  86. package/template/.jfl/config.json +2 -1
  87. package/template/.mcp.json +1 -7
  88. package/template/CLAUDE.md +1042 -248
  89. package/template/CLAUDE.md.bak +1187 -0
  90. package/template/scripts/commit-gtm.sh +56 -0
  91. package/template/scripts/commit-product.sh +68 -0
  92. package/template/scripts/migrate-to-branch-sessions.sh +201 -0
  93. package/template/scripts/session/auto-commit.sh +4 -3
  94. package/template/scripts/session/jfl-doctor.sh +222 -83
  95. package/template/scripts/session/session-cleanup.sh +109 -21
  96. package/template/scripts/session/session-end.sh +26 -13
  97. package/template/scripts/session/session-init.sh +280 -98
  98. package/template/scripts/session/test-critical-infrastructure.sh +293 -0
  99. package/template/scripts/session/test-experience-level.sh +336 -0
  100. package/template/scripts/session/test-session-cleanup.sh +268 -0
  101. package/template/scripts/session/test-session-sync.sh +320 -0
  102. package/template/scripts/where-am-i.sh +78 -0
  103. package/template/templates/service-agent/.claude/settings.json +32 -0
  104. package/template/templates/service-agent/CLAUDE.md +334 -0
  105. package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
  106. package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
  107. package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
  108. package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
  109. package/dist/commands/session-mgmt.d.ts +0 -33
  110. package/dist/commands/session-mgmt.d.ts.map +0 -1
  111. package/dist/commands/session-mgmt.js +0 -404
  112. package/dist/commands/session-mgmt.js.map +0 -1
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @purpose Generate service agent definitions for GTM integration
7
7
  */
8
- import { writeFileSync, mkdirSync, existsSync } from "fs";
8
+ import { writeFileSync, mkdirSync, existsSync, readFileSync } from "fs";
9
9
  import { join } from "path";
10
10
  /**
11
11
  * Map service type to agent color
@@ -71,6 +71,97 @@ function generateSafetyGates(metadata) {
71
71
  }
72
72
  return gates;
73
73
  }
74
+ /**
75
+ * Generate peer services section for service CLAUDE.md
76
+ */
77
+ function generatePeerServicesSection(currentServiceName, gtmPath) {
78
+ // Try to load registered services from GTM config
79
+ const gtmConfigPath = join(gtmPath, ".jfl/config.json");
80
+ if (!existsSync(gtmConfigPath)) {
81
+ return `## Peer Services Available
82
+
83
+ You can collaborate with other services in this GTM workspace.
84
+ Run \`jfl services sync-agents\` to discover peer services.`;
85
+ }
86
+ try {
87
+ const gtmConfig = JSON.parse(readFileSync(gtmConfigPath, "utf-8"));
88
+ const registeredServices = gtmConfig.registered_services || [];
89
+ // Filter out current service
90
+ const peers = registeredServices.filter((s) => s.name !== currentServiceName && s.status === "active");
91
+ if (peers.length === 0) {
92
+ return `## Peer Services Available
93
+
94
+ No other services registered yet. When services are onboarded, you'll be able to @ mention them.`;
95
+ }
96
+ // Generate peer services table
97
+ const peerTable = peers
98
+ .map((p) => {
99
+ const whenToUse = getWhenToUseForType(p.type);
100
+ return `| @peer-service-${p.name} | ${p.type} | ${whenToUse} |`;
101
+ })
102
+ .join("\n");
103
+ return `## Peer Services Available
104
+
105
+ You can collaborate with other services in this GTM workspace:
106
+
107
+ | Peer Service | Type | When to Use |
108
+ |--------------|------|-------------|
109
+ ${peerTable}
110
+
111
+ ### How to Collaborate
112
+
113
+ **Direct @-mention (preferred):**
114
+ \`\`\`
115
+ @peer-service-formation can you generate a landing page?
116
+ @peer-service-context-hub what changed system-wide in last 24h?
117
+ \`\`\`
118
+
119
+ **MCP fallback (if agent spawning unavailable):**
120
+ \`\`\`
121
+ service_peer_call("peer-service-formation", "generate", {...})
122
+ service_peer_list() # List all peers
123
+ service_peer_status("peer-service-formation") # Check status
124
+ \`\`\`
125
+
126
+ ### When to Collaborate vs Handle Alone
127
+
128
+ **Collaborate when:**
129
+ - Task outside your service's core responsibility
130
+ - Need data/context from another service
131
+ - Coordinating multi-service operation
132
+
133
+ **Handle alone when:**
134
+ - Task within your service's domain
135
+ - Operation is service-local
136
+ - You have all needed context`;
137
+ }
138
+ catch {
139
+ return `## Peer Services Available
140
+
141
+ Run \`jfl services sync-agents\` to discover peer services.`;
142
+ }
143
+ }
144
+ /**
145
+ * Get "When to Use" guidance for a service type
146
+ */
147
+ function getWhenToUseForType(type) {
148
+ switch (type) {
149
+ case "api":
150
+ return "API data/endpoints";
151
+ case "web":
152
+ return "Frontend/UI tasks";
153
+ case "worker":
154
+ return "Background jobs";
155
+ case "infrastructure":
156
+ return "System health/metrics";
157
+ case "container":
158
+ return "Container ops";
159
+ case "cli":
160
+ return "CLI automation";
161
+ default:
162
+ return "Service tasks";
163
+ }
164
+ }
74
165
  /**
75
166
  * Generate agent definition content
76
167
  */
@@ -192,6 +283,8 @@ You can be invoked via:
192
283
 
193
284
  When spawned, the GTM agent may provide context from GTM knowledge docs. Use this to align with overall strategy.
194
285
 
286
+ ${generatePeerServicesSection(agentDef.name.replace("service-", ""), gtmPath)}
287
+
195
288
  ## Example Requests
196
289
 
197
290
  **"What's your current status?"**
@@ -1 +1 @@
1
- {"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * OpenClaw Agent Registry
3
+ *
4
+ * Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
5
+ * Tracks which agents are registered, their GTM workspaces, and active sessions.
6
+ *
7
+ * @purpose Multi-GTM agent registry management for OpenClaw protocol
8
+ * @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
9
+ */
10
+ export interface GtmRegistration {
11
+ id: string;
12
+ name: string;
13
+ path: string;
14
+ default: boolean;
15
+ registered_at: string;
16
+ }
17
+ export interface AgentSession {
18
+ branch: string;
19
+ started_at: string;
20
+ worktree: string | null;
21
+ }
22
+ export interface AgentEntry {
23
+ id: string;
24
+ runtime: string;
25
+ manifest_path: string | null;
26
+ registered_gtms: GtmRegistration[];
27
+ active_gtm: string | null;
28
+ session: AgentSession | null;
29
+ }
30
+ export interface AgentRegistry {
31
+ version: string;
32
+ agents: Record<string, AgentEntry>;
33
+ }
34
+ export declare function getAgent(agentId: string): AgentEntry | null;
35
+ export declare function listAgents(): AgentEntry[];
36
+ export declare function ensureAgent(agentId: string, runtime?: string): AgentEntry;
37
+ export declare function setManifestPath(agentId: string, manifestPath: string): void;
38
+ export declare function registerGtm(agentId: string, gtmPath: string, gtmName: string, setDefault?: boolean): GtmRegistration;
39
+ export declare function getActiveGtm(agentId: string): GtmRegistration | null;
40
+ export declare function switchGtm(agentId: string, gtmId: string): GtmRegistration;
41
+ export declare function listGtms(agentId: string): GtmRegistration[];
42
+ export declare function removeGtm(agentId: string, gtmId: string): boolean;
43
+ export declare function updateSession(agentId: string, session: AgentSession | null): void;
44
+ export declare function getActiveSession(agentId: string): AgentSession | null;
45
+ export declare function clearSession(agentId: string): void;
46
+ export declare function removeAgent(agentId: string): boolean;
47
+ export declare function getRegistryPath(): string;
48
+ //# sourceMappingURL=openclaw-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-registry.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,eAAe,EAAE,CAAA;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACnC;AA8BD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG3D;AAED,wBAAgB,UAAU,IAAI,UAAU,EAAE,CAGzC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiB,GAAG,UAAU,CAgBnF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAM3E;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAe,GAC1B,eAAe,CA2CjB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAKpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAezE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAI3D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBjE;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GAAG,IAAI,GAC3B,IAAI,CASN;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGrE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * OpenClaw Agent Registry
3
+ *
4
+ * Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
5
+ * Tracks which agents are registered, their GTM workspaces, and active sessions.
6
+ *
7
+ * @purpose Multi-GTM agent registry management for OpenClaw protocol
8
+ * @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
9
+ */
10
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
11
+ import { join, dirname, basename } from "path";
12
+ import { JFL_PATHS } from "../utils/jfl-paths.js";
13
+ const REGISTRY_FILE = join(JFL_PATHS.config, "openclaw-agents.json");
14
+ // ============================================================================
15
+ // Registry I/O
16
+ // ============================================================================
17
+ function loadRegistry() {
18
+ if (!existsSync(REGISTRY_FILE)) {
19
+ return { version: "1.0", agents: {} };
20
+ }
21
+ try {
22
+ return JSON.parse(readFileSync(REGISTRY_FILE, "utf-8"));
23
+ }
24
+ catch {
25
+ return { version: "1.0", agents: {} };
26
+ }
27
+ }
28
+ function saveRegistry(registry) {
29
+ const dir = dirname(REGISTRY_FILE);
30
+ if (!existsSync(dir)) {
31
+ mkdirSync(dir, { recursive: true });
32
+ }
33
+ writeFileSync(REGISTRY_FILE, JSON.stringify(registry, null, 2) + "\n");
34
+ }
35
+ // ============================================================================
36
+ // Agent Operations
37
+ // ============================================================================
38
+ export function getAgent(agentId) {
39
+ const registry = loadRegistry();
40
+ return registry.agents[agentId] || null;
41
+ }
42
+ export function listAgents() {
43
+ const registry = loadRegistry();
44
+ return Object.values(registry.agents);
45
+ }
46
+ export function ensureAgent(agentId, runtime = "custom") {
47
+ const registry = loadRegistry();
48
+ if (!registry.agents[agentId]) {
49
+ registry.agents[agentId] = {
50
+ id: agentId,
51
+ runtime,
52
+ manifest_path: null,
53
+ registered_gtms: [],
54
+ active_gtm: null,
55
+ session: null,
56
+ };
57
+ saveRegistry(registry);
58
+ }
59
+ return registry.agents[agentId];
60
+ }
61
+ export function setManifestPath(agentId, manifestPath) {
62
+ const registry = loadRegistry();
63
+ if (registry.agents[agentId]) {
64
+ registry.agents[agentId].manifest_path = manifestPath;
65
+ saveRegistry(registry);
66
+ }
67
+ }
68
+ // ============================================================================
69
+ // GTM Operations
70
+ // ============================================================================
71
+ export function registerGtm(agentId, gtmPath, gtmName, setDefault = false) {
72
+ const registry = loadRegistry();
73
+ const agent = registry.agents[agentId];
74
+ if (!agent) {
75
+ throw new Error(`Agent "${agentId}" not found in registry. Call ensureAgent() first.`);
76
+ }
77
+ const gtmId = basename(gtmPath).toLowerCase().replace(/[^a-z0-9-]/g, "-");
78
+ // Check if already registered
79
+ const existing = agent.registered_gtms.find((g) => g.path === gtmPath);
80
+ if (existing) {
81
+ if (setDefault) {
82
+ agent.registered_gtms.forEach((g) => (g.default = false));
83
+ existing.default = true;
84
+ }
85
+ saveRegistry(registry);
86
+ return existing;
87
+ }
88
+ // If first GTM or explicit default, mark as default
89
+ const isDefault = setDefault || agent.registered_gtms.length === 0;
90
+ if (isDefault) {
91
+ agent.registered_gtms.forEach((g) => (g.default = false));
92
+ }
93
+ const registration = {
94
+ id: gtmId,
95
+ name: gtmName,
96
+ path: gtmPath,
97
+ default: isDefault,
98
+ registered_at: new Date().toISOString(),
99
+ };
100
+ agent.registered_gtms.push(registration);
101
+ if (isDefault) {
102
+ agent.active_gtm = gtmId;
103
+ }
104
+ saveRegistry(registry);
105
+ return registration;
106
+ }
107
+ export function getActiveGtm(agentId) {
108
+ const agent = getAgent(agentId);
109
+ if (!agent || !agent.active_gtm)
110
+ return null;
111
+ return agent.registered_gtms.find((g) => g.id === agent.active_gtm) || null;
112
+ }
113
+ export function switchGtm(agentId, gtmId) {
114
+ const registry = loadRegistry();
115
+ const agent = registry.agents[agentId];
116
+ if (!agent) {
117
+ throw new Error(`Agent "${agentId}" not found in registry`);
118
+ }
119
+ const gtm = agent.registered_gtms.find((g) => g.id === gtmId);
120
+ if (!gtm) {
121
+ throw new Error(`GTM "${gtmId}" not registered for agent "${agentId}"`);
122
+ }
123
+ agent.active_gtm = gtmId;
124
+ saveRegistry(registry);
125
+ return gtm;
126
+ }
127
+ export function listGtms(agentId) {
128
+ const agent = getAgent(agentId);
129
+ if (!agent)
130
+ return [];
131
+ return agent.registered_gtms;
132
+ }
133
+ export function removeGtm(agentId, gtmId) {
134
+ const registry = loadRegistry();
135
+ const agent = registry.agents[agentId];
136
+ if (!agent)
137
+ return false;
138
+ const idx = agent.registered_gtms.findIndex((g) => g.id === gtmId);
139
+ if (idx === -1)
140
+ return false;
141
+ agent.registered_gtms.splice(idx, 1);
142
+ if (agent.active_gtm === gtmId) {
143
+ agent.active_gtm = agent.registered_gtms[0]?.id || null;
144
+ }
145
+ saveRegistry(registry);
146
+ return true;
147
+ }
148
+ // ============================================================================
149
+ // Session Operations
150
+ // ============================================================================
151
+ export function updateSession(agentId, session) {
152
+ const registry = loadRegistry();
153
+ const agent = registry.agents[agentId];
154
+ if (!agent) {
155
+ throw new Error(`Agent "${agentId}" not found in registry`);
156
+ }
157
+ agent.session = session;
158
+ saveRegistry(registry);
159
+ }
160
+ export function getActiveSession(agentId) {
161
+ const agent = getAgent(agentId);
162
+ return agent?.session || null;
163
+ }
164
+ export function clearSession(agentId) {
165
+ updateSession(agentId, null);
166
+ }
167
+ // ============================================================================
168
+ // Utility
169
+ // ============================================================================
170
+ export function removeAgent(agentId) {
171
+ const registry = loadRegistry();
172
+ if (!registry.agents[agentId])
173
+ return false;
174
+ delete registry.agents[agentId];
175
+ saveRegistry(registry);
176
+ return true;
177
+ }
178
+ export function getRegistryPath() {
179
+ return REGISTRY_FILE;
180
+ }
181
+ //# sourceMappingURL=openclaw-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-registry.js","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * OpenClaw TypeScript SDK
3
+ *
4
+ * Thin wrapper around Context Hub HTTP API and direct file I/O.
5
+ * For Node.js agent runtimes (Clawdbot, custom) that prefer imports over shell-outs.
6
+ *
7
+ * Primary path: HTTP to Context Hub (fast, no process spawn).
8
+ * Fallback: Shell out to `jfl openclaw` commands.
9
+ *
10
+ * @purpose Runtime-agnostic SDK for OpenClaw agent protocol
11
+ * @spec specs/OPENCLAW_SPEC.md
12
+ */
13
+ export interface OpenClawConfig {
14
+ agentId: string;
15
+ hubUrl?: string;
16
+ gtmPath?: string;
17
+ }
18
+ export interface SessionInfo {
19
+ session_id: string;
20
+ branch: string;
21
+ gtm_path: string;
22
+ gtm_name: string;
23
+ context_hub: {
24
+ url: string;
25
+ healthy: boolean;
26
+ };
27
+ auto_commit: {
28
+ running: boolean;
29
+ interval: number;
30
+ };
31
+ }
32
+ export interface HealthStatus {
33
+ healthy: boolean;
34
+ context_hub: boolean;
35
+ uncommitted_changes: boolean;
36
+ last_commit: string | null;
37
+ session_duration_seconds: number;
38
+ }
39
+ export interface ContextItem {
40
+ source: string;
41
+ type: string;
42
+ title: string;
43
+ content: string;
44
+ path?: string;
45
+ relevance?: number;
46
+ }
47
+ export interface MemoryResult {
48
+ id: string;
49
+ title: string;
50
+ summary: string;
51
+ type: string;
52
+ ts: string;
53
+ relevance: string;
54
+ score: number;
55
+ }
56
+ export interface JournalEntry {
57
+ v: number;
58
+ ts: string;
59
+ session: string;
60
+ type: "feature" | "fix" | "decision" | "milestone" | "spec" | "discovery";
61
+ status?: "complete" | "incomplete" | "blocked";
62
+ title: string;
63
+ summary: string;
64
+ detail?: string;
65
+ files?: string[];
66
+ decision?: string;
67
+ incomplete?: string[];
68
+ next?: string;
69
+ learned?: string[];
70
+ }
71
+ export interface GtmInfo {
72
+ id: string;
73
+ name: string;
74
+ path: string;
75
+ default: boolean;
76
+ registered_at: string;
77
+ }
78
+ export interface ServiceInfo {
79
+ name: string;
80
+ path: string;
81
+ type: string;
82
+ status: string;
83
+ }
84
+ export declare class OpenClawClient {
85
+ private agentId;
86
+ private hubUrl;
87
+ private gtmPath;
88
+ private http;
89
+ private sessionId;
90
+ constructor(config: OpenClawConfig);
91
+ sessionStart(gtmPath?: string): Promise<SessionInfo>;
92
+ sessionEnd(sync?: boolean): Promise<void>;
93
+ heartbeat(): Promise<HealthStatus>;
94
+ getContext(query?: string, taskType?: string): Promise<ContextItem[]>;
95
+ searchMemory(query: string, type?: string): Promise<MemoryResult[]>;
96
+ writeJournal(entry: Partial<JournalEntry>): Promise<void>;
97
+ listGtms(): Promise<GtmInfo[]>;
98
+ switchGtm(gtmId: string): Promise<void>;
99
+ createGtm(name: string, path?: string): Promise<string>;
100
+ tagService(name: string, message: string): Promise<void>;
101
+ listServices(): Promise<ServiceInfo[]>;
102
+ private cli;
103
+ private getAuthHeaders;
104
+ private resolveGtmPath;
105
+ private getCurrentSessionBranch;
106
+ }
107
+ //# sourceMappingURL=openclaw-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-sdk.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAC9C,WAAW,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,wBAAwB,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,CAAA;IACzE,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAAA;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,SAAS,CAAsB;gBAE3B,MAAM,EAAE,cAAc;IAgB5B,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUpD,UAAU,CAAC,IAAI,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IASlC,UAAU,CACd,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC;IAqBnB,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;IAkBpB,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCzD,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAK9B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWvD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAmB5C,OAAO,CAAC,GAAG;IAcX,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,uBAAuB;CAWhC"}