@signaliz/cli 1.0.92 → 1.0.94

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.
Files changed (3) hide show
  1. package/README.md +13 -0
  2. package/dist/bin.js +89 -17
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -223,6 +223,13 @@ signaliz campaign-os audience-preview --client-id <uuid> \
223
223
  --audience-id <uuid> --idempotency-key launch-preview-v1 --json
224
224
  signaliz campaign-os compile --client-id <uuid> --campaign-id <uuid> \
225
225
  --providers all --json
226
+ signaliz campaign-os alpha-materialize-preflight --client-id <uuid> \
227
+ --campaign-id <uuid> --audience-run-id <uuid> --validation-run-id <uuid> \
228
+ --idempotency-key launch-alpha-materialization-v1 --json
229
+ signaliz campaign-os alpha-materialize --materialization-run-id <uuid> \
230
+ --approval-hash sha256:<64-hex> --confirm-spend --json
231
+ signaliz campaign-os alpha-materialization-status \
232
+ --materialization-run-id <uuid> --json
226
233
  signaliz campaign-os request --client-id <uuid> --campaign-id <uuid> \
227
234
  --agent devin --action provider_activation --instructions "Prepare for review" \
228
235
  --preflight-inputs-file action-preflight.json \
@@ -245,3 +252,9 @@ activation, real-time arming, queueing, or sending; it does not execute them.
245
252
  non-secret provider and artifact identifiers. After a Signaliz superadmin
246
253
  approves that proposal, `prepare-preflight` appends or reads the immutable
247
254
  no-call continuation and reports missing inputs or unavailable adapters.
255
+
256
+ `alpha-materialize-preflight` records the exact campaign, Audience run,
257
+ validation receipt, coverage target, batches, and research ceiling without
258
+ spend. `alpha-materialize` requires the returned approval hash and
259
+ `--confirm-spend`; it authorizes only that bounded research. It never calls
260
+ Clay, creates an Audience, loads or activates a provider, queues, or sends.
package/dist/bin.js CHANGED
@@ -57,12 +57,12 @@ Product commands:
57
57
  signaliz builds status --run-id <uuid> [--limit 100]
58
58
  signaliz builds download --run-id <uuid> --out results.csv
59
59
  signaliz campaign-os clients [--status active] [--query signaliz] [--limit 100]
60
- signaliz campaign-os context --client-id <uuid> [--source-limit 50]
61
- signaliz campaign-os knowledge --query "cache first" [--client-id <uuid>] [--record-kind campaign_playbook] [--limit 15]
60
+ signaliz campaign-os context --client-id <uuid> [--knowledge-snapshot-id <uuid>] [--source-limit 50]
61
+ signaliz campaign-os knowledge --query "cache first" [--client-id <uuid>] [--knowledge-snapshot-id <uuid>] [--record-kind campaign_playbook] [--limit 15]
62
62
  signaliz campaign-os provider-runtime --client-id <uuid> --provider clay|instantly|smartlead|bison
63
63
  signaliz campaign-os build --client-id <uuid> --name "Campaign" --objective "Goal" --target-count 500 --idempotency-key <key>
64
64
  signaliz campaign-os build-status --build-run-id <uuid>
65
- signaliz campaign-os draft --client-id <uuid> --name "Campaign" --campaign-spec-file campaign-spec.json --idempotency-key <key> [--agent codex]
65
+ signaliz campaign-os draft --client-id <uuid> --name "Campaign" --campaign-spec-file campaign-spec.json --idempotency-key <key> [--knowledge-snapshot-id <uuid>] [--agent codex]
66
66
  signaliz campaign-os refine --client-id <uuid> --campaign-id <uuid> --expected-spec-version-id <uuid> --campaign-spec-file campaign-spec.json --change-reason "What changed" --idempotency-key <key> [--agent codex]
67
67
  signaliz campaign-os audience-draft --client-id <uuid> --name "Audience" --definition-file audience.json --entity-type people --audience-role campaign_segment --source-mode signaliz_owned --idempotency-key <key>
68
68
  signaliz campaign-os materialize-cache-audience --client-id <uuid> --audience-id <uuid> [--campaign-id <uuid>] --target-count <1-500> --idempotency-key <key>
