@fulldivevr/workcord-cli 1.2.1 → 1.6.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.
Files changed (40) hide show
  1. package/README.md +75 -19
  2. package/dist/cli.js +7 -1
  3. package/dist/client.js +8 -1
  4. package/dist/commands/agent-skills.js +127 -0
  5. package/dist/commands/agent.js +191 -0
  6. package/dist/commands/custom-agents.js +3 -3
  7. package/dist/commands/hermes.js +12 -7
  8. package/dist/commands/messages.js +150 -4
  9. package/dist/commands/reflections.js +96 -0
  10. package/dist/commands/rooms.js +7 -3
  11. package/dist/generated/commands/agent-feedback-admin.js +69 -0
  12. package/dist/generated/commands/ai.js +31 -0
  13. package/dist/generated/commands/call-recordings.js +119 -0
  14. package/dist/generated/commands/contact-match.js +20 -1
  15. package/dist/generated/commands/credit-packs.js +112 -0
  16. package/dist/generated/commands/custom-agents.js +483 -1
  17. package/dist/generated/commands/desktop-releases.js +2 -2
  18. package/dist/generated/commands/edge-sizecheck.js +25 -0
  19. package/dist/generated/commands/feed.js +6 -0
  20. package/dist/generated/commands/interactive-events.js +47 -0
  21. package/dist/generated/commands/internal.js +205 -0
  22. package/dist/generated/commands/meetings.js +12 -0
  23. package/dist/generated/commands/messages.js +30 -0
  24. package/dist/generated/commands/my-feedback.js +18 -0
  25. package/dist/generated/commands/pinned-messages.js +6 -0
  26. package/dist/generated/commands/proxy-nodes.js +83 -0
  27. package/dist/generated/commands/push.js +20 -0
  28. package/dist/generated/commands/reviews.js +96 -0
  29. package/dist/generated/commands/room-agents.js +243 -1
  30. package/dist/generated/commands/room-invites.js +12 -0
  31. package/dist/generated/commands/rooms.js +79 -1
  32. package/dist/generated/commands/search.js +1 -1
  33. package/dist/generated/commands/shadow-dispatch-push.js +20 -0
  34. package/dist/generated/commands/shadow-reflections.js +111 -0
  35. package/dist/generated/index.js +22 -0
  36. package/dist/hermes-guards.js +1 -1
  37. package/dist/http.js +6 -2
  38. package/dist/room-types.js +10 -0
  39. package/package.json +2 -2
  40. package/dist/generated/commands/health.js +0 -29
@@ -1,24 +1,29 @@
1
1
  import { register as register_activity } from "./commands/activity.js";
2
+ import { register as register_agent_feedback_admin } from "./commands/agent-feedback-admin.js";
2
3
  import { register as register_ai } from "./commands/ai.js";
3
4
  import { register as register_ambassador } from "./commands/ambassador.js";
4
5
  import { register as register_apple_iap } from "./commands/apple-iap.js";
5
6
  import { register as register_attribution } from "./commands/attribution.js";
6
7
  import { register as register_auth } from "./commands/auth.js";
8
+ import { register as register_call_recordings } from "./commands/call-recordings.js";
7
9
  import { register as register_challenges } from "./commands/challenges.js";
8
10
  import { register as register_clips } from "./commands/clips.js";
9
11
  import { register as register_contact_match } from "./commands/contact-match.js";
10
12
  import { register as register_content_crawler } from "./commands/content-crawler.js";
13
+ import { register as register_credit_packs } from "./commands/credit-packs.js";
11
14
  import { register as register_custom_agents } from "./commands/custom-agents.js";
12
15
  import { register as register_desktop_releases } from "./commands/desktop-releases.js";
13
16
  import { register as register_discover } from "./commands/discover.js";
14
17
  import { register as register_dm } from "./commands/dm.js";
15
18
  import { register as register_drafts } from "./commands/drafts.js";
19
+ import { register as register_edge_sizecheck } from "./commands/edge-sizecheck.js";
16
20
  import { register as register_embed } from "./commands/embed.js";
17
21
  import { register as register_explore } from "./commands/explore.js";
18
22
  import { register as register_feed } from "./commands/feed.js";
19
23
  import { register as register_feedback } from "./commands/feedback.js";
20
24
  import { register as register_gamification } from "./commands/gamification.js";
21
25
  import { register as register_google_play_iap } from "./commands/google-play-iap.js";
26
+ import { register as register_interactive_events } from "./commands/interactive-events.js";
22
27
  import { register as register_internal } from "./commands/internal.js";
23
28
  import { register as register_interview } from "./commands/interview.js";
24
29
  import { register as register_invite_redirect } from "./commands/invite-redirect.js";
