@oxygen-agent/cli 1.1013.15 → 1.1013.27

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
@@ -34,4 +34,4 @@ oxygen update
34
34
 
35
35
  For product documentation, visit https://oxygen-agent.com/docs. For support, visit https://oxygen-agent.com.
36
36
 
37
- Version: 1.1013.15
37
+ Version: 1.1013.27
package/dist/index.js CHANGED
@@ -11928,7 +11928,7 @@ Examples:
11928
11928
  .command("admin")
11929
11929
  .description("Staff-only commands.")
11930
11930
  .addCommand(new Command("kpis")
11931
- .description("Show the company conversion funnel (visitors → signups → agent connected → CLI/MCP activation → paid, with step rates), self-reported signup-channel attribution, new and positive-paid MRR/ARR, and paid churn separated from trial loss. OXYGEN staff only; workspace admin role alone does not grant access.")
11931
+ .description("Show the company conversion funnel (visitors → signups → activation on any surface, web, CLI or MCP → paid, with step rates and agent connected beside it), self-reported signup-channel attribution, new and positive-paid MRR/ARR, and paid churn separated from trial loss. OXYGEN staff only; workspace admin role alone does not grant access.")
11932
11932
  .addOption(new Option("--range <range>", "Range for acquisition, the funnel's signup cohort, new revenue, and churn; current MRR/ARR and scheduled cancellations remain point-in-time.")
11933
11933
  .choices(["7d", "30d", "90d"])
11934
11934
  .default("30d"))
@@ -318,7 +318,13 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
318
318
  {
319
319
  name: "knowledge_slugs",
320
320
  kind: "array",
321
- description: "Selected live master wiki slugs shared with creators; empty array clears sharing.",
321
+ description: "Knowledge file slugs, skills included, shared live with creators and loaded into their AI context (up to 30); empty array clears sharing.",
322
+ required: false,
323
+ },
324
+ {
325
+ name: "knowledge_folder_ids",
326
+ kind: "array",
327
+ description: "Knowledge folder ids (from knowledge folders list) shared live with creators, skill folders included: files added to them later reach existing creators too (up to 10); empty array clears.",
322
328
  required: false,
323
329
  },
324
330
  {
@@ -373,7 +379,13 @@ export function registerUgcCommands(program, { request: requestOxygen, handle })
373
379
  {
374
380
  name: "knowledge_slugs",
375
381
  kind: "array",
376
- description: "Selected live master wiki slugs shared with creators; empty array clears sharing.",
382
+ description: "Knowledge file slugs, skills included, shared live with creators and loaded into their AI context (up to 30); empty array clears sharing.",
383
+ required: false,
384
+ },
385
+ {
386
+ name: "knowledge_folder_ids",
387
+ kind: "array",
388
+ description: "Knowledge folder ids (from knowledge folders list) shared live with creators, skill folders included: files added to them later reach existing creators too (up to 10); empty array clears.",
377
389
  required: false,
378
390
  },
379
391
  {
@@ -0,0 +1,5 @@
1
+ /** A named column operation constrains execution; it never grants authority. */
2
+ export declare const COLUMN_OPERATION_HEADER = "X-Oxygen-Column-Operation";
3
+ export declare const COLUMN_OPERATIONS: readonly ["ai", "research", "formula", "enrichment", "bind", "lookup"];
4
+ export type ColumnOperation = typeof COLUMN_OPERATIONS[number];
5
+ export declare function isColumnOperation(value: unknown): value is ColumnOperation;
@@ -0,0 +1,6 @@
1
+ /** A named column operation constrains execution; it never grants authority. */
2
+ export const COLUMN_OPERATION_HEADER = "X-Oxygen-Column-Operation";
3
+ export const COLUMN_OPERATIONS = ["ai", "research", "formula", "enrichment", "bind", "lookup"];
4
+ export function isColumnOperation(value) {
5
+ return typeof value === "string" && COLUMN_OPERATIONS.includes(value);
6
+ }
@@ -27,6 +27,7 @@ const mcpOnly = { generated: { cli: false, mcp: true } };
27
27
  const cliOnly = { generated: { cli: true, mcp: false } };
28
28
  export const CUSTOMER_OPERATIONS = [
29
29
  operation("activation.state", "/api/cli/activation/state", "GET", "activation state", "oxygen_activation_state", "workspace", "Read this workspace's onboarding activation state and next available actions.", {}, [], mcpOnly),
30
+ operation("activation.checklist", "/api/cli/activation/checklist", "GET", "activation checklist", "oxygen_activation_checklist", "workspace", "Read this workspace's getting-started checklist: leads in a table, a first sequence, a connected sending account and a launched sequence, each with whether it is done and a link to do it; eligible says whether the sidebar shows it. Read-only, 0 credits."),
30
31
  operation("api_keys.list", "/api/cli/api-keys", "GET", "api-keys list", "oxygen_api_keys_list", "workspace", "List workspace API keys without revealing their tokens.", {}, [], mcpOnly),
31
32
  operation("api_keys.create", "/api/cli/api-keys", "POST", "api-keys create", "oxygen_api_keys_create", "workspace", "Create a workspace API key; requires the caller's personal user session. The token is returned once.", { name: text(), expires_at: text("ISO timestamp; omit for no expiry.") }, [], mcpOnly),
32
33
  operation("api_keys.revoke", "/api/cli/api-keys/{key_id}", "DELETE", "api-keys revoke", "oxygen_api_keys_revoke", "workspace", "Revoke a workspace API key; requires the caller's personal user session.", {}, [], mcpOnly),
@@ -13,6 +13,13 @@ export declare const FUTURE_SIGNUP_LIFECYCLE_PROJECTION_CONTRACT_VERSION: "futur
13
13
  export declare const FUTURE_SIGNUP_CRM_DESTINATION = "oxygen_company_crm";
14
14
  export declare const FUTURE_SIGNUP_ACTIVATION_COMMANDS: readonly ["agent create", "crm activity log", "crm assert", "crm object add-attr", "crm object create", "crm objects add-attr", "crm objects create", "crm relationships define", "crm relationships upsert", "knowledge page upsert", "publishing posts create", "sequences create", "tables create", "tables duplicate", "tables import-csv", "tables import-file", "tables import-staged", "tables import-url", "tables insert", "tables relate", "tables update", "tables upsert", "workflows apply"];
15
15
  export declare function isFutureSignupActivationCommand(command: string): boolean;
16
+ /**
17
+ * The browser resource routes (`/api/cli/tables/{table}/rows…`) report their own command
18
+ * names, and the web grid and record panel write through them. Each is the same creation as
19
+ * its flat twin in the set above, so it counts as that: in the first-record marker and in the
20
+ * staff KPI board's web activation.
21
+ */
22
+ export declare const FUTURE_SIGNUP_ACTIVATION_COMMAND_ALIASES: Readonly<Record<string, string>>;
16
23
  export declare function futureSignupJourneyId(clerkUserId: string): string;
17
24
  export declare function futureSignupFactId(clerkUserId: string): string;
18
25
  export declare function futureSignupOperationFactId(operationEventId: string): string;
@@ -42,6 +42,17 @@ const ACTIVATION_COMMAND_SET = new Set(FUTURE_SIGNUP_ACTIVATION_COMMANDS);
42
42
  export function isFutureSignupActivationCommand(command) {
43
43
  return ACTIVATION_COMMAND_SET.has(command.trim().toLowerCase());
44
44
  }
45
+ /**
46
+ * The browser resource routes (`/api/cli/tables/{table}/rows…`) report their own command
47
+ * names, and the web grid and record panel write through them. Each is the same creation as
48
+ * its flat twin in the set above, so it counts as that: in the first-record marker and in the
49
+ * staff KPI board's web activation.
50
+ */
51
+ export const FUTURE_SIGNUP_ACTIVATION_COMMAND_ALIASES = {
52
+ "tables rows insert": "tables insert",
53
+ "tables rows edit": "tables update",
54
+ "tables rows relationship-set": "tables relate",
55
+ };
45
56
  export function futureSignupJourneyId(clerkUserId) {
46
57
  return `future_signup:v1:clerk_user:${requiredId(clerkUserId, "clerkUserId")}`;
47
58
  }
@@ -41,3 +41,10 @@ export declare const KNOWLEDGE_STUB_MARKER = "Stub \u2014 fill me.";
41
41
  export declare const KNOWLEDGE_BOOTSTRAP_COMMAND = "oxygen knowledge bootstrap";
42
42
  export declare const KNOWLEDGE_BOOTSTRAP_AVAILABLE = true;
43
43
  export declare const RESERVED_KNOWLEDGE_FRONTMATTER_KEYS: readonly ["oxygen_page", "id", "slug", "type", "title", "status", "tags", "canonical", "summary", "revision", "updated_at", "web_url"];
44
+ /**
45
+ * A Knowledge folder is a skill when it holds the skill's entry file, named
46
+ * SKILL (the Agent Skills SKILL.md convention); its other files are the
47
+ * skill's supporting files. Shared by the program file picker and the reads
48
+ * that load a creator's program files.
49
+ */
50
+ export declare function isKnowledgeSkillEntryTitle(title: string): boolean;
@@ -159,3 +159,12 @@ export const RESERVED_KNOWLEDGE_FRONTMATTER_KEYS = [
159
159
  "updated_at",
160
160
  "web_url",
161
161
  ];
162
+ /**
163
+ * A Knowledge folder is a skill when it holds the skill's entry file, named
164
+ * SKILL (the Agent Skills SKILL.md convention); its other files are the
165
+ * skill's supporting files. Shared by the program file picker and the reads
166
+ * that load a creator's program files.
167
+ */
168
+ export function isKnowledgeSkillEntryTitle(title) {
169
+ return /^skill(\.md)?$/i.test(title.trim());
170
+ }
@@ -44,6 +44,13 @@ export declare const PRODUCT_EVENTS: {
44
44
  readonly FIRST_PLAY_STARTED: "first_play_started";
45
45
  readonly FIRST_PLAY_STEP_COMPLETED: "first_play_step_completed";
46
46
  readonly FIRST_PLAY_COMPLETED: "first_play_completed";
47
+ /**
48
+ * The getting-started checklist (2026-10-09): one event per workspace and step, the
49
+ * first time any surface's read sees it done, gated by a stamp on the organization
50
+ * (apps/web `lib/activation/getting-started.ts`). `step` is first_leads,
51
+ * first_sequence, first_account or first_launch.
52
+ */
53
+ readonly GETTING_STARTED_STEP_COMPLETED: "getting_started_step_completed";
47
54
  /**
48
55
  * Usage — what was ASKED for. `mcp_tool_called` used to sit here as the
49
56
  * second highest-volume event; it was REPLACED (not joined) by the reserved
@@ -44,6 +44,13 @@ export const PRODUCT_EVENTS = {
44
44
  FIRST_PLAY_STARTED: "first_play_started",
45
45
  FIRST_PLAY_STEP_COMPLETED: "first_play_step_completed",
46
46
  FIRST_PLAY_COMPLETED: "first_play_completed",
47
+ /**
48
+ * The getting-started checklist (2026-10-09): one event per workspace and step, the
49
+ * first time any surface's read sees it done, gated by a stamp on the organization
50
+ * (apps/web `lib/activation/getting-started.ts`). `step` is first_leads,
51
+ * first_sequence, first_account or first_launch.
52
+ */
53
+ GETTING_STARTED_STEP_COMPLETED: "getting_started_step_completed",
47
54
  /**
48
55
  * Usage — what was ASKED for. `mcp_tool_called` used to sit here as the
49
56
  * second highest-volume event; it was REPLACED (not joined) by the reserved
@@ -14,6 +14,13 @@ export declare const UGC_POSTING_TARGET_PERIODS: readonly ["week", "month", "tot
14
14
  * operators either trimmed it or left the program without one).
15
15
  */
16
16
  export declare const UGC_PROGRAM_BRIEF_MAX_CHARS = 4000;
17
+ /**
18
+ * A creator's live, read-only handle on one file a program shares:
19
+ * `ugc:<programId>:<page id or slug>`. Every surface that lists or opens a
20
+ * shared file builds and reads it here, so web, worker and agents agree.
21
+ */
22
+ export declare function ugcKnowledgeReference(programId: string, key: string): string;
23
+ export declare function isUgcKnowledgeReference(value: string): boolean;
17
24
  /** The program's target as its API shape, or null when none is set. */
18
25
  export declare function ugcPostingTarget(program: {
19
26
  postingTargetCount?: number | null | undefined;
@@ -25,6 +32,8 @@ export type UgcProgram = {
25
32
  productUrl: string;
26
33
  description: string;
27
34
  knowledgePageSlugs: string[];
35
+ /** Folders shared live with creators (skills included); absent before migration 0482. */
36
+ knowledgeFolderIds?: string[];
28
37
  peerEngagementEnabled?: boolean;
29
38
  peerEngagementVersion?: number;
30
39
  peerEngagementEffectiveAt?: Date | null;
@@ -6,6 +6,18 @@ export const UGC_POSTING_TARGET_PERIODS = ["week", "month", "total"];
6
6
  * operators either trimmed it or left the program without one).
7
7
  */
8
8
  export const UGC_PROGRAM_BRIEF_MAX_CHARS = 4000;
9
+ const UGC_KNOWLEDGE_REFERENCE_PREFIX = "ugc:";
10
+ /**
11
+ * A creator's live, read-only handle on one file a program shares:
12
+ * `ugc:<programId>:<page id or slug>`. Every surface that lists or opens a
13
+ * shared file builds and reads it here, so web, worker and agents agree.
14
+ */
15
+ export function ugcKnowledgeReference(programId, key) {
16
+ return `${UGC_KNOWLEDGE_REFERENCE_PREFIX}${programId}:${key}`;
17
+ }
18
+ export function isUgcKnowledgeReference(value) {
19
+ return value.startsWith(UGC_KNOWLEDGE_REFERENCE_PREFIX);
20
+ }
9
21
  /** The program's target as its API shape, or null when none is set. */
10
22
  export function ugcPostingTarget(program) {
11
23
  return program.postingTargetCount && program.postingTargetPeriod
@@ -1 +1 @@
1
- export declare const OXYGEN_BUILD_VERSION = "1.1013.15";
1
+ export declare const OXYGEN_BUILD_VERSION = "1.1013.27";
@@ -1,2 +1,2 @@
1
1
  // GENERATED by scripts/ci/version-stamp.mjs from VERSION + git history. Do not edit; do not commit.
2
- export const OXYGEN_BUILD_VERSION = "1.1013.15";
2
+ export const OXYGEN_BUILD_VERSION = "1.1013.27";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxygen-agent/cli",
3
- "version": "1.1013.15",
3
+ "version": "1.1013.27",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",