@@ -70,11 +70,14 @@ Product commands:
70
70
  signaliz campaign-os audience-preview --client-id <uuid> --audience-id <uuid> --idempotency-key <key>
71
71
  signaliz campaign-os compile --client-id <uuid> --campaign-id <uuid> [--providers all]
72
72
  signaliz campaign-os alpha-plan --client-id <uuid> --client-name "Velox" --offer-summary "..." --icp-summary "..." --idempotency-key <key>
73
- signaliz campaign-os alpha-discover --client-id <uuid> --client-name "Velox" --offer-summary "..." --icp-summary "..." --idempotency-key <key> --confirm-spend
73
+ signaliz campaign-os alpha-discover --client-id <uuid> --campaign-id <uuid> --client-name "Velox" --offer-summary "..." --icp-summary "..." --idempotency-key <key> --confirm-spend
74
74
  signaliz campaign-os alpha-status --alpha-run-id <uuid>
75
75
  signaliz campaign-os alpha-validate --client-id <uuid> --campaign-id <uuid> --alpha-run-id <uuid> --candidate-index 0 --sample-file sample.json --idempotency-key <key> --confirm-spend
76
76
  signaliz campaign-os alpha-validation-status --validation-run-id <uuid>
77
77
  signaliz campaign-os alpha-apply --validation-run-id <uuid>
78
+ signaliz campaign-os alpha-materialize-preflight --client-id <uuid> --campaign-id <uuid> --audience-run-id <uuid> --validation-run-id <uuid> --idempotency-key <key>
79
+ signaliz campaign-os alpha-materialize --materialization-run-id <uuid> --approval-hash sha256:<64-hex> --confirm-spend
80
+ signaliz campaign-os alpha-materialization-status --materialization-run-id <uuid>
78
81
  signaliz campaign-os connections --client-id <uuid>
79
82
  signaliz campaign-os source-binding --client-id <uuid> --binding-id <uuid> --name "CRM list" --source-kind audience --selector-file selector.json --idempotency-key <key>
80
83
  signaliz campaign-os source-preflight --client-id <uuid> --source-binding-id <uuid> --idempotency-key <key> [--max-records 25]