@@ -29,6 +34,7 @@ import { register as register_live_kit_webhook } from "./commands/live-kit-webho
29
34
  import { register as register_meetings } from "./commands/meetings.js";
30
35
  import { register as register_message_folders } from "./commands/message-folders.js";
31
36
  import { register as register_messages } from "./commands/messages.js";
37
+ import { register as register_my_feedback } from "./commands/my-feedback.js";
32
38
  import { register as register_one_emulator } from "./commands/one-emulator.js";
33
39
  import { register as register_pdf_export } from "./commands/pdf-export.js";
34
40
  import { register as register_pin_folders } from "./commands/pin-folders.js";
@@ -36,9 +42,12 @@ import { register as register_pinned_messages } from "./commands/pinned-messages
36
42
  import { register as register_polls } from "./commands/polls.js";
37
43
  import { register as register_premium_feeds } from "./commands/premium-feeds.js";
38
44
  import { register as register_processors } from "./commands/processors.js";
45
+ import { register as register_proxy_nodes } from "./commands/proxy-nodes.js";
46
+ import { register as register_push } from "./commands/push.js";
39
47
  import { register as register_questions } from "./commands/questions.js";
40
48
  import { register as register_referrals } from "./commands/referrals.js";
41
49
  import { register as register_reports } from "./commands/reports.js";
50
+ import { register as register_reviews } from "./commands/reviews.js";
42
51
  import { register as register_room_a2_a } from "./commands/room-a2-a.js";
43
52
  import { register as register_room_agents } from "./commands/room-agents.js";
44
53
  import { register as register_room_call } from "./commands/room-call.js";
@@ -50,7 +59,9 @@ import { register as register_saved_messages } from "./commands/saved-messages.j
50
59
  import { register as register_saved_stories } from "./commands/saved-stories.js";
51
60
  import { register as register_search } from "./commands/search.js";
52
61
  import { register as register_shadow } from "./commands/shadow.js";
62
+ import { register as register_shadow_dispatch_push } from "./commands/shadow-dispatch-push.js";
53
63
  import { register as register_shadow_home_agent } from "./commands/shadow-home-agent.js";
64
+ import { register as register_shadow_reflections } from "./commands/shadow-reflections.js";
54
65
  import { register as register_share } from "./commands/share.js";
55
66
  import { register as register_share_cards } from "./commands/share-cards.js";
56
67
  import { register as register_sponsors } from "./commands/sponsors.js";
@@ -65,26 +76,31 @@ import { register as register_well_known } from "./commands/well-known.js";
65
76
  import { register as register_wrapped } from "./commands/wrapped.js";
