@devosurf/tesser 0.1.0-alpha.1 → 0.1.0-alpha.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 CHANGED
@@ -8,7 +8,7 @@ The interface both your agent and you drive everything through. Machine-first (A
8
8
 
9
9
  ```
10
10
  # auth & link (agent lane: set TESSER_TOKEN and skip all prompts)
11
- tesser login --instance URL --token tsk_… # verify + store a profile
11
+ tesser login --url URL --token tsk_… # verify + store a profile
12
12
  tesser init <name> # scaffold a Project (one repo of automations)
13
13
  tesser upgrade # pin Tesser packages to this CLI version + refresh .tesser/docs
14
14
  tesser link [--repo URL] # register the Project on the instance
package/dist/index.js CHANGED
@@ -807,6 +807,7 @@ var ApiClient = class {
807
807
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
808
808
  import { homedir } from "node:os";
809
809
  import { dirname, join } from "node:path";
810
+ var DEFAULT_INSTANCE_URL = "http://localhost:8377";
810
811
  var CONFIG_PATH = join(
811
812
  process.env["TESSER_CONFIG_DIR"] ?? join(homedir(), ".config", "tesser"),
812
813
  "config.json"
@@ -848,13 +849,18 @@ function resolveTarget(opts) {
848
849
  const projectRoot = findProjectRoot();
849
850
  const manifest = projectRoot ? readLinkManifest(projectRoot) : null;
850
851
  return {
851
- url: opts.url ?? manifest?.instance ?? process.env["TESSER_URL"] ?? profile.url ?? "http://localhost:8377",
852
+ url: opts.url ?? manifest?.instance ?? process.env["TESSER_URL"] ?? profile.url ?? DEFAULT_INSTANCE_URL,
852
853
  token: opts.token ?? process.env["TESSER_TOKEN"] ?? profile.token,
853
854
  project: manifest?.project,
854
855
  projectRoot
855
856
  };
856
857
  }
857
858
 
859
+ // packages/cli/src/login.ts
860
+ function resolveLoginInstance(cmdOpts, globalOpts) {
861
+ return cmdOpts.url ?? cmdOpts.instance ?? globalOpts.url ?? DEFAULT_INSTANCE_URL;
862
+ }
863
+
858
864
  // packages/cli/src/project.ts
859
865
  import { mkdtempSync, existsSync as existsSync2, readdirSync, statSync } from "node:fs";
860
866
  import { tmpdir } from "node:os";
@@ -1390,7 +1396,7 @@ tesser init my-project --instance https://tesser.example.com
1390
1396
  cd my-project
1391
1397
  pnpm install # creates pnpm-lock.yaml; commit it
1392
1398
  git init && git add -A && git commit -m init
1393
- tesser login --instance https://tesser.example.com --token "$TESSER_TOKEN"
1399
+ tesser login --url https://tesser.example.com --token "$TESSER_TOKEN"
1394
1400
  tesser link --json # registers this Project on the Instance
1395
1401
  tesser test --json
1396
1402
  tesser build --json
@@ -1401,7 +1407,7 @@ tesser deploy --json
1401
1407
 
1402
1408
  - \`tesser init <name> [--dir DIR] [--instance URL]\` \u2014 scaffold a Project.
1403
1409
  - \`tesser upgrade\` \u2014 pin Tesser packages to this CLI version and refresh \`.tesser/docs/\`. To target a version: \`npx @devosurf/tesser@<version> upgrade\`.
1404
- - \`tesser login --instance URL --token TOKEN\` \u2014 verify and store a profile. Prefer \`TESSER_TOKEN\` over pasting tokens into chat.
1410
+ - \`tesser login --url URL --token TOKEN\` \u2014 verify and store a profile. Prefer \`TESSER_TOKEN\` over pasting tokens into chat.
1405
1411
  - \`tesser link [--repo URL] --json\` \u2014 register the Project and print deploy-key/webhook setup data. CLI output must not include private keys or webhook secrets.
1406
1412
  - \`tesser status --json\` \u2014 instance health and deploy state.
1407
1413
  - \`tesser test [--smoke-only] [--automation ID] --json\` \u2014 fast local tests plus generated smoke tests.
@@ -1531,6 +1537,7 @@ import {
1531
1537
  googleDrive,
1532
1538
  googleSheets,
1533
1539
  http,
1540
+ outlookMail,
1534
1541
  pi,
1535
1542
  resend,
1536
1543
  slack,
@@ -1573,11 +1580,11 @@ export default defineAutomation({
1573
1580
  - \`ctx.connections.http.get({ url, headers?, query? })\` and \`ctx.connections.http.request({ method, url, headers?, query?, body?, bodyText? })\`. Generic writes are not retry-safe; still wrap them in a Step.
1574
1581
  - \`ctx.connections.github.issues.list({ repo?, state?, labels?, limit? })\`, \`issues.create({ repo, title, body?, labels? })\`, \`issues.comment({ repo, number, body })\`, \`repos.get({ repo })\`.
1575
1582
  - \`ctx.connections.slack.chat.postMessage({ channel, text, threadTs? })\` and related Slack chat/conversation/user Actions.
1576
- - \`ctx.connections.resend.emails.send(...)\`, Gmail/Google Calendar/Docs/Drive/Sheets Actions, Anthropic model Actions, Claude Code/Pi Harness-related Connectors: inspect package types or examples before using.
1583
+ - \`ctx.connections.resend.emails.send(...)\`, Gmail and Outlook Mail Actions (Outlook accepts optional \`mailbox\` for shared mailbox \`/users/{userPrincipalName}\` access), Google Calendar/Docs/Drive/Sheets Actions, Anthropic model Actions, Claude Code/Pi Harness-related Connectors: inspect package types or examples before using.
1577
1584
 
1578
1585
  ## Connector triggers
1579
1586
 
1580
- Some Connectors expose typed triggers, e.g. GitHub issue triggers and Slack event triggers. Use the Connector's \`triggers\` constructors; do not hand-roll webhook delivery unless no Connector exists.
1587
+ Some Connectors expose typed triggers, e.g. GitHub issue triggers, Slack event triggers, Gmail/Outlook mailbox poll triggers. Use the Connector's \`triggers\` constructors; do not hand-roll webhook delivery unless no Connector exists.
1581
1588
 
1582
1589
  \`\`\`ts
1583
1590
  trigger: github.triggers.issueOpened({ repo: "owner/repo" })
@@ -2478,18 +2485,19 @@ program.command("upgrade").description("pin Tesser packages to this CLI version
2478
2485
  toExit(err, out);
2479
2486
  }
2480
2487
  });
2481
- program.command("login").option("--token <token>", "API token from the instance (printed at first boot)").option("--instance <url>", "instance URL", "http://localhost:8377").option("--save-profile <name>", "profile name", "default").description("store instance credentials in ~/.config/tesser (or use env TESSER_TOKEN)").action(async (cmdOpts) => {
2488
+ program.command("login").option("--token <token>", "API token from the instance (printed at first boot)").option("--url <url>", `instance URL (defaults to ${DEFAULT_INSTANCE_URL})`).option("--instance <url>", "deprecated alias for --url").option("--save-profile <name>", "profile name", "default").description("store instance credentials in ~/.config/tesser (or use env TESSER_TOKEN)").action(async (cmdOpts) => {
2482
2489
  const { out, opts } = setup();
2483
2490
  try {
2484
2491
  const token = cmdOpts.token ?? opts.token;
2485
2492
  if (!token) throw new CliError(EXIT.USAGE, "missing required option '--token <token>'");
2486
- const client = new ApiClient(cmdOpts.instance, token);
2493
+ const instance = resolveLoginInstance(cmdOpts, opts);
2494
+ const client = new ApiClient(instance, token);
2487
2495
  await client.get("/health");
2488
2496
  const config = readConfig();
2489
- config.profiles = { ...config.profiles, [cmdOpts.saveProfile]: { url: cmdOpts.instance, token } };
2497
+ config.profiles = { ...config.profiles, [cmdOpts.saveProfile]: { url: instance, token } };
2490
2498
  config.current = cmdOpts.saveProfile;
2491
2499
  writeConfig(config);
2492
- out.data({ profile: cmdOpts.saveProfile, url: cmdOpts.instance }, () => `logged in to ${cmdOpts.instance} (profile "${cmdOpts.saveProfile}")`);
2500
+ out.data({ profile: cmdOpts.saveProfile, url: instance }, () => `logged in to ${instance} (profile "${cmdOpts.saveProfile}")`);
2493
2501
  } catch (err) {
2494
2502
  toExit(err, out);
2495
2503
  }