@@ -2145,7 +2148,11 @@ async function campaignOs(args) {
2145
2148
  if (!clientId) throw new CliInputError("signaliz campaign-os context requires --client-id <uuid>");
2146
2149
  const sourceLimit = numberFlag("source-limit") ?? 50;
2147
2150
  requireIntegerInRange(sourceLimit, "--source-limit", 1, 100);
2148
- const result = await client.getCampaignOsClientContext(clientId, sourceLimit);
2151
+ const result = await client.getCampaignOsClientContext(
2152
+ clientId,
2153
+ sourceLimit,
2154
+ flag("knowledge-snapshot-id")
2155
+ );
2149
2156
  output(result, () => {
2150
2157
  const selected = result.client;
2151
2158
  process.stdout.write(`${String(selected.name || clientId)} \xB7 Brain v${String(selected.brain_version || "?")}
@@ -2163,15 +2170,7 @@ async function campaignOs(args) {
2163
2170
  }
2164
2171
  const limit = numberFlag("limit") ?? 15;
2165
2172
  requireIntegerInRange(limit, "--limit", 1, 50);
2166
- const allowedKinds = [
2167
- "client_brain",
2168
- "campaign_register",
2169
- "campaign_learning",
2170
- "campaign_methodology",
2171
- "campaign_genome",
2172
- "campaign_playbook",
2173
- "knowledge_inventory"
2174
- ];
2173
+ const allowedKinds = import_sdk.CAMPAIGN_OS_KNOWLEDGE_RECORD_KINDS;
2175
2174
  const recordKind = flag("record-kind");
2176
2175
  if (recordKind && !allowedKinds.includes(recordKind)) {
2177
2176
  throw new CliInputError(`--record-kind must be one of: ${allowedKinds.join(", ")}`);
@@ -2179,6 +2178,7 @@ async function campaignOs(args) {
2179
2178
  const result = await client.searchCampaignOsKnowledge({
2180
2179
  query,
2181
2180
  clientId: flag("client-id"),
2181
+ knowledgeSnapshotId: flag("knowledge-snapshot-id"),
2182
2182
  recordKind,
2183
2183
  limit
2184
2184
  });
@@ -2291,6 +2291,7 @@ async function campaignOs(args) {
2291
2291
  targetCount,
2292
2292
  audienceBindingId: flag("audience-binding-id"),
2293
2293
  audienceDefinitionId: flag("audience-definition-id"),
2294
+ knowledgeSnapshotId: flag("knowledge-snapshot-id"),
2294
2295
  campaignSpec,
2295
2296
  agentVendor: campaignOsAgentFlag(),
2296
2297
  idempotencyKey
@@ -2467,6 +2468,7 @@ async function campaignOs(args) {
2467
2468
  }
2468
2469
  if (action === "alpha-plan" || action === "alpha-discover") {
2469
2470
  const clientId = flag("client-id");
2471
+ const campaignId = flag("campaign-id");
2470
2472
  const clientName = flag("client-name");
2471
2473
  const offerSummary = flag("offer-summary");
2472
2474
  const icpSummary = flag("icp-summary");
@@ -2476,7 +2478,7 @@ async function campaignOs(args) {
2476
2478
  }
2477
2479
  const params = {
2478
2480
  clientId,
2479
- campaignId: flag("campaign-id"),
2481
+ campaignId,
2480
2482
  clientName,
2481
2483
  offerSummary,
2482
2484
  icpSummary,
@@ -2496,7 +2498,13 @@ async function campaignOs(args) {
2496
2498
  if (!hasFlag("confirm-spend")) {
2497
2499
  throw new CliInputError("signaliz campaign-os alpha-discover requires --confirm-spend for the $0.10 authorization ceiling");
2498
2500
  }
2499
- const result = await client.startCampaignOsAlphaDiscovery(params);
2501
+ if (!campaignId) {
2502
+ throw new CliInputError("signaliz campaign-os alpha-discover requires --campaign-id for one saved immutable CampaignSpec");
2503
+ }
2504
+ const result = await client.startCampaignOsAlphaDiscovery({
2505
+ ...params,
2506
+ campaignId
2507
+ });
2500
2508
  output(result, () => {
2501
2509
  const run = record(result.run);
2502
2510
  process.stdout.write(`Signaliz Alpha discovery started: ${String(run.id || "")} \xB7 ${String(run.status || "queued")} \xB7 authorized ceiling $0.10
@@ -2580,6 +2588,70 @@ async function campaignOs(args) {
2580
2588
  });
2581
2589
  return;
2582
2590
  }
2591
+ if (action === "alpha-materialize-preflight") {
2592
+ const clientId = flag("client-id");
2593
+ const campaignId = flag("campaign-id");
2594
+ const audienceRunId = flag("audience-run-id");
2595
+ const validationRunId = flag("validation-run-id");
2596
+ const idempotencyKey = flag("idempotency-key")?.trim();
2597
+ if (!clientId || !campaignId || !audienceRunId || !validationRunId || !idempotencyKey) {
2598
+ throw new CliInputError("signaliz campaign-os alpha-materialize-preflight requires --client-id, --campaign-id, --audience-run-id, --validation-run-id, and --idempotency-key");
2599
+ }
2600
+ const result = await client.preflightCampaignOsAlphaMaterialization({
2601
+ clientId,
2602
+ campaignId,
2603
+ audienceRunId,
2604
+ validationRunId,
2605
+ idempotencyKey
2606
+ });
2607
+ output(result, () => {
2608
+ const run = record(result.run);
2609
+ process.stdout.write(`Signaliz Alpha materialization preflight: ${String(run.id || "")} \xB7 ${String(run.selected_count || 0)} membership(s) \xB7 ${String(run.batch_count || 0)} batch(es)
2610
+ `);
2611
+ process.stdout.write(`Research ceiling: $${String(run.max_cost_usd || "0.00")} \xB7 no research, Clay, audience creation, provider load, activation, queue, or send occurred.
2612
+ `);
2613
+ });
2614
+ return;
2615
+ }
2616
+ if (action === "alpha-materialize") {
2617
+ const materializationRunId = flag("materialization-run-id");
2618
+ const approvalHash = flag("approval-hash");
2619
+ if (!materializationRunId || !approvalHash) {
2620
+ throw new CliInputError("signaliz campaign-os alpha-materialize requires --materialization-run-id and --approval-hash");
2621
+ }
2622
+ if (!/^sha256:[0-9a-f]{64}$/.test(approvalHash)) {
2623
+ throw new CliInputError("--approval-hash must be the exact sha256:<64-hex> preflight hash");
2624
+ }
2625
+ if (!hasFlag("confirm-spend")) {
2626
+ throw new CliInputError("signaliz campaign-os alpha-materialize requires --confirm-spend for the approval-bound research ceiling");
2627
+ }
2628
+ const result = await client.startCampaignOsAlphaMaterialization({
2629
+ materializationRunId,
2630
+ approvalHash,
2631
+ confirmSpend: true
2632
+ });
2633
+ output(result, () => {
2634
+ const run = record(result.run);
2635
+ process.stdout.write(`Signaliz Alpha materialization started: ${String(run.id || materializationRunId)} \xB7 ${String(run.status || "queued")}
2636
+ `);
2637
+ process.stdout.write("Only preflight-bounded research spend is authorized. Clay, audience creation, provider load, activation, queue, and send remain locked.\n");
2638
+ });
2639
+ return;
2640
+ }
2641
+ if (action === "alpha-materialization-status") {
2642
+ const materializationRunId = flag("materialization-run-id");
2643
+ if (!materializationRunId) {
2644
+ throw new CliInputError("signaliz campaign-os alpha-materialization-status requires --materialization-run-id <uuid>");
2645
+ }
2646
+ const result = await client.getCampaignOsAlphaMaterialization(materializationRunId);
2647
+ output(result, () => {
2648
+ const run = record(result.run);
2649
+ process.stdout.write(`Signaliz Alpha materialization: ${String(run.status || "unknown")} \xB7 ${String(run.processed_entity_count || 0)}/${String(run.entity_count || 0)} entities \xB7 ${String(run.covered_membership_count || 0)}/${String(run.selected_count || 0)} memberships
2650
+ `);
2651
+ process.stdout.write("Status read only \xB7 no new research, spend, Clay, provider load, activation, queue, or send.\n");
2652
+ });
2653
+ return;
2654
+ }
2583
2655
  if (action === "connections") {
2584
2656
  const clientId = flag("client-id");
2585
2657
  if (!clientId) throw new CliInputError("signaliz campaign-os connections requires --client-id <uuid>");
@@ -2750,7 +2822,7 @@ async function campaignOs(args) {
2750
2822
  });
2751
2823
  return;
2752
2824
  }
2753
- throw new CliInputError("Usage: signaliz campaign-os clients|context|knowledge|provider-runtime|build|build-status|draft|refine|audience-draft|materialize-cache-audience|audience-schedule|audience-preview|compile|alpha-plan|alpha-discover|alpha-status|alpha-validate|alpha-validation-status|alpha-apply|connections|source-binding|source-preflight|request|prepare-preflight|receipts");
2825
+ throw new CliInputError("Usage: signaliz campaign-os clients|context|knowledge|provider-runtime|build|build-status|draft|refine|audience-draft|materialize-cache-audience|audience-schedule|audience-preview|compile|alpha-plan|alpha-discover|alpha-status|alpha-validate|alpha-validation-status|alpha-apply|alpha-materialize-preflight|alpha-materialize|alpha-materialization-status|connections|source-binding|source-preflight|request|prepare-preflight|receipts");
2754
2826
  }
2755
2827
  async function main() {
2756
2828
  const [, , command, ...args] = process.argv;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signaliz/cli",
3
- "version": "1.0.92",
3
+ "version": "1.0.94",
4
4
  "description": "Signaliz CLI for Campaign OS, core products, Signal Awareness, Signaliz Flow, and reusable managed builds.",
5
5
  "bin": {
6
6
  "signaliz": "dist/bin.js"
@@ -30,7 +30,7 @@
30
30
  "node": ">=18"
31
31
  },
32
32
  "dependencies": {
33
- "@signaliz/sdk": "^1.0.96"
33
+ "@signaliz/sdk": "^1.0.98"
34
34
  },
35
35
  "devDependencies": {
36
36
  "tsup": "^8.0.0",