pinecall 0.4.0 → 0.5.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.
- package/README.md +14 -6
- package/dist/cli/agent-files.d.ts +6 -0
- package/dist/cli/agent-files.d.ts.map +1 -0
- package/dist/cli/agent-files.js +40 -0
- package/dist/cli/agent-files.js.map +1 -0
- package/dist/cli/agent-lines.d.ts +23 -0
- package/dist/cli/agent-lines.d.ts.map +1 -0
- package/dist/cli/agent-lines.js +109 -0
- package/dist/cli/agent-lines.js.map +1 -0
- package/dist/cli/agent-versions.d.ts +12 -0
- package/dist/cli/agent-versions.d.ts.map +1 -0
- package/dist/cli/agent-versions.js +70 -0
- package/dist/cli/agent-versions.js.map +1 -0
- package/dist/cli/agent.d.ts +77 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +192 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/chat.d.ts +2 -2
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +12 -24
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/client-for.d.ts +6 -0
- package/dist/cli/client-for.d.ts.map +1 -0
- package/dist/cli/client-for.js +7 -0
- package/dist/cli/client-for.js.map +1 -0
- package/dist/cli/connected.d.ts +4 -4
- package/dist/cli/connected.d.ts.map +1 -1
- package/dist/cli/connected.js +2 -2
- package/dist/cli/connected.js.map +1 -1
- package/dist/cli/dotenv.d.ts +24 -0
- package/dist/cli/dotenv.d.ts.map +1 -0
- package/dist/cli/dotenv.js +69 -0
- package/dist/cli/dotenv.js.map +1 -0
- package/dist/cli/env.d.ts +21 -37
- package/dist/cli/env.d.ts.map +1 -1
- package/dist/cli/env.js +35 -68
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/eval.d.ts +2 -1
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +5 -4
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/groups.d.ts.map +1 -1
- package/dist/cli/groups.js +0 -1
- package/dist/cli/groups.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +25 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lexicon.d.ts +14 -0
- package/dist/cli/lexicon.d.ts.map +1 -0
- package/dist/cli/lexicon.js +123 -0
- package/dist/cli/lexicon.js.map +1 -0
- package/dist/cli/line.js +6 -6
- package/dist/cli/line.js.map +1 -1
- package/dist/cli/linking.d.ts +13 -0
- package/dist/cli/linking.d.ts.map +1 -0
- package/dist/cli/linking.js +103 -0
- package/dist/cli/linking.js.map +1 -0
- package/dist/cli/load.js +1 -1
- package/dist/cli/load.js.map +1 -1
- package/dist/cli/login.d.ts +5 -11
- package/dist/cli/login.d.ts.map +1 -1
- package/dist/cli/login.js +31 -140
- package/dist/cli/login.js.map +1 -1
- package/dist/cli/memory-policy.d.ts +9 -0
- package/dist/cli/memory-policy.d.ts.map +1 -0
- package/dist/cli/memory-policy.js +79 -0
- package/dist/cli/memory-policy.js.map +1 -0
- package/dist/cli/memory.d.ts.map +1 -1
- package/dist/cli/memory.js +9 -1
- package/dist/cli/memory.js.map +1 -1
- package/dist/cli/pipeline.d.ts +2 -0
- package/dist/cli/pipeline.d.ts.map +1 -1
- package/dist/cli/pipeline.js +18 -76
- package/dist/cli/pipeline.js.map +1 -1
- package/dist/cli/serve/server.d.ts +1 -1
- package/dist/cli/serve/server.d.ts.map +1 -1
- package/dist/cli/serve/server.js +3 -2
- package/dist/cli/serve/server.js.map +1 -1
- package/dist/cli/serve/sidecar.js +1 -1
- package/dist/cli/serve/sidecar.js.map +1 -1
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +5 -5
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/signed-in.d.ts +36 -0
- package/dist/cli/signed-in.d.ts.map +1 -0
- package/dist/cli/signed-in.js +60 -0
- package/dist/cli/signed-in.js.map +1 -0
- package/dist/cli/simulate.d.ts.map +1 -1
- package/dist/cli/simulate.js +7 -6
- package/dist/cli/simulate.js.map +1 -1
- package/dist/cli/{run-console.d.ts → start-console.d.ts} +2 -2
- package/dist/cli/start-console.d.ts.map +1 -0
- package/dist/cli/{run-console.js → start-console.js} +3 -3
- package/dist/cli/start-console.js.map +1 -0
- package/dist/cli/{run-screens.d.ts → start-screens.d.ts} +2 -2
- package/dist/cli/start-screens.d.ts.map +1 -0
- package/dist/cli/{run-screens.js → start-screens.js} +3 -3
- package/dist/cli/start-screens.js.map +1 -0
- package/dist/cli/{run.d.ts → start.d.ts} +3 -3
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/{run.js → start.js} +31 -35
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/supervise.d.ts +1 -1
- package/dist/cli/supervise.d.ts.map +1 -1
- package/dist/cli/supervise.js +1 -1
- package/dist/cli/supervise.js.map +1 -1
- package/dist/cli/testing/gateway.d.ts +3 -0
- package/dist/cli/testing/gateway.d.ts.map +1 -1
- package/dist/cli/testing/gateway.js +2 -4
- package/dist/cli/testing/gateway.js.map +1 -1
- package/dist/cli/tuned.d.ts +8 -0
- package/dist/cli/tuned.d.ts.map +1 -0
- package/dist/cli/tuned.js +66 -0
- package/dist/cli/tuned.js.map +1 -0
- package/dist/cli/ui/chatting.d.ts +1 -1
- package/dist/cli/ui/chatting.d.ts.map +1 -1
- package/dist/cli/ui/chatting.js +11 -10
- package/dist/cli/ui/chatting.js.map +1 -1
- package/dist/cli/ui/console/assets/{index-DhcpHPdk.js → index--8qx-Pi4.js} +16 -12
- package/dist/cli/ui/console/assets/index-DmN15Axn.css +1 -0
- package/dist/cli/ui/console/index.html +2 -2
- package/dist/cli/ui/doors.d.ts +2 -2
- package/dist/cli/ui/doors.d.ts.map +1 -1
- package/dist/cli/ui/doors.js +2 -2
- package/dist/cli/ui/doors.js.map +1 -1
- package/dist/cli/ui/drifting.d.ts +1 -1
- package/dist/cli/ui/drifting.js +1 -1
- package/dist/cli/ui/knowing.d.ts +1 -1
- package/dist/cli/ui/knowing.js +3 -3
- package/dist/cli/ui/knowing.js.map +1 -1
- package/dist/cli/ui/promoting.d.ts +1 -1
- package/dist/cli/ui/promoting.js +1 -1
- package/dist/cli/ui/remembering.d.ts +1 -1
- package/dist/cli/ui/remembering.js +3 -3
- package/dist/cli/ui/remembering.js.map +1 -1
- package/dist/cli/ui/reproducing.d.ts +1 -1
- package/dist/cli/ui/reproducing.js +1 -1
- package/dist/cli/ui/simulating.d.ts +1 -1
- package/dist/cli/ui/simulating.js +4 -4
- package/dist/cli/ui/simulating.js.map +1 -1
- package/dist/cli/ui/testing.d.ts +1 -1
- package/dist/cli/ui/testing.js +3 -3
- package/dist/cli/ui/testing.js.map +1 -1
- package/dist/cli/whoami.d.ts +6 -2
- package/dist/cli/whoami.d.ts.map +1 -1
- package/dist/cli/whoami.js +6 -5
- package/dist/cli/whoami.js.map +1 -1
- package/dist/cli/world.d.ts +14 -24
- package/dist/cli/world.d.ts.map +1 -1
- package/dist/cli/world.js +21 -36
- package/dist/cli/world.js.map +1 -1
- package/dist/client/agent.d.ts +1 -1
- package/dist/client/agent.js +2 -2
- package/dist/client/agent.js.map +1 -1
- package/dist/client/client.d.ts +9 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +5 -2
- package/dist/client/client.js.map +1 -1
- package/dist/client/connection.d.ts +3 -0
- package/dist/client/connection.d.ts.map +1 -1
- package/dist/client/connection.js +2 -1
- package/dist/client/connection.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/observe.d.ts +3 -0
- package/dist/client/observe.d.ts.map +1 -1
- package/dist/client/observe.js +2 -1
- package/dist/client/observe.js.map +1 -1
- package/dist/client/signed.d.ts +15 -0
- package/dist/client/signed.d.ts.map +1 -0
- package/dist/client/signed.js +19 -0
- package/dist/client/signed.js.map +1 -0
- package/dist/views/render.d.ts +1 -1
- package/dist/views/render.js +1 -1
- package/package.json +2 -2
- package/dist/cli/config.d.ts +0 -16
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js +0 -125
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/credentials.d.ts +0 -41
- package/dist/cli/credentials.d.ts.map +0 -1
- package/dist/cli/credentials.js +0 -98
- package/dist/cli/credentials.js.map +0 -1
- package/dist/cli/gateway.d.ts +0 -12
- package/dist/cli/gateway.d.ts.map +0 -1
- package/dist/cli/gateway.js +0 -67
- package/dist/cli/gateway.js.map +0 -1
- package/dist/cli/keys.d.ts +0 -28
- package/dist/cli/keys.d.ts.map +0 -1
- package/dist/cli/keys.js +0 -137
- package/dist/cli/keys.js.map +0 -1
- package/dist/cli/profiles.d.ts +0 -122
- package/dist/cli/profiles.d.ts.map +0 -1
- package/dist/cli/profiles.js +0 -312
- package/dist/cli/profiles.js.map +0 -1
- package/dist/cli/run-console.d.ts.map +0 -1
- package/dist/cli/run-console.js.map +0 -1
- package/dist/cli/run-screens.d.ts.map +0 -1
- package/dist/cli/run-screens.js.map +0 -1
- package/dist/cli/run.d.ts.map +0 -1
- package/dist/cli/run.js.map +0 -1
- package/dist/cli/ui/console/assets/index-iylvEP0_.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/chat.d.ts
CHANGED
|
@@ -6,11 +6,11 @@ export declare const group: Group;
|
|
|
6
6
|
* the caller. Typing goes out as `{ text }`; everything that comes back is the call's own log,
|
|
7
7
|
* printed as it lands. The tools run in this process, so a breakpoint in a @tool is reachable.
|
|
8
8
|
*
|
|
9
|
-
* This is `rails console`: it works with no `pinecall
|
|
9
|
+
* This is `rails console`: it works with no `pinecall start` up and it works with three of them,
|
|
10
10
|
* because the caller socket names THIS process's app id and the gateway serves the call from it.
|
|
11
11
|
*
|
|
12
12
|
* Named an agent instead, it mounts nothing and is only the caller's side: a written call at
|
|
13
|
-
* whatever is holding that slug — your own `
|
|
13
|
+
* whatever is holding that slug — your own `start` in the other terminal, or a colleague's. The
|
|
14
14
|
* positional is a SLUG and `--file` is the file, because `--agent` meaning one thing in three
|
|
15
15
|
* verbs and the other in six was a flag nobody could read.
|
|
16
16
|
*/
|
package/dist/cli/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAAA,8GAA8G;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAY9G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,eAAO,MAAM,KAAK,EAAE,KAoBnB,CAAC;AASF;;;;;;;;;;;;GAYG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDzD;AAED,iGAAiG;AACjG,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAc3F;AAoED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnD"}
|
package/dist/cli/chat.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/** `pinecall chat [agent]`: this directory's agent in this process, or a written call at one already held. */
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
3
|
import { parseArgs } from "node:util";
|
|
4
|
-
import {
|
|
4
|
+
import { signed } from "../client/signed.js";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
6
|
import { mount } from "../runtime/connect.js";
|
|
7
|
+
import { pinecallFor } from "./client-for.js";
|
|
7
8
|
import { theDoor } from "./env.js";
|
|
8
9
|
import { load, mountOptions, notASlug } from "./load.js";
|
|
9
10
|
import { AGENT_FLAG, oneHome } from "./home.js";
|
|
10
|
-
import { cannotTell, ENV_FLAG, notThisWorld, standing } from "./world.js";
|
|
11
11
|
import { BROKE, CALLER, lineFor } from "./view.js";
|
|
12
12
|
import { firstState } from "./prompt.js";
|
|
13
13
|
const PROMPT = `${CALLER} `;
|
|
14
14
|
export const group = {
|
|
15
15
|
purpose: "the app in this terminal's own process, and a prompt against it",
|
|
16
|
-
usage: `usage: pinecall chat [agent] [--agent <name>] [--file agent.tsx] [--
|
|
16
|
+
usage: `usage: pinecall chat [agent] [--agent <name>] [--file agent.tsx] [--prod] [--as <contact>]
|
|
17
17
|
[--state file [--case n]] [--events]
|
|
18
18
|
|
|
19
19
|
With nothing after it: the agent of this directory, mounted in THIS process, and a written
|
|
20
20
|
caller against it. The tools run here, so a breakpoint in a @tool is reachable.
|
|
21
21
|
|
|
22
22
|
With an agent's slug: a written call at the agent somebody is already holding — your own
|
|
23
|
-
\`pinecall
|
|
23
|
+
\`pinecall start\` in another terminal, or a colleague's. Nothing is mounted here, so --state,
|
|
24
24
|
which opens a call in a class this process built, is refused.
|
|
25
25
|
|
|
26
26
|
--agent <name> which agent of a project of several, by its file's name or its slug
|
|
27
27
|
--file <path> which class to mount, by its path
|
|
28
|
-
--
|
|
28
|
+
--prod production's agent, if your org lets you act there; the sandbox otherwise
|
|
29
29
|
--as <contact> who is calling: the id memory files this call under (a phone number, a customer id)
|
|
30
30
|
--state file the state the call opens in — the same goldens file \`pinecall prompt\` reads
|
|
31
31
|
--case n which case of that file, when it holds several
|
|
@@ -42,11 +42,11 @@ const NOT_YOURS_TO_OPEN = "--state opens a call in a class this process mounted,
|
|
|
42
42
|
* the caller. Typing goes out as `{ text }`; everything that comes back is the call's own log,
|
|
43
43
|
* printed as it lands. The tools run in this process, so a breakpoint in a @tool is reachable.
|
|
44
44
|
*
|
|
45
|
-
* This is `rails console`: it works with no `pinecall
|
|
45
|
+
* This is `rails console`: it works with no `pinecall start` up and it works with three of them,
|
|
46
46
|
* because the caller socket names THIS process's app id and the gateway serves the call from it.
|
|
47
47
|
*
|
|
48
48
|
* Named an agent instead, it mounts nothing and is only the caller's side: a written call at
|
|
49
|
-
* whatever is holding that slug — your own `
|
|
49
|
+
* whatever is holding that slug — your own `start` in the other terminal, or a colleague's. The
|
|
50
50
|
* positional is a SLUG and `--file` is the file, because `--agent` meaning one thing in three
|
|
51
51
|
* verbs and the other in six was a flag nobody could read.
|
|
52
52
|
*/
|
|
@@ -61,7 +61,6 @@ export async function run(argv) {
|
|
|
61
61
|
file: { type: "string" },
|
|
62
62
|
...AGENT_FLAG,
|
|
63
63
|
events: { type: "boolean", default: false },
|
|
64
|
-
...ENV_FLAG,
|
|
65
64
|
},
|
|
66
65
|
});
|
|
67
66
|
const reach = positionals[0];
|
|
@@ -77,23 +76,12 @@ export async function run(argv) {
|
|
|
77
76
|
const door = theDoor();
|
|
78
77
|
if (door === undefined)
|
|
79
78
|
return 2;
|
|
80
|
-
try {
|
|
81
|
-
const elsewhere = notThisWorld("chat", await standing(door), values.env);
|
|
82
|
-
if (elsewhere !== undefined) {
|
|
83
|
-
process.stderr.write(`${elsewhere}\n`);
|
|
84
|
-
return 2;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch (failed) {
|
|
88
|
-
process.stderr.write(`${cannotTell("chat", failed)}\n`);
|
|
89
|
-
return 2;
|
|
90
|
-
}
|
|
91
79
|
const url = door.url;
|
|
92
80
|
if (reach !== undefined) {
|
|
93
|
-
return await talk(chatUrl(url, reach, undefined, values.as), door
|
|
81
|
+
return await talk(chatUrl(url, reach, undefined, values.as), door, values.events === true);
|
|
94
82
|
}
|
|
95
83
|
const loaded = await load((await oneHome("chat", values.file, values.agent)).file);
|
|
96
|
-
const pc =
|
|
84
|
+
const pc = pinecallFor(door);
|
|
97
85
|
// takesUnclaimed: false is the other half of the `?app=` below. Holding the agent is what makes
|
|
98
86
|
// this a console; taking a call nobody named would make it a server, and a real phone call would
|
|
99
87
|
// ring in this terminal. See the runtime's docs/decisions/dispatch.md: the registry is its.
|
|
@@ -114,7 +102,7 @@ export async function run(argv) {
|
|
|
114
102
|
// The id exists only after the register the connect awaited, which is why it is read here
|
|
115
103
|
// and not where the agent was mounted.
|
|
116
104
|
const address = chatUrl(url, mounted.slug, mounted.agent.app, values.as);
|
|
117
|
-
return await talk(address, door
|
|
105
|
+
return await talk(address, door, values.events === true);
|
|
118
106
|
}
|
|
119
107
|
finally {
|
|
120
108
|
pc.close();
|
|
@@ -141,8 +129,8 @@ export function chatUrl(base, agent, app, contact) {
|
|
|
141
129
|
// Every line typed is one turn; every frame received is one entry, printed as it lands. The key
|
|
142
130
|
// travels as the upgrade's Authorization header, never in the URL, which is the only thing the
|
|
143
131
|
// chat door accepts and the reason this socket is `ws` and not the runtime's global WebSocket.
|
|
144
|
-
function talk(url,
|
|
145
|
-
const socket = new WebSocket(url, { headers:
|
|
132
|
+
function talk(url, door, events) {
|
|
133
|
+
const socket = new WebSocket(url, { headers: signed(door.apiKey, door.world) });
|
|
146
134
|
const lines = createInterface({ input: process.stdin, output: process.stdout, prompt: PROMPT });
|
|
147
135
|
// An entry can land after the keyboard is gone — a piped stdin ends the moment it is read, and
|
|
148
136
|
// the agent's greeting arrives after that — and readline throws on a prompt it has closed.
|
package/dist/cli/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAE9G,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/cli/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The SDK client a verb holds: the door's gateway, its key, and the world the command named. */
|
|
2
|
+
import { Pinecall } from "../client/client.js";
|
|
3
|
+
import type { Door } from "./testing/gateway.js";
|
|
4
|
+
/** A client for this door. A verb that opens no socket never imports this, and so never `ws`. */
|
|
5
|
+
export declare function pinecallFor(door: Door): Pinecall;
|
|
6
|
+
//# sourceMappingURL=client-for.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-for.d.ts","sourceRoot":"","sources":["../../src/cli/client-for.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAEhD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** The SDK client a verb holds: the door's gateway, its key, and the world the command named. */
|
|
2
|
+
import { Pinecall } from "../client/client.js";
|
|
3
|
+
/** A client for this door. A verb that opens no socket never imports this, and so never `ws`. */
|
|
4
|
+
export function pinecallFor(door) {
|
|
5
|
+
return new Pinecall({ url: door.url, apiKey: door.apiKey, ...(door.world === undefined ? {} : { env: door.world }) });
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=client-for.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-for.js","sourceRoot":"","sources":["../../src/cli/client-for.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,iGAAiG;AACjG,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,OAAO,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACxH,CAAC"}
|
package/dist/cli/connected.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** The one line `pinecall
|
|
1
|
+
/** The one line `pinecall start` prints when the socket is up: who registered, where, and as whom. */
|
|
2
2
|
import type { RouteInput } from "../client/index.js";
|
|
3
3
|
export interface Connected {
|
|
4
4
|
slug: string;
|
|
@@ -8,12 +8,12 @@ export interface Connected {
|
|
|
8
8
|
/** Whose org took it, and which of the two worlds. Absent when the gateway would not say. */
|
|
9
9
|
org?: string;
|
|
10
10
|
env?: string;
|
|
11
|
-
/**
|
|
12
|
-
* above, and because it used to be
|
|
11
|
+
/** Where the key that opened the door was read — the environment, or the project's .env. Said
|
|
12
|
+
* because it decides the two above, and because it used to be whatever the shell exported. */
|
|
13
13
|
source?: string;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* The one line `pinecall
|
|
16
|
+
* The one line `pinecall start` prints when the socket is up.
|
|
17
17
|
*
|
|
18
18
|
* It used to say the gateway and nothing else, and that cost an afternoon: a key exported in the
|
|
19
19
|
* shell wins over the one `pinecall login` just kept, so an agent could register into another org
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../../src/cli/connected.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"connected.d.ts","sourceRoot":"","sources":["../../src/cli/connected.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;kGAC8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAStD;AAED,uGAAuG;AACvG,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAIlE"}
|
package/dist/cli/connected.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/** The one line `pinecall
|
|
1
|
+
/** The one line `pinecall start` prints when the socket is up: who registered, where, and as whom. */
|
|
2
2
|
/**
|
|
3
|
-
* The one line `pinecall
|
|
3
|
+
* The one line `pinecall start` prints when the socket is up.
|
|
4
4
|
*
|
|
5
5
|
* It used to say the gateway and nothing else, and that cost an afternoon: a key exported in the
|
|
6
6
|
* shell wins over the one `pinecall login` just kept, so an agent could register into another org
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connected.js","sourceRoot":"","sources":["../../src/cli/connected.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"connected.js","sourceRoot":"","sources":["../../src/cli/connected.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAiBtG;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,OAAO,CAAC,MAAgC;IACtD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,CACzG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** A project's `.env`: the nearest one up from where a verb runs, read as dotenv lines, and written by `link`. */
|
|
2
|
+
export declare const DOTENV = ".env";
|
|
3
|
+
/** The nearest `.env` from this directory up to the filesystem's root, or undefined when none. */
|
|
4
|
+
export declare function nearestDotenv(from: string): string | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* The file's variables. The dotenv every tool agrees on and nothing more: `NAME=value`, a value in
|
|
7
|
+
* matching quotes is taken inside them, `export ` in front is allowed, and a line starting with `#`
|
|
8
|
+
* or holding no `=` says nothing.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readDotenv(file: string): Record<string, string>;
|
|
11
|
+
/**
|
|
12
|
+
* These variables written into the file: a line that names one is replaced where it stands, one
|
|
13
|
+
* that is not there yet goes at the end, and every other line — a comment, the app's own
|
|
14
|
+
* variables — is left exactly as it was. A file that does not exist is made readable by its owner
|
|
15
|
+
* alone, because what it holds is a key.
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeDotenv(file: string, values: Record<string, string>): void;
|
|
18
|
+
/**
|
|
19
|
+
* Whether git keeps this file out of a commit: a key committed is a key published. Git answers it
|
|
20
|
+
* — every `.gitignore` up to the repository's root, and the global one — so the answer is the one
|
|
21
|
+
* a commit would act on. Outside a repository, or with no git at all, nothing can commit it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ignoredByGit(file: string): boolean;
|
|
24
|
+
//# sourceMappingURL=dotenv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.d.ts","sourceRoot":"","sources":["../../src/cli/dotenv.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAMlH,eAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS/D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAY9E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIlD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** A project's `.env`: the nearest one up from where a verb runs, read as dotenv lines, and written by `link`. */
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
export const DOTENV = ".env";
|
|
6
|
+
/** The nearest `.env` from this directory up to the filesystem's root, or undefined when none. */
|
|
7
|
+
export function nearestDotenv(from) {
|
|
8
|
+
for (let at = from;; at = dirname(at)) {
|
|
9
|
+
const file = join(at, DOTENV);
|
|
10
|
+
if (existsSync(file))
|
|
11
|
+
return file;
|
|
12
|
+
if (dirname(at) === at)
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The file's variables. The dotenv every tool agrees on and nothing more: `NAME=value`, a value in
|
|
18
|
+
* matching quotes is taken inside them, `export ` in front is allowed, and a line starting with `#`
|
|
19
|
+
* or holding no `=` says nothing.
|
|
20
|
+
*/
|
|
21
|
+
export function readDotenv(file) {
|
|
22
|
+
const found = {};
|
|
23
|
+
for (const raw of readFileSync(file, "utf8").split(/\r?\n/)) {
|
|
24
|
+
const line = raw.trim().replace(/^export\s+/, "");
|
|
25
|
+
const equals = line.indexOf("=");
|
|
26
|
+
if (line.startsWith("#") || equals <= 0)
|
|
27
|
+
continue;
|
|
28
|
+
found[line.slice(0, equals).trim()] = unquoted(line.slice(equals + 1).trim());
|
|
29
|
+
}
|
|
30
|
+
return found;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* These variables written into the file: a line that names one is replaced where it stands, one
|
|
34
|
+
* that is not there yet goes at the end, and every other line — a comment, the app's own
|
|
35
|
+
* variables — is left exactly as it was. A file that does not exist is made readable by its owner
|
|
36
|
+
* alone, because what it holds is a key.
|
|
37
|
+
*/
|
|
38
|
+
export function writeDotenv(file, values) {
|
|
39
|
+
const lines = existsSync(file) ? readFileSync(file, "utf8").replace(/\n$/, "").split("\n") : [];
|
|
40
|
+
const left = new Map(Object.entries(values));
|
|
41
|
+
const written = lines.map((line) => {
|
|
42
|
+
const name = line.trim().replace(/^export\s+/, "").split("=")[0]?.trim();
|
|
43
|
+
const value = name === undefined ? undefined : left.get(name);
|
|
44
|
+
if (name === undefined || value === undefined)
|
|
45
|
+
return line;
|
|
46
|
+
left.delete(name);
|
|
47
|
+
return `${name}=${value}`;
|
|
48
|
+
});
|
|
49
|
+
for (const [name, value] of left)
|
|
50
|
+
written.push(`${name}=${value}`);
|
|
51
|
+
writeFileSync(file, `${written.join("\n")}\n`, { mode: 0o600 });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Whether git keeps this file out of a commit: a key committed is a key published. Git answers it
|
|
55
|
+
* — every `.gitignore` up to the repository's root, and the global one — so the answer is the one
|
|
56
|
+
* a commit would act on. Outside a repository, or with no git at all, nothing can commit it.
|
|
57
|
+
*/
|
|
58
|
+
export function ignoredByGit(file) {
|
|
59
|
+
const asked = spawnSync("git", ["check-ignore", "-q", file], { cwd: dirname(file), stdio: "ignore" });
|
|
60
|
+
// 0 ignored · 1 not ignored · 128 not a repository; an error is no git on this machine.
|
|
61
|
+
return asked.error !== undefined || asked.status !== 1;
|
|
62
|
+
}
|
|
63
|
+
function unquoted(value) {
|
|
64
|
+
const quote = value[0];
|
|
65
|
+
if ((quote === '"' || quote === "'") && value.length >= 2 && value.endsWith(quote))
|
|
66
|
+
return value.slice(1, -1);
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=dotenv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../../src/cli/dotenv.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/env.d.ts
CHANGED
|
@@ -1,56 +1,40 @@
|
|
|
1
1
|
/** Where the CLI is pointed and what opens the door: the one place that decides both, for every verb. */
|
|
2
|
-
import
|
|
3
|
-
/** Pinecall's own cloud: where every verb goes
|
|
2
|
+
import type { World } from "../client/signed.js";
|
|
3
|
+
/** Pinecall's own cloud: where every verb goes when nothing names another gateway. */
|
|
4
4
|
export declare const CLOUD_URL = "https://box.pinecall.io";
|
|
5
|
-
/** The
|
|
6
|
-
export declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/** What the resolution found: the gateway, the key if there is one, and where the key came from. */
|
|
5
|
+
/** The key a verb knocks with and the gateway it knocks at: the project's, as any app reads its own. */
|
|
6
|
+
export declare const KEY_VARIABLE = "PINECALL_KEY";
|
|
7
|
+
export declare const URL_VARIABLE = "PINECALL_URL";
|
|
8
|
+
/** What the resolution found: the gateway, the key if there is one, where it was read, the world asked. */
|
|
10
9
|
export interface Found {
|
|
11
10
|
url: string;
|
|
12
11
|
apiKey: string | undefined;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/** The profile's name, when a project chose it. */
|
|
17
|
-
profile?: string;
|
|
18
|
-
/** `production` when `--prod` asked for that world's key for this one command. */
|
|
12
|
+
/** Where the key was read: `the environment`, or the `.env` it came from, as a path from here. */
|
|
13
|
+
source: string;
|
|
14
|
+
/** `production` when `--prod` named that world for this one command. */
|
|
19
15
|
world?: World;
|
|
20
16
|
}
|
|
21
17
|
/** A gateway with the key in hand: what a verb holds after `theDoor` answered. */
|
|
22
18
|
export interface Open {
|
|
23
19
|
url: string;
|
|
24
20
|
apiKey: string;
|
|
25
|
-
source:
|
|
26
|
-
project?: ProjectOrg;
|
|
27
|
-
profile?: string;
|
|
21
|
+
source: string;
|
|
28
22
|
world?: World;
|
|
29
23
|
}
|
|
30
24
|
/**
|
|
31
|
-
* Which gateway and which key:
|
|
25
|
+
* Which gateway and which key: the project's, the way every app reads its own secrets.
|
|
32
26
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* another
|
|
37
|
-
*
|
|
38
|
-
* Now: the profile `--profile` names; else, inside a project whose package.json says
|
|
39
|
-
* `"pinecall": { "org": "<slug>" }`, that org's profile; else the active one. `pinecall config`
|
|
40
|
-
* prints which. A
|
|
41
|
-
* machine with no browser writes one off stdin — `pinecall login --key-stdin` — so a key is never
|
|
42
|
-
* in an environment every child process and every `ps` can read. `PINECALL_HOME` says where the
|
|
43
|
-
* file is, and that is the only variable this file knows about.
|
|
27
|
+
* `PINECALL_KEY` and `PINECALL_URL` from the process's environment — a server's secrets, a CI job's
|
|
28
|
+
* — else from the nearest `.env` up from where the verb runs, which `pinecall link` wrote: each
|
|
29
|
+
* project folder is the org it was linked to, and nothing is switched. The gateway is the cloud's
|
|
30
|
+
* unless one of the two names another. v1's `PINECALL_API_KEY` is never read: a name another CLI on
|
|
31
|
+
* the same machine exports was how a key of the wrong org was once handed over in silence.
|
|
44
32
|
*/
|
|
45
|
-
export declare function doorFrom(env?: NodeJS.ProcessEnv,
|
|
33
|
+
export declare function doorFrom(env?: NodeJS.ProcessEnv, from?: string, world?: World | undefined): Found;
|
|
46
34
|
/** The gateway a verb knocks at, or nothing once it has said why it cannot: every verb's first act. */
|
|
47
|
-
export declare function theDoor(env?: NodeJS.ProcessEnv, err?: NodeJS.WritableStream): Open | undefined;
|
|
48
|
-
/** What to say when
|
|
49
|
-
export declare
|
|
50
|
-
/**
|
|
51
|
-
export declare function notThisOrg(project: ProjectOrg): string;
|
|
52
|
-
/** What to say when `--prod` asked a profile for a production key it does not hold. */
|
|
53
|
-
export declare function noProductionKey(profile: string): string;
|
|
54
|
-
/** The first line a verb that connects prints: which gateway, and where its key was found. */
|
|
35
|
+
export declare function theDoor(env?: NodeJS.ProcessEnv, err?: NodeJS.WritableStream, from?: string): Open | undefined;
|
|
36
|
+
/** What to say when there is no key here: the verb that writes one. */
|
|
37
|
+
export declare const NO_KEY = "no PINECALL_KEY here: `pinecall link` in the project's folder writes it to .env (a server keeps it in its secrets)";
|
|
38
|
+
/** The first line a verb that connects prints: which gateway, where its key was read, and the world asked. */
|
|
55
39
|
export declare function doorLine(door: Open): string;
|
|
56
40
|
//# sourceMappingURL=env.d.ts.map
|
package/dist/cli/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,yGAAyG;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,yGAAyG;AAIzG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,sFAAsF;AACtF,eAAO,MAAM,SAAS,4BAA4B,CAAC;AAEnD,wGAAwG;AACxG,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,2GAA2G;AAC3G,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,IAAI,GAAE,MAAsB,EAC5B,KAAK,GAAE,KAAK,GAAG,SAA4B,GAC1C,KAAK,CAgBP;AAED,uGAAuG;AACvG,wBAAgB,OAAO,CACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,MAAM,CAAC,cAA+B,EAC3C,IAAI,GAAE,MAAsB,GAC3B,IAAI,GAAG,SAAS,CAQlB;AAED,uEAAuE;AACvE,eAAO,MAAM,MAAM,uHACmG,CAAC;AAEvH,8GAA8G;AAC9G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAG3C"}
|
package/dist/cli/env.js
CHANGED
|
@@ -1,87 +1,54 @@
|
|
|
1
1
|
/** Where the CLI is pointed and what opens the door: the one place that decides both, for every verb. */
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { relative } from "node:path";
|
|
3
|
+
import { nearestDotenv, readDotenv } from "./dotenv.js";
|
|
4
|
+
import { theChosenWorld } from "./world.js";
|
|
5
|
+
/** Pinecall's own cloud: where every verb goes when nothing names another gateway. */
|
|
5
6
|
export const CLOUD_URL = "https://box.pinecall.io";
|
|
6
|
-
/** The
|
|
7
|
-
export const
|
|
7
|
+
/** The key a verb knocks with and the gateway it knocks at: the project's, as any app reads its own. */
|
|
8
|
+
export const KEY_VARIABLE = "PINECALL_KEY";
|
|
9
|
+
export const URL_VARIABLE = "PINECALL_URL";
|
|
8
10
|
/**
|
|
9
|
-
* Which gateway and which key:
|
|
11
|
+
* Which gateway and which key: the project's, the way every app reads its own secrets.
|
|
10
12
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* another
|
|
15
|
-
*
|
|
16
|
-
* Now: the profile `--profile` names; else, inside a project whose package.json says
|
|
17
|
-
* `"pinecall": { "org": "<slug>" }`, that org's profile; else the active one. `pinecall config`
|
|
18
|
-
* prints which. A
|
|
19
|
-
* machine with no browser writes one off stdin — `pinecall login --key-stdin` — so a key is never
|
|
20
|
-
* in an environment every child process and every `ps` can read. `PINECALL_HOME` says where the
|
|
21
|
-
* file is, and that is the only variable this file knows about.
|
|
13
|
+
* `PINECALL_KEY` and `PINECALL_URL` from the process's environment — a server's secrets, a CI job's
|
|
14
|
+
* — else from the nearest `.env` up from where the verb runs, which `pinecall link` wrote: each
|
|
15
|
+
* project folder is the org it was linked to, and nothing is switched. The gateway is the cloud's
|
|
16
|
+
* unless one of the two names another. v1's `PINECALL_API_KEY` is never read: a name another CLI on
|
|
17
|
+
* the same machine exports was how a key of the wrong org was once handed over in silence.
|
|
22
18
|
*/
|
|
23
|
-
export function doorFrom(env = process.env,
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// only: the profile's key in hand is not touched, so the next command is in the sandbox again.
|
|
29
|
-
const chosen = held === undefined || world === undefined ? held : { ...held, key: keyIn(held, world) };
|
|
30
|
-
// A project that names an org this machine holds no profile of is refused, never handed the
|
|
31
|
-
// active profile: that one is another org's, and running there is the accident this prevents.
|
|
32
|
-
if (chosen === undefined && choice.project !== undefined) {
|
|
33
|
-
return { url: chosenGateway(home) ?? CLOUD_URL, apiKey: undefined, source: "none", project: choice.project };
|
|
34
|
-
}
|
|
35
|
-
// No profile yet: the gateway is whichever this machine was pointed at, and the cloud until
|
|
36
|
-
// somebody points it elsewhere. A localhost default sent every first verb at a box that is not
|
|
37
|
-
// running, and the refusal read as the CLI being broken.
|
|
38
|
-
if (chosen === undefined)
|
|
39
|
-
return { url: chosenGateway(home) ?? CLOUD_URL, apiKey: undefined, source: "none" };
|
|
40
|
-
const asked = world === undefined ? {} : { world, profile: choice.name };
|
|
41
|
-
if (choice.project !== undefined) {
|
|
42
|
-
return { url: chosen.url, apiKey: chosen.key, source: "profile", project: choice.project, ...asked, profile: choice.name };
|
|
19
|
+
export function doorFrom(env = process.env, from = process.cwd(), world = theChosenWorld()) {
|
|
20
|
+
const asked = world === undefined ? {} : { world };
|
|
21
|
+
const exported = env[KEY_VARIABLE];
|
|
22
|
+
if (exported !== undefined && exported !== "") {
|
|
23
|
+
return { url: env[URL_VARIABLE] ?? CLOUD_URL, apiKey: exported, source: "the environment", ...asked };
|
|
43
24
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
25
|
+
const file = nearestDotenv(from);
|
|
26
|
+
if (file === undefined)
|
|
27
|
+
return { url: env[URL_VARIABLE] ?? CLOUD_URL, apiKey: undefined, source: "nowhere", ...asked };
|
|
28
|
+
const values = readDotenv(file);
|
|
29
|
+
const key = values[KEY_VARIABLE];
|
|
30
|
+
return {
|
|
31
|
+
url: env[URL_VARIABLE] ?? values[URL_VARIABLE] ?? CLOUD_URL,
|
|
32
|
+
apiKey: key === "" ? undefined : key,
|
|
33
|
+
source: relative(from, file) || file,
|
|
34
|
+
...asked,
|
|
35
|
+
};
|
|
49
36
|
}
|
|
50
37
|
/** The gateway a verb knocks at, or nothing once it has said why it cannot: every verb's first act. */
|
|
51
|
-
export function theDoor(env = process.env, err = process.stderr) {
|
|
52
|
-
const found = doorFrom(env);
|
|
38
|
+
export function theDoor(env = process.env, err = process.stderr, from = process.cwd()) {
|
|
39
|
+
const found = doorFrom(env, from);
|
|
53
40
|
if (found.apiKey === undefined) {
|
|
54
|
-
err.write(`${
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
if (found.apiKey === "") {
|
|
58
|
-
err.write(`${noProductionKey(found.profile ?? "this profile")}\n`);
|
|
41
|
+
err.write(`${NO_KEY}\n`);
|
|
59
42
|
return undefined;
|
|
60
43
|
}
|
|
61
44
|
const { apiKey, ...rest } = found;
|
|
62
45
|
return { ...rest, apiKey };
|
|
63
46
|
}
|
|
64
|
-
/** What to say when
|
|
65
|
-
export
|
|
66
|
-
|
|
67
|
-
+ " or `pinecall use <profile>` for one already kept (`pinecall config` lists them)");
|
|
68
|
-
}
|
|
69
|
-
/** What to say when the project names an org this machine holds no profile of. */
|
|
70
|
-
export function notThisOrg(project) {
|
|
71
|
-
return (`this project is org ${project.org} (${project.file}), and this machine holds no profile of it:`
|
|
72
|
-
+ ` \`pinecall login\` as a member of ${project.org}, or \`--profile <name>\` for one already kept`
|
|
73
|
-
+ " (`pinecall config` lists them)");
|
|
74
|
-
}
|
|
75
|
-
/** What to say when `--prod` asked a profile for a production key it does not hold. */
|
|
76
|
-
export function noProductionKey(profile) {
|
|
77
|
-
return `--prod asks for ${profile}'s production key, and it holds none: \`pinecall login\` again keeps both worlds' keys`;
|
|
78
|
-
}
|
|
79
|
-
/** The first line a verb that connects prints: which gateway, and where its key was found. */
|
|
47
|
+
/** What to say when there is no key here: the verb that writes one. */
|
|
48
|
+
export const NO_KEY = "no PINECALL_KEY here: `pinecall link` in the project's folder writes it to .env (a server keeps it in its secrets)";
|
|
49
|
+
/** The first line a verb that connects prints: which gateway, where its key was read, and the world asked. */
|
|
80
50
|
export function doorLine(door) {
|
|
81
51
|
const world = door.world === undefined ? "" : ` · ${door.world} (--prod)`;
|
|
82
|
-
if (door.project !== undefined) {
|
|
83
|
-
return `gateway ${door.url} · key from profile ${door.profile ?? door.project.org} · org ${door.project.org} from ${door.project.file}${world}`;
|
|
84
|
-
}
|
|
85
52
|
return `gateway ${door.url} · key from ${door.source}${world}`;
|
|
86
53
|
}
|
|
87
54
|
//# sourceMappingURL=env.js.map
|
package/dist/cli/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"AAAA,yGAAyG;AAEzG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/cli/env.ts"],"names":[],"mappings":"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"}
|