@volter/world 3.0.154 → 3.0.156
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/dist/examples/customer-onboarding/README.md +1 -1
- package/dist/examples/customer-onboarding/package.json +3 -3
- package/dist/examples/index.json +1 -0
- package/dist/examples/integration-branches/README.md +4 -4
- package/dist/examples/integration-branches/package.json +3 -3
- package/dist/examples/workplace-agent/README.md +43 -1
- package/dist/examples/workplace-agent/package.json +6 -6
- package/dist/examples/workplace-agent/public-files.json +1 -0
- package/dist/examples/workplace-agent/read-slack-mail.mjs +8 -0
- package/examples/customer-onboarding/README.md +1 -1
- package/examples/customer-onboarding/package.json +3 -3
- package/examples/index.json +1 -0
- package/examples/integration-branches/README.md +4 -4
- package/examples/integration-branches/package.json +3 -3
- package/examples/workplace-agent/README.md +43 -1
- package/examples/workplace-agent/package.json +6 -6
- package/examples/workplace-agent/public-files.json +1 -0
- package/examples/workplace-agent/read-slack-mail.mjs +8 -0
- package/package.json +4 -4
|
@@ -13,7 +13,7 @@ You need Node 22.6+, npm and registry access during installation. The browser pa
|
|
|
13
13
|
Copy this starter into a new folder:
|
|
14
14
|
|
|
15
15
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
16
|
+
$ npx @volter/world@3.0.156 example customer-onboarding --dir onboarding
|
|
17
17
|
$ cd onboarding
|
|
18
18
|
$ npm install
|
|
19
19
|
```
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"pg": "8.16.3"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@volter/world": "3.0.
|
|
14
|
+
"@volter/world": "3.0.156",
|
|
15
15
|
"@volter/world-core": "3.0.147",
|
|
16
|
-
"@volter/world-runtime": "3.0.
|
|
17
|
-
"@volter/world-console": "3.0.
|
|
16
|
+
"@volter/world-runtime": "3.0.154",
|
|
17
|
+
"@volter/world-console": "3.0.148",
|
|
18
18
|
"@volter/twin-stripe": "3.0.2",
|
|
19
19
|
"@volter/twin-resend": "1.0.1"
|
|
20
20
|
}
|
package/dist/examples/index.json
CHANGED
|
@@ -13,7 +13,7 @@ Give two workers the same Stripe baseline, let them change different existing cu
|
|
|
13
13
|
Use an empty parent folder. Create the baseline starter there:
|
|
14
14
|
|
|
15
15
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
16
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir baseline
|
|
17
17
|
$ cd baseline
|
|
18
18
|
$ npm install
|
|
19
19
|
$ ./node_modules/.bin/volter world init --name baseline --twins stripe
|
|
@@ -38,9 +38,9 @@ The stopped baseline retains its history and can supply local path remotes. Defa
|
|
|
38
38
|
Create three more copies in the same parent folder:
|
|
39
39
|
|
|
40
40
|
```console
|
|
41
|
-
$ npx @volter/world@3.0.
|
|
42
|
-
$ npx @volter/world@3.0.
|
|
43
|
-
$ npx @volter/world@3.0.
|
|
41
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir integration
|
|
42
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir worker-a
|
|
43
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir worker-b
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
In `integration`, then `worker-a`, then `worker-b`, install dependencies and initialize with the folder's name. Before a first boot or app write, link and pull the baseline:
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"stripe": "17.7.0"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@volter/world": "3.0.
|
|
12
|
+
"@volter/world": "3.0.156",
|
|
13
13
|
"@volter/world-core": "3.0.147",
|
|
14
|
-
"@volter/world-runtime": "3.0.
|
|
15
|
-
"@volter/world-console": "3.0.
|
|
14
|
+
"@volter/world-runtime": "3.0.154",
|
|
15
|
+
"@volter/world-console": "3.0.148",
|
|
16
16
|
"@volter/twin-stripe": "3.0.2"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -12,8 +12,14 @@ You need Node 22.6+, npm and registry access during installation. No platform ac
|
|
|
12
12
|
|
|
13
13
|
## Prepare an ordinary workplace
|
|
14
14
|
|
|
15
|
+
This starter pins [GitHub 3.0.9](https://world.volter.ai/twins/github/~40volter~2Ftwin-github/3~2E0~2E9),
|
|
16
|
+
[Linear 3.0.5](https://world.volter.ai/twins/linear/~40volter~2Ftwin-linear/3~2E0~2E5)
|
|
17
|
+
and [Slack 3.0.8](https://world.volter.ai/twins/slack/~40volter~2Ftwin-slack/3~2E0~2E8).
|
|
18
|
+
A catalog page may select a newer default. Keep this example's manifest and installation lock
|
|
19
|
+
together; its recorded workflow does not establish behavior for a different release.
|
|
20
|
+
|
|
15
21
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
22
|
+
$ npx @volter/world@3.0.156 example workplace-agent --dir workplace
|
|
17
23
|
$ cd workplace
|
|
18
24
|
$ npm install
|
|
19
25
|
$ ./node_modules/.bin/volter world init --name workplace --twins github,linear,slack
|
|
@@ -82,6 +88,42 @@ The retry uses the recorded ticket and attempts only the notification. An uncert
|
|
|
82
88
|
|
|
83
89
|
`company.json` and `outcomes/` are application files outside declared World services. They are not branched or reset with vendor history. After explicitly resetting this disposable World, clear only this example's receipts with `node reset-receipts.mjs`, restore the frozen clock, then seed again. Do not reuse receipts from one World with another.
|
|
84
90
|
|
|
91
|
+
## Inspect Slack's local member screen
|
|
92
|
+
|
|
93
|
+
The Slack twin provides workspace administration screens. They are separate from Slack's chat UI;
|
|
94
|
+
read the handoff's ticket and channel messages with `operate.mjs read` as shown above.
|
|
95
|
+
|
|
96
|
+
Stop the running World before starting its viewer. The viewer resumes the retained records and
|
|
97
|
+
keeps running in the background:
|
|
98
|
+
|
|
99
|
+
```console
|
|
100
|
+
$ ./node_modules/.bin/volter world down
|
|
101
|
+
$ ./node_modules/.bin/volter world view --no-open &
|
|
102
|
+
$ workplace_view_pid=$!
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Open the printed console link. Select **Slack** under **Records**, then **Its screens**.
|
|
106
|
+
Choose **Sign in to Slack** and enter the synthetic default owner's address, `owner@world.test`.
|
|
107
|
+
The screen asks for a confirmation code. Read the twin's captured mail in another terminal,
|
|
108
|
+
from this app folder:
|
|
109
|
+
|
|
110
|
+
```console
|
|
111
|
+
$ ./node_modules/.bin/volter world run -- node read-slack-mail.mjs owner@world.test
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
[read-slack-mail.mjs](./read-slack-mail.mjs) reads Slack's declared local `/_twin/mail` endpoint.
|
|
115
|
+
Enter the code from the latest message and continue to **Manage members**, where **World Owner**
|
|
116
|
+
appears as the active primary owner. This uses synthetic local identity; no real Slack account or
|
|
117
|
+
email delivery is involved. This walkthrough covers sign-in and the member list, not invitations
|
|
118
|
+
or other administration actions.
|
|
119
|
+
|
|
120
|
+
When finished, stop the viewer you started and retain the workplace:
|
|
121
|
+
|
|
122
|
+
```console
|
|
123
|
+
$ kill -INT "$workplace_view_pid"
|
|
124
|
+
$ ./node_modules/.bin/volter world down
|
|
125
|
+
```
|
|
126
|
+
|
|
85
127
|
## Create a synthetic GitHub organization
|
|
86
128
|
|
|
87
129
|
Personal repositories use GitHub's ordinary create-repository API. Organization creation is a settings-page operation; this twin provides the declared `POST /_twin/orgs` endpoint for synthetic setup. [create-organization.mjs](./create-organization.mjs) discovers the authenticated account and sends:
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"@slack/web-api": "7.19.0"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@volter/world": "3.0.
|
|
14
|
+
"@volter/world": "3.0.156",
|
|
15
15
|
"@volter/world-core": "3.0.147",
|
|
16
|
-
"@volter/world-runtime": "3.0.
|
|
17
|
-
"@volter/world-console": "3.0.
|
|
18
|
-
"@volter/twin-github": "3.0.
|
|
19
|
-
"@volter/twin-linear": "3.0.
|
|
20
|
-
"@volter/twin-slack": "3.0.
|
|
16
|
+
"@volter/world-runtime": "3.0.154",
|
|
17
|
+
"@volter/world-console": "3.0.148",
|
|
18
|
+
"@volter/twin-github": "3.0.9",
|
|
19
|
+
"@volter/twin-linear": "3.0.5",
|
|
20
|
+
"@volter/twin-slack": "3.0.8"
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const base = process.env.SLACK_TWIN_URL;
|
|
2
|
+
if (!base) throw new Error('Run this reader inside the workplace World.');
|
|
3
|
+
const address = process.argv[2] ?? 'owner@world.test';
|
|
4
|
+
const url = new URL('/_twin/mail', base);
|
|
5
|
+
url.searchParams.set('to', address);
|
|
6
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(2000) });
|
|
7
|
+
if (!response.ok) throw new Error(`Captured Slack mail: HTTP ${response.status}`);
|
|
8
|
+
console.log(JSON.stringify(await response.json(), null, 2));
|
|
@@ -13,7 +13,7 @@ You need Node 22.6+, npm and registry access during installation. The browser pa
|
|
|
13
13
|
Copy this starter into a new folder:
|
|
14
14
|
|
|
15
15
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
16
|
+
$ npx @volter/world@3.0.156 example customer-onboarding --dir onboarding
|
|
17
17
|
$ cd onboarding
|
|
18
18
|
$ npm install
|
|
19
19
|
```
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"pg": "8.16.3"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@volter/world": "3.0.
|
|
14
|
+
"@volter/world": "3.0.156",
|
|
15
15
|
"@volter/world-core": "3.0.147",
|
|
16
|
-
"@volter/world-runtime": "3.0.
|
|
17
|
-
"@volter/world-console": "3.0.
|
|
16
|
+
"@volter/world-runtime": "3.0.154",
|
|
17
|
+
"@volter/world-console": "3.0.148",
|
|
18
18
|
"@volter/twin-stripe": "3.0.2",
|
|
19
19
|
"@volter/twin-resend": "1.0.1"
|
|
20
20
|
}
|
package/examples/index.json
CHANGED
|
@@ -13,7 +13,7 @@ Give two workers the same Stripe baseline, let them change different existing cu
|
|
|
13
13
|
Use an empty parent folder. Create the baseline starter there:
|
|
14
14
|
|
|
15
15
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
16
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir baseline
|
|
17
17
|
$ cd baseline
|
|
18
18
|
$ npm install
|
|
19
19
|
$ ./node_modules/.bin/volter world init --name baseline --twins stripe
|
|
@@ -38,9 +38,9 @@ The stopped baseline retains its history and can supply local path remotes. Defa
|
|
|
38
38
|
Create three more copies in the same parent folder:
|
|
39
39
|
|
|
40
40
|
```console
|
|
41
|
-
$ npx @volter/world@3.0.
|
|
42
|
-
$ npx @volter/world@3.0.
|
|
43
|
-
$ npx @volter/world@3.0.
|
|
41
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir integration
|
|
42
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir worker-a
|
|
43
|
+
$ npx @volter/world@3.0.156 example integration-branches --dir worker-b
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
In `integration`, then `worker-a`, then `worker-b`, install dependencies and initialize with the folder's name. Before a first boot or app write, link and pull the baseline:
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"stripe": "17.7.0"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@volter/world": "3.0.
|
|
12
|
+
"@volter/world": "3.0.156",
|
|
13
13
|
"@volter/world-core": "3.0.147",
|
|
14
|
-
"@volter/world-runtime": "3.0.
|
|
15
|
-
"@volter/world-console": "3.0.
|
|
14
|
+
"@volter/world-runtime": "3.0.154",
|
|
15
|
+
"@volter/world-console": "3.0.148",
|
|
16
16
|
"@volter/twin-stripe": "3.0.2"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -12,8 +12,14 @@ You need Node 22.6+, npm and registry access during installation. No platform ac
|
|
|
12
12
|
|
|
13
13
|
## Prepare an ordinary workplace
|
|
14
14
|
|
|
15
|
+
This starter pins [GitHub 3.0.9](https://world.volter.ai/twins/github/~40volter~2Ftwin-github/3~2E0~2E9),
|
|
16
|
+
[Linear 3.0.5](https://world.volter.ai/twins/linear/~40volter~2Ftwin-linear/3~2E0~2E5)
|
|
17
|
+
and [Slack 3.0.8](https://world.volter.ai/twins/slack/~40volter~2Ftwin-slack/3~2E0~2E8).
|
|
18
|
+
A catalog page may select a newer default. Keep this example's manifest and installation lock
|
|
19
|
+
together; its recorded workflow does not establish behavior for a different release.
|
|
20
|
+
|
|
15
21
|
```console
|
|
16
|
-
$ npx @volter/world@3.0.
|
|
22
|
+
$ npx @volter/world@3.0.156 example workplace-agent --dir workplace
|
|
17
23
|
$ cd workplace
|
|
18
24
|
$ npm install
|
|
19
25
|
$ ./node_modules/.bin/volter world init --name workplace --twins github,linear,slack
|
|
@@ -82,6 +88,42 @@ The retry uses the recorded ticket and attempts only the notification. An uncert
|
|
|
82
88
|
|
|
83
89
|
`company.json` and `outcomes/` are application files outside declared World services. They are not branched or reset with vendor history. After explicitly resetting this disposable World, clear only this example's receipts with `node reset-receipts.mjs`, restore the frozen clock, then seed again. Do not reuse receipts from one World with another.
|
|
84
90
|
|
|
91
|
+
## Inspect Slack's local member screen
|
|
92
|
+
|
|
93
|
+
The Slack twin provides workspace administration screens. They are separate from Slack's chat UI;
|
|
94
|
+
read the handoff's ticket and channel messages with `operate.mjs read` as shown above.
|
|
95
|
+
|
|
96
|
+
Stop the running World before starting its viewer. The viewer resumes the retained records and
|
|
97
|
+
keeps running in the background:
|
|
98
|
+
|
|
99
|
+
```console
|
|
100
|
+
$ ./node_modules/.bin/volter world down
|
|
101
|
+
$ ./node_modules/.bin/volter world view --no-open &
|
|
102
|
+
$ workplace_view_pid=$!
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Open the printed console link. Select **Slack** under **Records**, then **Its screens**.
|
|
106
|
+
Choose **Sign in to Slack** and enter the synthetic default owner's address, `owner@world.test`.
|
|
107
|
+
The screen asks for a confirmation code. Read the twin's captured mail in another terminal,
|
|
108
|
+
from this app folder:
|
|
109
|
+
|
|
110
|
+
```console
|
|
111
|
+
$ ./node_modules/.bin/volter world run -- node read-slack-mail.mjs owner@world.test
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
[read-slack-mail.mjs](./read-slack-mail.mjs) reads Slack's declared local `/_twin/mail` endpoint.
|
|
115
|
+
Enter the code from the latest message and continue to **Manage members**, where **World Owner**
|
|
116
|
+
appears as the active primary owner. This uses synthetic local identity; no real Slack account or
|
|
117
|
+
email delivery is involved. This walkthrough covers sign-in and the member list, not invitations
|
|
118
|
+
or other administration actions.
|
|
119
|
+
|
|
120
|
+
When finished, stop the viewer you started and retain the workplace:
|
|
121
|
+
|
|
122
|
+
```console
|
|
123
|
+
$ kill -INT "$workplace_view_pid"
|
|
124
|
+
$ ./node_modules/.bin/volter world down
|
|
125
|
+
```
|
|
126
|
+
|
|
85
127
|
## Create a synthetic GitHub organization
|
|
86
128
|
|
|
87
129
|
Personal repositories use GitHub's ordinary create-repository API. Organization creation is a settings-page operation; this twin provides the declared `POST /_twin/orgs` endpoint for synthetic setup. [create-organization.mjs](./create-organization.mjs) discovers the authenticated account and sends:
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"@slack/web-api": "7.19.0"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@volter/world": "3.0.
|
|
14
|
+
"@volter/world": "3.0.156",
|
|
15
15
|
"@volter/world-core": "3.0.147",
|
|
16
|
-
"@volter/world-runtime": "3.0.
|
|
17
|
-
"@volter/world-console": "3.0.
|
|
18
|
-
"@volter/twin-github": "3.0.
|
|
19
|
-
"@volter/twin-linear": "3.0.
|
|
20
|
-
"@volter/twin-slack": "3.0.
|
|
16
|
+
"@volter/world-runtime": "3.0.154",
|
|
17
|
+
"@volter/world-console": "3.0.148",
|
|
18
|
+
"@volter/twin-github": "3.0.9",
|
|
19
|
+
"@volter/twin-linear": "3.0.5",
|
|
20
|
+
"@volter/twin-slack": "3.0.8"
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const base = process.env.SLACK_TWIN_URL;
|
|
2
|
+
if (!base) throw new Error('Run this reader inside the workplace World.');
|
|
3
|
+
const address = process.argv[2] ?? 'owner@world.test';
|
|
4
|
+
const url = new URL('/_twin/mail', base);
|
|
5
|
+
url.searchParams.set('to', address);
|
|
6
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(2000) });
|
|
7
|
+
if (!response.ok) throw new Error(`Captured Slack mail: HTTP ${response.status}`);
|
|
8
|
+
console.log(JSON.stringify(await response.json(), null, 2));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volter/world",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.156",
|
|
4
4
|
"description": "Run your app against a world of twins. `World` and `Repo` — one method per verb: init, up, run, log, diff, reset, branch, checkout, clone, fetch, changeset, push — and the `volter` command, one client of them.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"volter",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@modelcontextprotocol/sdk": "^1.30.1",
|
|
34
34
|
"@volter/world-core": "3.0.147",
|
|
35
|
-
"@volter/world-runtime": "3.0.
|
|
35
|
+
"@volter/world-runtime": "3.0.154",
|
|
36
36
|
"zod": "^4.6.5"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@volter/world-console": "3.0.
|
|
39
|
+
"@volter/world-console": "3.0.148"
|
|
40
40
|
},
|
|
41
41
|
"peerDependenciesMeta": {
|
|
42
42
|
"@volter/world-console": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@volter/world-console": "3.0.
|
|
47
|
+
"@volter/world-console": "3.0.148"
|
|
48
48
|
},
|
|
49
49
|
"bin": {
|
|
50
50
|
"volter": "dist/src/cli.js"
|