@dp-pcs/ogp 0.4.2 → 0.4.3
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/README.md +45 -15
- package/dist/cli/federation.d.ts +14 -0
- package/dist/cli/federation.d.ts.map +1 -1
- package/dist/cli/federation.js +165 -17
- package/dist/cli/federation.js.map +1 -1
- package/dist/cli/project.d.ts +4 -3
- package/dist/cli/project.d.ts.map +1 -1
- package/dist/cli/project.js +34 -24
- package/dist/cli/project.js.map +1 -1
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +57 -4
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli.js +11 -4
- package/dist/cli.js.map +1 -1
- package/dist/daemon/agent-comms.js +1 -1
- package/dist/daemon/agent-comms.js.map +1 -1
- package/dist/daemon/heartbeat.d.ts +22 -0
- package/dist/daemon/heartbeat.d.ts.map +1 -0
- package/dist/daemon/heartbeat.js +119 -0
- package/dist/daemon/heartbeat.js.map +1 -0
- package/dist/daemon/intent-registry.d.ts.map +1 -1
- package/dist/daemon/intent-registry.js +12 -6
- package/dist/daemon/intent-registry.js.map +1 -1
- package/dist/daemon/keypair.d.ts +1 -0
- package/dist/daemon/keypair.d.ts.map +1 -1
- package/dist/daemon/keypair.js +119 -7
- package/dist/daemon/keypair.js.map +1 -1
- package/dist/daemon/message-handler.js +23 -16
- package/dist/daemon/message-handler.js.map +1 -1
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +47 -0
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/peers.d.ts +13 -0
- package/dist/daemon/peers.d.ts.map +1 -1
- package/dist/daemon/peers.js +77 -6
- package/dist/daemon/peers.js.map +1 -1
- package/dist/daemon/projects.d.ts +9 -6
- package/dist/daemon/projects.d.ts.map +1 -1
- package/dist/daemon/projects.js +23 -16
- package/dist/daemon/projects.js.map +1 -1
- package/dist/daemon/server.d.ts +1 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +54 -44
- package/dist/daemon/server.js.map +1 -1
- package/dist/shared/help.js +2 -1
- package/dist/shared/help.js.map +1 -1
- package/docs/CLI-REFERENCE.md +1 -0
- package/docs/GETTING-STARTED.md +12 -1
- package/docs/cloudflare-named-tunnel-setup.md +126 -0
- package/docs/federation-flow.md +6 -6
- package/docs/project-intent-testing.md +97 -0
- package/docs/quickstart.md +12 -4
- package/docs/scopes.md +13 -13
- package/package.json +4 -4
- package/scripts/install-skills.js +19 -1
- package/scripts/test-project-intents.mjs +614 -0
- package/skills/ogp/SKILL.md +1 -1
- package/skills/ogp-agent-comms/SKILL.md +1 -1
- package/skills/ogp-expose/SKILL.md +103 -8
- package/skills/ogp-project/SKILL.md +47 -33
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
skill_name: ogp-expose
|
|
3
|
-
version: 0.
|
|
3
|
+
version: 0.4.0
|
|
4
4
|
description: Expose OGP via a public HTTPS endpoint, usually a stable Cloudflare hostname or named tunnel. Use when the user wants to verify or fix gateway reachability, align `gatewayUrl` with the real public endpoint, or set up temporary cloudflared/ngrok exposure for testing.
|
|
5
5
|
trigger: Use when the user wants to expose their OGP daemon to the internet, get a public URL for federation, or set up a tunnel for peer discovery.
|
|
6
6
|
requires:
|
|
@@ -74,6 +74,101 @@ ogp --for hermes status
|
|
|
74
74
|
|
|
75
75
|
Use `--for <framework>` on all exposure and verification commands when the target is not obvious.
|
|
76
76
|
|
|
77
|
+
## Guided Wizard
|
|
78
|
+
|
|
79
|
+
Follow this decision order every time:
|
|
80
|
+
|
|
81
|
+
1. **Cloudflare named tunnel + stable hostname** if the user has a domain on Cloudflare or wants a durable production URL.
|
|
82
|
+
2. **ngrok** if they need a stable-enough ad hoc URL and already have ngrok/auth configured.
|
|
83
|
+
3. **Temporary Cloudflare quick tunnel** only for fast testing when the URL can change on restart.
|
|
84
|
+
|
|
85
|
+
Ask or determine these three facts first:
|
|
86
|
+
|
|
87
|
+
1. Which framework is being exposed (`openclaw`, `hermes`, or another configured framework)?
|
|
88
|
+
2. Does the user want a **stable long-lived URL** or just a **temporary test URL**?
|
|
89
|
+
3. Do they already have **Cloudflare DNS/domain control** or **ngrok auth** available?
|
|
90
|
+
|
|
91
|
+
Then route them through exactly one branch below instead of mixing options.
|
|
92
|
+
|
|
93
|
+
## Branch 1: Stable Cloudflare Named Tunnel
|
|
94
|
+
|
|
95
|
+
Choose this when the user wants the recommended path.
|
|
96
|
+
|
|
97
|
+
Checklist:
|
|
98
|
+
|
|
99
|
+
1. Confirm the framework and its daemon port.
|
|
100
|
+
2. Choose the canonical hostname that should become `gatewayUrl`.
|
|
101
|
+
3. Create or verify the named tunnel.
|
|
102
|
+
4. Route DNS to the tunnel.
|
|
103
|
+
5. Point ingress at the correct local daemon port.
|
|
104
|
+
6. Set `gatewayUrl` to the same public hostname.
|
|
105
|
+
7. Verify local card, public card, and config all agree.
|
|
106
|
+
|
|
107
|
+
Primary repo doc:
|
|
108
|
+
|
|
109
|
+
- `docs/cloudflare-named-tunnel-setup.md`
|
|
110
|
+
|
|
111
|
+
Use that doc as the copy-paste path instead of rewriting the steps from scratch.
|
|
112
|
+
|
|
113
|
+
Success criteria:
|
|
114
|
+
|
|
115
|
+
- The public `/.well-known/ogp` card loads.
|
|
116
|
+
- Its `gatewayUrl` matches the intended hostname.
|
|
117
|
+
- Its public key matches the local daemon card.
|
|
118
|
+
|
|
119
|
+
## Branch 2: ngrok
|
|
120
|
+
|
|
121
|
+
Choose this when the user wants something faster than named Cloudflare but more intentional than a throwaway quick tunnel.
|
|
122
|
+
|
|
123
|
+
Checklist:
|
|
124
|
+
|
|
125
|
+
1. Confirm ngrok is installed and authenticated.
|
|
126
|
+
2. Start the tunnel against the correct local daemon port.
|
|
127
|
+
3. Capture the HTTPS URL.
|
|
128
|
+
4. Update `gatewayUrl` to that URL only if it is the intended endpoint for current federation.
|
|
129
|
+
5. Verify the public `/.well-known/ogp` card.
|
|
130
|
+
|
|
131
|
+
Use this command path:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
ogp --for openclaw expose --method ngrok
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Branch 3: Temporary Cloudflare Quick Tunnel
|
|
138
|
+
|
|
139
|
+
Choose this only for short-lived testing.
|
|
140
|
+
|
|
141
|
+
Checklist:
|
|
142
|
+
|
|
143
|
+
1. Start the quick tunnel on the correct daemon port.
|
|
144
|
+
2. Copy the temporary HTTPS URL.
|
|
145
|
+
3. Warn that it changes on restart.
|
|
146
|
+
4. Update `gatewayUrl` only if the user is intentionally federating against this temporary URL.
|
|
147
|
+
5. Verify the public `/.well-known/ogp` card before testing federation.
|
|
148
|
+
|
|
149
|
+
Use this command path:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
ogp --for openclaw expose
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Verification Flow
|
|
156
|
+
|
|
157
|
+
Always end with this verification sequence:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
curl -s http://127.0.0.1:<daemon-port>/.well-known/ogp
|
|
161
|
+
curl -s https://your-public-hostname/.well-known/ogp
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Confirm:
|
|
165
|
+
|
|
166
|
+
1. Public key matches local.
|
|
167
|
+
2. Public `gatewayUrl` matches config `gatewayUrl`.
|
|
168
|
+
3. The framework/port behind the hostname is the one the user intended.
|
|
169
|
+
|
|
170
|
+
If any of those disagree, do not treat the gateway as ready for federation.
|
|
171
|
+
|
|
77
172
|
## Recommended Production Baseline
|
|
78
173
|
|
|
79
174
|
Prefer one stable HTTPS hostname per framework:
|
|
@@ -133,9 +228,9 @@ Sign up at https://ngrok.com and get your auth token:
|
|
|
133
228
|
ngrok config add-authtoken <your-token>
|
|
134
229
|
```
|
|
135
230
|
|
|
136
|
-
##
|
|
231
|
+
## Command Reference
|
|
137
232
|
|
|
138
|
-
###
|
|
233
|
+
### Temporary Cloudflare Quick Tunnel
|
|
139
234
|
|
|
140
235
|
```bash
|
|
141
236
|
ogp --for openclaw expose
|
|
@@ -152,7 +247,7 @@ This will:
|
|
|
152
247
|
# Set "gatewayUrl" to the URL shown by cloudflared only if this temporary URL is the intended canonical endpoint
|
|
153
248
|
```
|
|
154
249
|
|
|
155
|
-
###
|
|
250
|
+
### ngrok Tunnel
|
|
156
251
|
|
|
157
252
|
```bash
|
|
158
253
|
ogp --for openclaw expose --method ngrok
|
|
@@ -169,9 +264,9 @@ This will:
|
|
|
169
264
|
# Set "gatewayUrl" to the ngrok URL
|
|
170
265
|
```
|
|
171
266
|
|
|
172
|
-
##
|
|
267
|
+
## Worked Flows
|
|
173
268
|
|
|
174
|
-
###
|
|
269
|
+
### Temporary Exposure Flow
|
|
175
270
|
|
|
176
271
|
1. **Run OGP setup:**
|
|
177
272
|
```bash
|
|
@@ -209,7 +304,7 @@ This will:
|
|
|
209
304
|
curl https://your-tunnel-url/.well-known/ogp
|
|
210
305
|
```
|
|
211
306
|
|
|
212
|
-
###
|
|
307
|
+
### Stable Named Tunnel Flow
|
|
213
308
|
|
|
214
309
|
For production use, create a permanent cloudflared tunnel:
|
|
215
310
|
|
|
@@ -253,7 +348,7 @@ Then make sure each framework config uses its own canonical hostname:
|
|
|
253
348
|
}
|
|
254
349
|
```
|
|
255
350
|
|
|
256
|
-
##
|
|
351
|
+
## Selection Notes
|
|
257
352
|
|
|
258
353
|
### Cloudflared / Stable Hostname
|
|
259
354
|
**Pros:**
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
skill_name: ogp-project
|
|
3
|
-
version: 2.
|
|
3
|
+
version: 2.2.0
|
|
4
4
|
description: >
|
|
5
5
|
Tool-agnostic project collaboration for AI assistants. Users keep their own tools
|
|
6
6
|
(Linear, Jira, Obsidian, GitHub, iCloud, local files — anything). This skill makes
|
|
7
7
|
agents aware of what each collaborator's agent knows and where it lives, so agents
|
|
8
|
-
can query each other
|
|
9
|
-
Supports project creation with context interviews, freeform
|
|
10
|
-
|
|
8
|
+
can query each other through OGP project boundaries rather than making the human
|
|
9
|
+
relay information. Supports project creation with context interviews, freeform
|
|
10
|
+
activity logging, project-topic agent-comms, and cross-peer queries.
|
|
11
11
|
trigger: >
|
|
12
12
|
Use when the user wants to create, manage, log to, or summarize OGP projects.
|
|
13
|
-
ALSO use proactively
|
|
14
|
-
|
|
13
|
+
ALSO use proactively when project context is clearly relevant — check local project
|
|
14
|
+
state first and query peer agents when that would reduce human relay or duplicate
|
|
15
|
+
work. Triggers on natural logging phrases like
|
|
15
16
|
"remember this for project X", "account for this", "make note of", "track this",
|
|
16
17
|
"jot this down", "save this to", "document this" when a project context is active or named.
|
|
17
|
-
The goal is to
|
|
18
|
-
|
|
18
|
+
The goal is to reduce human-as-messenger friction while preserving federation and
|
|
19
|
+
project boundaries.
|
|
19
20
|
requires:
|
|
20
21
|
bins:
|
|
21
22
|
- ogp
|
|
@@ -56,22 +57,30 @@ Full documentation: https://github.com/dp-pcs/ogp
|
|
|
56
57
|
|
|
57
58
|
## The Core Idea
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
Federation is the base relationship in OGP. A project is an optional collaboration boundary layered on top of that federation.
|
|
60
61
|
|
|
61
|
-
|
|
62
|
+
People work differently. One person tracks tasks in Linear, keeps notes in GitHub, stores files locally. Another uses a different issue tracker, writes in Obsidian, stores files in iCloud. The project model is meant to let both people keep those tools while their agents exchange high-level project context through OGP.
|
|
63
|
+
|
|
64
|
+
The important distinction is that a project is **not** "everyone must use the same repo" and **not** "share everything verbatim." It is a bounded context for collaboration:
|
|
65
|
+
|
|
66
|
+
- log high-level facts such as decisions, progress, blockers, questions, and important context
|
|
67
|
+
- let agents ask each other about that context over federation
|
|
68
|
+
- preserve visibility boundaries when project membership is broader than pairwise federation
|
|
69
|
+
|
|
70
|
+
That means a project can include multiple collaborators even when they are not all federated with each other. OGP should help each side coordinate through their own agent and tools, not force a full mesh of shared systems.
|
|
62
71
|
|
|
63
72
|
The human-as-messenger problem:
|
|
64
73
|
> Coworker wants to know something → asks you → you ask your agent → agent finds answer → you tell coworker
|
|
65
74
|
|
|
66
|
-
What this skill
|
|
67
|
-
> Coworker's agent asks your agent → answer flows back
|
|
75
|
+
What this skill is aiming for:
|
|
76
|
+
> Coworker's agent asks your agent about project context → answer flows back with the right policy and boundaries
|
|
68
77
|
|
|
69
78
|
---
|
|
70
79
|
|
|
71
80
|
## When to Use
|
|
72
81
|
|
|
73
82
|
- User wants to create a new OGP project with contextual setup
|
|
74
|
-
-
|
|
83
|
+
- User is about to start work on something project-related and it is worth checking local or peer project context first
|
|
75
84
|
- User expresses logging intent: "add this to project X", "log that", "remember this", "track this", etc.
|
|
76
85
|
- User asks about project status, activity, or what a collaborator has been working on
|
|
77
86
|
- A peer agent sends a query about something in your project context
|
|
@@ -87,30 +96,35 @@ What this skill enables:
|
|
|
87
96
|
|
|
88
97
|
### 2. Freeform Activity Logging
|
|
89
98
|
- Monitors for logging intent (any natural phrasing)
|
|
90
|
-
- Logs decisions, progress, blockers, context — all queryable later
|
|
91
|
-
- Auto-registers project ID as agent-comms topic for
|
|
99
|
+
- Logs high-level decisions, progress, blockers, questions, and context — all queryable later
|
|
100
|
+
- Auto-registers project ID as agent-comms topic for approved peers who are explicit project members
|
|
92
101
|
|
|
93
|
-
### 3.
|
|
94
|
-
- Before starting project-related work,
|
|
95
|
-
-
|
|
96
|
-
-
|
|
102
|
+
### 3. Project-Aware Coordination Workflow
|
|
103
|
+
- Before starting project-related work, the agent should consider checking local state first
|
|
104
|
+
- If the question or task depends on collaborator context, query the relevant peer agent on the project topic
|
|
105
|
+
- Surface "heads up — your collaborator already logged something relevant" moments when they are actually found
|
|
97
106
|
|
|
98
107
|
### 4. Peer Response Policy Awareness
|
|
99
108
|
- Peer agents have their own response policies (auto-answer vs. escalate to human)
|
|
100
109
|
- Your agent respects those policies and adjusts behavior accordingly
|
|
101
110
|
- This preserves each user's autonomy over how their agent handles interruptions
|
|
102
111
|
|
|
103
|
-
### 5. Cross-Peer
|
|
104
|
-
-
|
|
105
|
-
-
|
|
112
|
+
### 5. Cross-Peer Querying
|
|
113
|
+
- Query peer project state when that context would help answer a question or avoid duplicate work
|
|
114
|
+
- Summarize the relevant result for the user instead of dumping raw logs by default
|
|
115
|
+
|
|
116
|
+
### 6. Current Implementation Boundary
|
|
117
|
+
- The CLI and daemon currently provide project CRUD, contribution logging, peer project queries, and project-topic agent-comms
|
|
118
|
+
- The "check peers before starting work" behavior is a workflow expectation for the agent using this skill, not a daemon-enforced guarantee
|
|
119
|
+
- Multi-party project visibility rules are still evolving; do not assume that project membership automatically implies transitive sharing between peers
|
|
106
120
|
|
|
107
121
|
---
|
|
108
122
|
|
|
109
|
-
##
|
|
123
|
+
## Suggested Pre-Task Check
|
|
110
124
|
|
|
111
|
-
|
|
125
|
+
Use this flow when project context is likely to matter. Treat it as recommended agent behavior, not as a guaranteed runtime mechanism.
|
|
112
126
|
|
|
113
|
-
Whenever the user expresses intent to start work on something project-related,
|
|
127
|
+
Whenever the user expresses intent to start work on something project-related, consider this flow before starting:
|
|
114
128
|
|
|
115
129
|
### Step 1: Check local project state
|
|
116
130
|
```bash
|
|
@@ -121,9 +135,9 @@ ogp --for openclaw project query <project-id> --limit 20
|
|
|
121
135
|
ogp --for openclaw project query <project-id> --search "<keywords from user's intent>"
|
|
122
136
|
```
|
|
123
137
|
|
|
124
|
-
### Step 2: Query peer agents
|
|
138
|
+
### Step 2: Query relevant peer agents
|
|
125
139
|
```bash
|
|
126
|
-
#
|
|
140
|
+
# Ask the specific collaborator whose context is likely to matter
|
|
127
141
|
ogp --for openclaw federation agent <peer-id> <project-id> "My user is about to start working on <what they said>. Anything I should know before we begin?"
|
|
128
142
|
```
|
|
129
143
|
|
|
@@ -260,7 +274,7 @@ Ask these questions conversationally — not as a form. Let the user's answers l
|
|
|
260
274
|
*(peer IDs, names, or email addresses of collaborators)*
|
|
261
275
|
|
|
262
276
|
- If answered → `ogp --for openclaw project contribute <id> context.collaborators "<names/peer-ids>"`
|
|
263
|
-
- Agent behavior unlocked: Know who to ping during pre-task checks
|
|
277
|
+
- Agent behavior unlocked: Know who to ping during pre-task checks and whose agent to query when looking for context.
|
|
264
278
|
- Also offer: *"Want me to send them a federation invite?"* — if yes, run `ogp --for openclaw project request-join <peer-id> <project-id> <name>`
|
|
265
279
|
- If skipped → no peer checks until collaborators are added later
|
|
266
280
|
|
|
@@ -289,7 +303,7 @@ After the interview, summarize what you now know:
|
|
|
289
303
|
👥 Collaborators: <answer or "none yet">
|
|
290
304
|
|
|
291
305
|
For anything I don't know yet, you can tell me later and I'll update the project context.
|
|
292
|
-
I'll
|
|
306
|
+
I'll use this context when project questions come up and can check it before starting related work.
|
|
293
307
|
```
|
|
294
308
|
|
|
295
309
|
> **Why this matters:** The `context.*` entries do two jobs. They tell peer agents where your stuff lives (so they know what to ask you about). And they tell YOUR agent where to actually look when answering questions — not just what's been logged to `projects.json`.
|
|
@@ -487,11 +501,11 @@ ogp --for openclaw federation send <peer-id> message '{"text":"ping"}'
|
|
|
487
501
|
**Data Flow:**
|
|
488
502
|
```
|
|
489
503
|
User says something project-related
|
|
490
|
-
→ Agent
|
|
491
|
-
→ Agent
|
|
492
|
-
→ Surfaces conflicts/info before
|
|
504
|
+
→ Agent may check local project state (ogp --for <framework> project query)
|
|
505
|
+
→ Agent may ping relevant peer agents (ogp --for <framework> federation agent)
|
|
506
|
+
→ Surfaces relevant conflicts/info before or during work
|
|
493
507
|
→ Logs outcomes (ogp --for <framework> project contribute)
|
|
494
|
-
→
|
|
508
|
+
→ Shares or queries peer context through project-aware federation flows when appropriate
|
|
495
509
|
```
|
|
496
510
|
|
|
497
511
|
**The tool-agnostic principle:**
|