66
77
  export function registerAll(program) {
67
78
  register_activity(program);
79
+ register_agent_feedback_admin(program);
68
80
  register_ai(program);
69
81
  register_ambassador(program);
70
82
  register_apple_iap(program);
71
83
  register_attribution(program);
72
84
  register_auth(program);
85
+ register_call_recordings(program);
73
86
  register_challenges(program);
74
87
  register_clips(program);
75
88
  register_contact_match(program);
76
89
  register_content_crawler(program);
90
+ register_credit_packs(program);
77
91
  register_custom_agents(program);
78
92
  register_desktop_releases(program);
79
93
  register_discover(program);
80
94
  register_dm(program);
81
95
  register_drafts(program);
96
+ register_edge_sizecheck(program);
82
97
  register_embed(program);
83
98
  register_explore(program);
84
99
  register_feed(program);
85
100
  register_feedback(program);
86
101
  register_gamification(program);
87
102
  register_google_play_iap(program);
103
+ register_interactive_events(program);
88
104
  register_internal(program);
89
105
  register_interview(program);
90
106
  register_invite_redirect(program);
@@ -95,6 +111,7 @@ export function registerAll(program) {
95
111
  register_meetings(program);
96
112
  register_message_folders(program);
97
113
  register_messages(program);
114
+ register_my_feedback(program);
98
115
  register_one_emulator(program);
99
116
  register_pdf_export(program);
100
117
  register_pin_folders(program);
@@ -102,9 +119,12 @@ export function registerAll(program) {
102
119
  register_polls(program);
103
120
  register_premium_feeds(program);
104
121
  register_processors(program);
122
+ register_proxy_nodes(program);
123
+ register_push(program);
105
124
  register_questions(program);
106
125
  register_referrals(program);
107
126
  register_reports(program);
127
+ register_reviews(program);
108
128
  register_room_a2_a(program);
109
129
  register_room_agents(program);
110
130
  register_room_call(program);
@@ -116,7 +136,9 @@ export function registerAll(program) {
116
136
  register_saved_stories(program);
117
137
  register_search(program);
118
138
  register_shadow(program);
139
+ register_shadow_dispatch_push(program);
119
140
  register_shadow_home_agent(program);
141
+ register_shadow_reflections(program);
120
142
  register_share(program);
121
143
  register_share_cards(program);
122
144
  register_sponsors(program);
@@ -51,7 +51,7 @@ export function assertArchiveSize(bytes, path) {
51
51
  }
52
52
  export function ownershipError(kind, namespaceId, tenantId, body) {
53
53
  const who = tenantId || "this tenant";
54
- const err = new Error(`Hermes Hub refused this as ${who}: it does not own the ${kind} namespace "${namespaceId}". A WorkCord agent tenant is provisioned as a consumer and owns no ${kind} namespace. Ownership is admin-assigned only (PUT /v1/${kind}s/${namespaceId}/owner) and there is no self-service bootstrap — ask a hub operator to assign "${namespaceId}" to ${who}.`);
54
+ const err = new Error(`Hermes Hub refused this as ${who}: it does not own the ${kind} namespace "${namespaceId}". For normal customization, ask the owning agent with workcord agent chat; it can create or update resources in its own namespace. Direct Hermes publishing is advanced recovery and requires an owned namespace.`);
55
55
  err.status = 403;
56
56
  err.body = body;
57
57
  return err;
package/dist/http.js CHANGED
@@ -21,10 +21,14 @@ const RETRY_STATUSES = new Set([408, 429, 502, 503, 504]);
21
21
  export async function fetchWithRetry(build) {
22
22
  let lastErr;
23
23
  for (let attempt = 0; attempt <= RETRY_MAX; attempt++) {
24
+ let retryable = false;
24
25
  try {
25
26
  const { url, init } = build();
27
+ const method = String(init.method || "GET").toUpperCase();
28
+ const headers = new Headers(init.headers);
29
+ retryable = method === "GET" || method === "HEAD" || headers.has("idempotency-key");
26
30
  const res = await fetch(url, init);
27
- if (!RETRY_STATUSES.has(res.status))
31
+ if (!retryable || !RETRY_STATUSES.has(res.status))
28
32
  return res;
29
33
  lastErr = res;
30
34
  if (attempt >= RETRY_MAX)
@@ -32,7 +36,7 @@ export async function fetchWithRetry(build) {
32
36
  }
33
37
  catch (err) {
34
38
  lastErr = err;
35
- if (attempt >= RETRY_MAX)
39
+ if (!retryable || attempt >= RETRY_MAX)
36
40
  throw err;
37
41
  }
38
42
  const delay = RETRY_BACKOFF_MS * Math.pow(3, attempt);
@@ -0,0 +1,10 @@
1
+ export const ROOM_TYPES = ["verifiedIntelligence", "broadcastChannel", "room", "direct", "webApp"];
2
+ export function validateRoomCreateBody(body) {
3
+ if (!body || typeof body !== "object" || Array.isArray(body) || !("type" in body))
4
+ return;
5
+ const type = body.type;
6
+ if (type === undefined || ROOM_TYPES.some((allowed) => allowed === type))
7
+ return;
8
+ throw new Error(`Invalid room type ${JSON.stringify(type)}. Use one of: ${ROOM_TYPES.join(", ")}. For a normal private room, use verifiedIntelligence.`);
9
+ }
10
+ //# sourceMappingURL=room-types.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fulldivevr/workcord-cli",
3
- "version": "1.2.1",
4
- "description": "CLI for the WorkCord API. One invocation = one user action.",
3
+ "version": "1.6.0",
4
+ "description": "Agent-first CLI using persistent Hermes tenant chat, with advanced API diagnostics.",
5
5
  "private": false,
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -1,29 +0,0 @@
1
- import { call } from "../../client.js";
2
- import { actingUserId } from "../../auth.js";
3
- import { getOrCreateGroup, hasSubcommand } from "../_helpers.js";
4
- export function register(program) {
5
- const group = getOrCreateGroup(program, "health", "Health operations");
6
- if (!hasSubcommand(group, "health")) {
7
- group
8
- .command("health")
9
- .description("GET /api/health")
10
- .action(async (opts) => {
11
- const as = actingUserId(program);
12
- const path = `/api/health`;
13
- const data = await call({ method: "GET", path, asUserId: as });
14
- process.stdout.write(JSON.stringify(data) + "\n");
15
- });
16
- }
17
- if (!hasSubcommand(group, "hello")) {
18
- group
19
- .command("hello")
20
- .description("GET /api/hello")
21
- .action(async (opts) => {
22
- const as = actingUserId(program);
23
- const path = `/api/hello`;
24
- const data = await call({ method: "GET", path, asUserId: as });
25
- process.stdout.write(JSON.stringify(data) + "\n");
26
- });
27
- }
28
- }
29
- //# sourceMappingURL=health.js.map