zilmate 1.7.2 → 1.7.5

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 (178) hide show
  1. package/.env.example +36 -36
  2. package/README.md +503 -503
  3. package/SDK.md +320 -320
  4. package/agent-docs.md +276 -276
  5. package/dist/agents/automation-planner.agent.d.ts.map +1 -1
  6. package/dist/agents/coding.agent.d.ts +18 -0
  7. package/dist/agents/coding.agent.d.ts.map +1 -1
  8. package/dist/agents/finance.agent.d.ts +60 -0
  9. package/dist/agents/finance.agent.d.ts.map +1 -0
  10. package/dist/agents/finance.agent.js +30 -0
  11. package/dist/agents/finance.agent.js.map +1 -0
  12. package/dist/agents/manager.d.ts +94 -1
  13. package/dist/agents/manager.d.ts.map +1 -1
  14. package/dist/agents/manager.js +102 -36
  15. package/dist/agents/manager.js.map +1 -1
  16. package/dist/agents/swarm/engineering/qa.d.ts +3 -0
  17. package/dist/agents/swarm/engineering/qa.d.ts.map +1 -0
  18. package/dist/agents/swarm/engineering/qa.js +19 -0
  19. package/dist/agents/swarm/engineering/qa.js.map +1 -0
  20. package/dist/agents/swarm/growth/seo.d.ts +3 -0
  21. package/dist/agents/swarm/growth/seo.d.ts.map +1 -0
  22. package/dist/agents/swarm/growth/seo.js +19 -0
  23. package/dist/agents/swarm/growth/seo.js.map +1 -0
  24. package/dist/agents/swarm/main.d.ts +22 -0
  25. package/dist/agents/swarm/main.d.ts.map +1 -0
  26. package/dist/agents/swarm/main.js +65 -0
  27. package/dist/agents/swarm/main.js.map +1 -0
  28. package/dist/agents/swarm/operations/finance.d.ts +3 -0
  29. package/dist/agents/swarm/operations/finance.d.ts.map +1 -0
  30. package/dist/agents/swarm/operations/finance.js +19 -0
  31. package/dist/agents/swarm/operations/finance.js.map +1 -0
  32. package/dist/agents/swarm/registry.d.ts +4 -0
  33. package/dist/agents/swarm/registry.d.ts.map +1 -0
  34. package/dist/agents/swarm/registry.js +361 -0
  35. package/dist/agents/swarm/registry.js.map +1 -0
  36. package/dist/cli/composer.d.ts.map +1 -1
  37. package/dist/cli/composer.js +54 -4
  38. package/dist/cli/composer.js.map +1 -1
  39. package/dist/cli/doctor.d.ts.map +1 -1
  40. package/dist/cli/doctor.js +13 -0
  41. package/dist/cli/doctor.js.map +1 -1
  42. package/dist/cli/format.d.ts.map +1 -1
  43. package/dist/cli/format.js +46 -24
  44. package/dist/cli/format.js.map +1 -1
  45. package/dist/cli/interactive.d.ts.map +1 -1
  46. package/dist/cli/interactive.js +47 -3
  47. package/dist/cli/interactive.js.map +1 -1
  48. package/dist/cli/render.d.ts.map +1 -1
  49. package/dist/cli/render.js +18 -9
  50. package/dist/cli/render.js.map +1 -1
  51. package/dist/cli/setup.d.ts +1 -0
  52. package/dist/cli/setup.d.ts.map +1 -1
  53. package/dist/cli/setup.js +74 -2
  54. package/dist/cli/setup.js.map +1 -1
  55. package/dist/cli/swarm.d.ts +4 -0
  56. package/dist/cli/swarm.d.ts.map +1 -0
  57. package/dist/cli/swarm.js +21 -0
  58. package/dist/cli/swarm.js.map +1 -0
  59. package/dist/cli/theme.d.ts +9 -0
  60. package/dist/cli/theme.d.ts.map +1 -1
  61. package/dist/cli/theme.js +36 -0
  62. package/dist/cli/theme.js.map +1 -1
  63. package/dist/cli/tunnel.d.ts.map +1 -1
  64. package/dist/cli/tunnel.js +2 -1
  65. package/dist/cli/tunnel.js.map +1 -1
  66. package/dist/cli/voice.js +11 -11
  67. package/dist/cli/welcome.d.ts.map +1 -1
  68. package/dist/cli/welcome.js +2 -0
  69. package/dist/cli/welcome.js.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/jobs/anomaly.js +5 -5
  73. package/dist/memory/heal.js +43 -43
  74. package/dist/observability/doctor.d.ts +3 -0
  75. package/dist/observability/doctor.d.ts.map +1 -0
  76. package/dist/observability/doctor.js +33 -0
  77. package/dist/observability/doctor.js.map +1 -0
  78. package/dist/observability/usage.d.ts +13 -0
  79. package/dist/observability/usage.d.ts.map +1 -0
  80. package/dist/observability/usage.js +34 -0
  81. package/dist/observability/usage.js.map +1 -0
  82. package/dist/runtime/confirm.d.ts.map +1 -1
  83. package/dist/runtime/confirm.js +12 -2
  84. package/dist/runtime/confirm.js.map +1 -1
  85. package/dist/runtime/prompts/builder.d.ts +11 -0
  86. package/dist/runtime/prompts/builder.d.ts.map +1 -0
  87. package/dist/runtime/prompts/builder.js +29 -0
  88. package/dist/runtime/prompts/builder.js.map +1 -0
  89. package/dist/runtime/registry.d.ts +14 -0
  90. package/dist/runtime/registry.d.ts.map +1 -0
  91. package/dist/runtime/registry.js +39 -0
  92. package/dist/runtime/registry.js.map +1 -0
  93. package/dist/runtime/storage/interface.d.ts +16 -0
  94. package/dist/runtime/storage/interface.d.ts.map +1 -0
  95. package/dist/runtime/storage/interface.js +19 -0
  96. package/dist/runtime/storage/interface.js.map +1 -0
  97. package/dist/runtime/storage/local.d.ts +12 -0
  98. package/dist/runtime/storage/local.d.ts.map +1 -0
  99. package/dist/runtime/storage/local.js +48 -0
  100. package/dist/runtime/storage/local.js.map +1 -0
  101. package/dist/runtime/storage/redis.d.ts +11 -0
  102. package/dist/runtime/storage/redis.d.ts.map +1 -0
  103. package/dist/runtime/storage/redis.js +21 -0
  104. package/dist/runtime/storage/redis.js.map +1 -0
  105. package/dist/runtime/swarm/reports.d.ts +9 -0
  106. package/dist/runtime/swarm/reports.d.ts.map +1 -0
  107. package/dist/runtime/swarm/reports.js +43 -0
  108. package/dist/runtime/swarm/reports.js.map +1 -0
  109. package/dist/runtime/swarm.d.ts +37 -0
  110. package/dist/runtime/swarm.d.ts.map +1 -0
  111. package/dist/runtime/swarm.js +90 -0
  112. package/dist/runtime/swarm.js.map +1 -0
  113. package/dist/runtime/telemetry.d.ts +15 -0
  114. package/dist/runtime/telemetry.d.ts.map +1 -0
  115. package/dist/runtime/telemetry.js +25 -0
  116. package/dist/runtime/telemetry.js.map +1 -0
  117. package/dist/runtime/tool-utils.d.ts +12 -0
  118. package/dist/runtime/tool-utils.d.ts.map +1 -0
  119. package/dist/runtime/tool-utils.js +31 -0
  120. package/dist/runtime/tool-utils.js.map +1 -0
  121. package/dist/tools/browser.tool.d.ts +54 -0
  122. package/dist/tools/browser.tool.d.ts.map +1 -0
  123. package/dist/tools/browser.tool.js +193 -0
  124. package/dist/tools/browser.tool.js.map +1 -0
  125. package/dist/tools/business-apps.tool.d.ts +18 -0
  126. package/dist/tools/business-apps.tool.d.ts.map +1 -0
  127. package/dist/tools/business-apps.tool.js +43 -0
  128. package/dist/tools/business-apps.tool.js.map +1 -0
  129. package/dist/tools/computer-use.tool.js +66 -66
  130. package/dist/tools/cross-app-ledger.tool.d.ts +7 -0
  131. package/dist/tools/cross-app-ledger.tool.d.ts.map +1 -0
  132. package/dist/tools/cross-app-ledger.tool.js +70 -0
  133. package/dist/tools/cross-app-ledger.tool.js.map +1 -0
  134. package/dist/tools/desktop.tool.js +10 -10
  135. package/dist/tools/documents.tool.js +5 -5
  136. package/dist/tools/finance.tool.d.ts +18 -0
  137. package/dist/tools/finance.tool.d.ts.map +1 -0
  138. package/dist/tools/finance.tool.js +88 -0
  139. package/dist/tools/finance.tool.js.map +1 -0
  140. package/dist/tools/image-intelligence.tool.d.ts +12 -0
  141. package/dist/tools/image-intelligence.tool.d.ts.map +1 -0
  142. package/dist/tools/image-intelligence.tool.js +62 -0
  143. package/dist/tools/image-intelligence.tool.js.map +1 -0
  144. package/dist/tools/notify.tool.js +8 -8
  145. package/dist/tools/osint-install.tool.js +8 -8
  146. package/dist/tools/pentest-install.tool.js +6 -6
  147. package/dist/tools/setup-assistant.tool.d.ts +1 -1
  148. package/dist/tools/shell.tool.d.ts +18 -0
  149. package/dist/tools/shell.tool.d.ts.map +1 -1
  150. package/dist/tools/shell.tool.js +34 -0
  151. package/dist/tools/shell.tool.js.map +1 -1
  152. package/dist/tools/triggers.tool.d.ts.map +1 -1
  153. package/dist/tools/web-intelligence.tool.d.ts +12 -0
  154. package/dist/tools/web-intelligence.tool.d.ts.map +1 -0
  155. package/dist/tools/web-intelligence.tool.js +27 -0
  156. package/dist/tools/web-intelligence.tool.js.map +1 -0
  157. package/dist/workspace/init.js +18 -18
  158. package/dist/workspace/output-paths.d.ts +1 -1
  159. package/dist/workspace/output-paths.d.ts.map +1 -1
  160. package/dist/workspace/output-paths.js +1 -0
  161. package/dist/workspace/output-paths.js.map +1 -1
  162. package/dist/workspace/paths.d.ts +1 -0
  163. package/dist/workspace/paths.d.ts.map +1 -1
  164. package/dist/workspace/paths.js +1 -0
  165. package/dist/workspace/paths.js.map +1 -1
  166. package/install.ps1 +62 -62
  167. package/package.json +106 -103
  168. package/scripts/postinstall.mjs +42 -42
  169. package/scripts/release-github.mjs +91 -91
  170. package/src/doc/README.md +49 -49
  171. package/src/doc/admin-tools-and-sms-campaigns.md +99 -99
  172. package/src/doc/escalation-checklist.md +97 -97
  173. package/src/doc/payments-and-payouts.md +82 -82
  174. package/src/doc/shift-lifecycle-and-disputes.md +95 -95
  175. package/src/doc/support-macros.md +40 -40
  176. package/src/doc/venue-support-playbook.md +145 -145
  177. package/src/doc/verification-and-trust.md +88 -88
  178. package/src/doc/worker-support-playbook.md +159 -159
@@ -1,42 +1,42 @@
1
- // postinstall.mjs
2
- import { mkdir, writeFile } from 'node:fs/promises';
3
- import { existsSync } from 'node:fs';
4
- import path from 'node:path';
5
- import { homedir } from 'node:os';
6
-
7
- const root = process.env.ZILMATE_WORKSPACE?.trim()
8
- ? path.resolve(process.env.ZILMATE_WORKSPACE.trim())
9
- : process.platform === 'win32' || process.platform === 'darwin'
10
- ? path.join(homedir(), 'Downloads', 'ZilMate')
11
- : path.join(homedir(), 'ZilMate');
12
-
13
- const dirs = [
14
- root,
15
- path.join(root, 'skills'),
16
- path.join(root, 'outputs', 'osint'),
17
- path.join(root, 'outputs', 'pentest'),
18
- path.join(root, 'outputs', 'images'),
19
- path.join(root, 'logs'),
20
- path.join(root, 'projects'),
21
- path.join(root, 'attachments'),
22
- path.join(root, 'backups'),
23
- path.join(root, 'config'),
24
- path.join(root, 'scratch'),
25
- path.join(root, 'data'),
26
- ];
27
-
28
- for (const dir of dirs) {
29
- await mkdir(dir, { recursive: true });
30
- }
31
-
32
- const notebook = path.join(root, 'notebook.md');
33
- if (!existsSync(notebook)) {
34
- await writeFile(notebook, '# ZilMate Notebook\n\n', 'utf8');
35
- }
36
-
37
- const memory = path.join(root, 'memory.json');
38
- if (!existsSync(memory)) {
39
- await writeFile(memory, '[]\n', 'utf8');
40
- }
41
-
42
- console.log(`ZilMate workspace ready at ${root}`);
1
+ // postinstall.mjs
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ import { homedir } from 'node:os';
6
+
7
+ const root = process.env.ZILMATE_WORKSPACE?.trim()
8
+ ? path.resolve(process.env.ZILMATE_WORKSPACE.trim())
9
+ : process.platform === 'win32' || process.platform === 'darwin'
10
+ ? path.join(homedir(), 'Downloads', 'ZilMate')
11
+ : path.join(homedir(), 'ZilMate');
12
+
13
+ const dirs = [
14
+ root,
15
+ path.join(root, 'skills'),
16
+ path.join(root, 'outputs', 'osint'),
17
+ path.join(root, 'outputs', 'pentest'),
18
+ path.join(root, 'outputs', 'images'),
19
+ path.join(root, 'logs'),
20
+ path.join(root, 'projects'),
21
+ path.join(root, 'attachments'),
22
+ path.join(root, 'backups'),
23
+ path.join(root, 'config'),
24
+ path.join(root, 'scratch'),
25
+ path.join(root, 'data'),
26
+ ];
27
+
28
+ for (const dir of dirs) {
29
+ await mkdir(dir, { recursive: true });
30
+ }
31
+
32
+ const notebook = path.join(root, 'notebook.md');
33
+ if (!existsSync(notebook)) {
34
+ await writeFile(notebook, '# ZilMate Notebook\n\n', 'utf8');
35
+ }
36
+
37
+ const memory = path.join(root, 'memory.json');
38
+ if (!existsSync(memory)) {
39
+ await writeFile(memory, '[]\n', 'utf8');
40
+ }
41
+
42
+ console.log(`ZilMate workspace ready at ${root}`);
@@ -1,91 +1,91 @@
1
- import { execFileSync } from 'node:child_process';
2
- import { readFileSync, writeFileSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { tmpdir } from 'node:os';
5
-
6
- const args = new Set(process.argv.slice(2));
7
- const dryRun = args.has('--dry-run');
8
- const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
9
- const version = pkg.version;
10
- const tag = `v${version}`;
11
- const title = `ZilMate ${tag}`;
12
-
13
- const notes = `# ${title}
14
-
15
- ZilMate ${tag} — Claude-inspired CLI, situational awareness, session handoffs, model picker, and SDK docs.
16
-
17
- ## Install
18
-
19
- \`\`\`powershell
20
- npm install -g zilmate@${version}
21
- zilmate setup
22
- zilmate doctor --live
23
- zilmate talk
24
- \`\`\`
25
-
26
- ## Highlights
27
-
28
- - **Beautiful CLI** — welcome card, tips, boxed composer input, Claude-style tool progress (\`● tool\` / \`└ Done\`).
29
- - **/model pick** — interactively choose manager, coding, image, and vision models; persisted to workspace \`config/models.json\`.
30
- - **Situational awareness** — \`getSituationBrief\` snapshots cwd, git, workspace, jobs, memory, models, and capabilities.
31
- - **Session continuity** — handoff save/load/generate so ZilMate resumes where you left off.
32
- - **Coding intelligence** — five tools: grep, working-tree review, symbol explain, scaffold, project checks; appBuilder + qaIntegration sub-coders.
33
- - **Image director** — \`enhanceImagePrompt\` + generation with art-direction presets.
34
- - **Cloudflare setup** — dedicated tunnel section in \`zilmate setup\`; \`zilmate jobs listen --tunnel\`.
35
- - **SDK.md** — Next.js App Router streaming route, subagents, jobs, voice, model selection.
36
-
37
- ## Quick Checks
38
-
39
- \`\`\`powershell
40
- zilmate talk
41
- /model pick
42
- zilmate jobs listen --tunnel
43
- \`\`\`
44
-
45
- ## npm
46
-
47
- Published package: \`zilmate@${version}\`
48
- `;
49
-
50
- const run = (command, commandArgs, options = {}) => {
51
- return execFileSync(command, commandArgs, {
52
- encoding: 'utf8',
53
- stdio: options.stdio ?? 'pipe',
54
- ...options,
55
- });
56
- };
57
-
58
- if (dryRun) {
59
- console.log(`Tag: ${tag}`);
60
- console.log(`Title: ${title}`);
61
- console.log('');
62
- console.log(notes);
63
- process.exit(0);
64
- }
65
-
66
- try {
67
- run('gh', ['auth', 'status'], { stdio: 'pipe' });
68
- } catch {
69
- console.error('GitHub CLI is not authenticated. Run: gh auth login -h github.com');
70
- process.exit(1);
71
- }
72
-
73
- const notesPath = join(tmpdir(), `zilmate-${version}-github-release.md`);
74
- writeFileSync(notesPath, notes);
75
-
76
- run(
77
- 'gh',
78
- [
79
- 'release',
80
- 'create',
81
- tag,
82
- '--repo',
83
- 'zester4/zilo-manager',
84
- '--title',
85
- title,
86
- '--notes-file',
87
- notesPath,
88
- '--latest',
89
- ],
90
- { stdio: 'inherit' },
91
- );
1
+ import { execFileSync } from 'node:child_process';
2
+ import { readFileSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { tmpdir } from 'node:os';
5
+
6
+ const args = new Set(process.argv.slice(2));
7
+ const dryRun = args.has('--dry-run');
8
+ const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
9
+ const version = pkg.version;
10
+ const tag = `v${version}`;
11
+ const title = `ZilMate ${tag}`;
12
+
13
+ const notes = `# ${title}
14
+
15
+ ZilMate ${tag} — Claude-inspired CLI, situational awareness, session handoffs, model picker, and SDK docs.
16
+
17
+ ## Install
18
+
19
+ \`\`\`powershell
20
+ npm install -g zilmate@${version}
21
+ zilmate setup
22
+ zilmate doctor --live
23
+ zilmate talk
24
+ \`\`\`
25
+
26
+ ## Highlights
27
+
28
+ - **Beautiful CLI** — welcome card, tips, boxed composer input, Claude-style tool progress (\`● tool\` / \`└ Done\`).
29
+ - **/model pick** — interactively choose manager, coding, image, and vision models; persisted to workspace \`config/models.json\`.
30
+ - **Situational awareness** — \`getSituationBrief\` snapshots cwd, git, workspace, jobs, memory, models, and capabilities.
31
+ - **Session continuity** — handoff save/load/generate so ZilMate resumes where you left off.
32
+ - **Coding intelligence** — five tools: grep, working-tree review, symbol explain, scaffold, project checks; appBuilder + qaIntegration sub-coders.
33
+ - **Image director** — \`enhanceImagePrompt\` + generation with art-direction presets.
34
+ - **Cloudflare setup** — dedicated tunnel section in \`zilmate setup\`; \`zilmate jobs listen --tunnel\`.
35
+ - **SDK.md** — Next.js App Router streaming route, subagents, jobs, voice, model selection.
36
+
37
+ ## Quick Checks
38
+
39
+ \`\`\`powershell
40
+ zilmate talk
41
+ /model pick
42
+ zilmate jobs listen --tunnel
43
+ \`\`\`
44
+
45
+ ## npm
46
+
47
+ Published package: \`zilmate@${version}\`
48
+ `;
49
+
50
+ const run = (command, commandArgs, options = {}) => {
51
+ return execFileSync(command, commandArgs, {
52
+ encoding: 'utf8',
53
+ stdio: options.stdio ?? 'pipe',
54
+ ...options,
55
+ });
56
+ };
57
+
58
+ if (dryRun) {
59
+ console.log(`Tag: ${tag}`);
60
+ console.log(`Title: ${title}`);
61
+ console.log('');
62
+ console.log(notes);
63
+ process.exit(0);
64
+ }
65
+
66
+ try {
67
+ run('gh', ['auth', 'status'], { stdio: 'pipe' });
68
+ } catch {
69
+ console.error('GitHub CLI is not authenticated. Run: gh auth login -h github.com');
70
+ process.exit(1);
71
+ }
72
+
73
+ const notesPath = join(tmpdir(), `zilmate-${version}-github-release.md`);
74
+ writeFileSync(notesPath, notes);
75
+
76
+ run(
77
+ 'gh',
78
+ [
79
+ 'release',
80
+ 'create',
81
+ tag,
82
+ '--repo',
83
+ 'zester4/zilo-manager',
84
+ '--title',
85
+ title,
86
+ '--notes-file',
87
+ notesPath,
88
+ '--latest',
89
+ ],
90
+ { stdio: 'inherit' },
91
+ );
package/src/doc/README.md CHANGED
@@ -1,49 +1,49 @@
1
- # ZiloShift Support Training Docs
2
-
3
- These docs train support staff to help workers and venues use ZiloShift confidently, safely, and consistently.
4
-
5
- ## Who These Docs Are For
6
-
7
- - Customer support agents helping workers and venues.
8
- - Operations staff reviewing verification, payments, disputes, and shift issues.
9
- - Admin users handling SMS campaigns, account questions, and escalation.
10
-
11
- ## Core Support Principles
12
-
13
- 1. Protect user safety and money first.
14
- 2. Verify the account, role, country, and shift before giving specific advice.
15
- 3. Do not ask users to share passwords, full card details, full ID numbers, or private API keys.
16
- 4. Explain next steps clearly and avoid blaming the user.
17
- 5. Escalate when money, identity, fraud, safety, legal, or platform bugs are involved.
18
-
19
- ## Platform Overview
20
-
21
- ZiloShift connects workers with venues that need shift cover. Workers create profiles, verify identity, add roles/certifications, browse shifts in their city, apply, get accepted, clock in/out, message venues, and receive payouts. Venues verify their business, connect payment/billing, post shifts, review applicants, accept workers, coordinate through messages, and confirm completion.
22
-
23
- ## Support Areas
24
-
25
- - [Worker Support Playbook](./worker-support-playbook.md)
26
- - [Venue Support Playbook](./venue-support-playbook.md)
27
- - [Verification And Trust](./verification-and-trust.md)
28
- - [Payments And Payouts](./payments-and-payouts.md)
29
- - [Shift Lifecycle And Disputes](./shift-lifecycle-and-disputes.md)
30
- - [Admin Tools And SMS Campaigns](./admin-tools-and-sms-campaigns.md)
31
- - [Support Macros](./support-macros.md)
32
- - [Escalation Checklist](./escalation-checklist.md)
33
-
34
- ## Quick Triage Questions
35
-
36
- Ask these before troubleshooting:
37
-
38
- 1. Are you a worker or venue?
39
- 2. What country are you in?
40
- 3. What email or phone number is on the account?
41
- 4. What page were you on when the issue happened?
42
- 5. If it is about a shift, what is the role, date, venue/company, and city?
43
- 6. If it is about payment, what provider was shown: Hubtel, Paystack, Razorpay, Stripe, or bank/card?
44
- 7. What exact error message did you see?
45
-
46
- ## Risk Warning
47
-
48
- Do not manually override identity verification, payment status, payout destination, worker reliability, cancellation penalties, or dispute outcomes unless an authorized admin or engineering escalation confirms it.
49
-
1
+ # ZiloShift Support Training Docs
2
+
3
+ These docs train support staff to help workers and venues use ZiloShift confidently, safely, and consistently.
4
+
5
+ ## Who These Docs Are For
6
+
7
+ - Customer support agents helping workers and venues.
8
+ - Operations staff reviewing verification, payments, disputes, and shift issues.
9
+ - Admin users handling SMS campaigns, account questions, and escalation.
10
+
11
+ ## Core Support Principles
12
+
13
+ 1. Protect user safety and money first.
14
+ 2. Verify the account, role, country, and shift before giving specific advice.
15
+ 3. Do not ask users to share passwords, full card details, full ID numbers, or private API keys.
16
+ 4. Explain next steps clearly and avoid blaming the user.
17
+ 5. Escalate when money, identity, fraud, safety, legal, or platform bugs are involved.
18
+
19
+ ## Platform Overview
20
+
21
+ ZiloShift connects workers with venues that need shift cover. Workers create profiles, verify identity, add roles/certifications, browse shifts in their city, apply, get accepted, clock in/out, message venues, and receive payouts. Venues verify their business, connect payment/billing, post shifts, review applicants, accept workers, coordinate through messages, and confirm completion.
22
+
23
+ ## Support Areas
24
+
25
+ - [Worker Support Playbook](./worker-support-playbook.md)
26
+ - [Venue Support Playbook](./venue-support-playbook.md)
27
+ - [Verification And Trust](./verification-and-trust.md)
28
+ - [Payments And Payouts](./payments-and-payouts.md)
29
+ - [Shift Lifecycle And Disputes](./shift-lifecycle-and-disputes.md)
30
+ - [Admin Tools And SMS Campaigns](./admin-tools-and-sms-campaigns.md)
31
+ - [Support Macros](./support-macros.md)
32
+ - [Escalation Checklist](./escalation-checklist.md)
33
+
34
+ ## Quick Triage Questions
35
+
36
+ Ask these before troubleshooting:
37
+
38
+ 1. Are you a worker or venue?
39
+ 2. What country are you in?
40
+ 3. What email or phone number is on the account?
41
+ 4. What page were you on when the issue happened?
42
+ 5. If it is about a shift, what is the role, date, venue/company, and city?
43
+ 6. If it is about payment, what provider was shown: Hubtel, Paystack, Razorpay, Stripe, or bank/card?
44
+ 7. What exact error message did you see?
45
+
46
+ ## Risk Warning
47
+
48
+ Do not manually override identity verification, payment status, payout destination, worker reliability, cancellation penalties, or dispute outcomes unless an authorized admin or engineering escalation confirms it.
49
+
@@ -1,99 +1,99 @@
1
- # Admin Tools And SMS Campaigns
2
-
3
- This guide trains admins to use campaign tools, verification queues, user management, shifts, payments, and disputes.
4
-
5
- ## Admin SMS Campaigns
6
-
7
- SMS campaigns are for Ghana users through Hubtel SMS.
8
-
9
- Supported audiences:
10
-
11
- - Workers.
12
- - Venues.
13
- - Both workers and venues.
14
-
15
- The campaign tool should:
16
-
17
- 1. Let admin choose audience.
18
- 2. Preview real recipients.
19
- 3. Show skipped users missing phone numbers.
20
- 4. Send a test SMS before bulk sending.
21
- 5. Send personalized batch SMS through Hubtel.
22
- 6. Save campaign logs in `sms_campaigns`.
23
-
24
- ## Hubtel SMS Contract
25
-
26
- The gateway follows Hubtel SMS docs:
27
-
28
- - Single test SMS: `POST /v1/messages/send`.
29
- - Personalized batch SMS: `POST /v1/messages/batch/personalized/send`.
30
- - Basic Auth is built from SMS credentials.
31
- - Sender ID max length is 11 characters.
32
-
33
- Supported variables:
34
-
35
- - `{{first_name}}`
36
- - `{{last_name}}`
37
- - `{{name}}`
38
- - `{{company_name}}`
39
- - `{{account_type}}`
40
- - `{{city}}`
41
- - `{{town}}`
42
-
43
- ## SMS Troubleshooting
44
-
45
- If test SMS returns 400:
46
-
47
- - Check Hubtel error details.
48
- - Check phone format normalizes to `233...`.
49
- - Check sender ID is 11 characters or less.
50
- - Check message length is not too long.
51
- - Check SMS account credit.
52
- - Check if recipient is blacklisted.
53
- - Check SMS credentials.
54
-
55
- If no workers appear:
56
-
57
- - Check Ghana workers have profile phone numbers.
58
- - Workers without phone numbers are skipped.
59
-
60
- If venues appear but workers do not:
61
-
62
- - Venue phone may exist on `venues.phone`.
63
- - Worker phone must exist on `profiles.phone`.
64
-
65
- ## Admin Verification Page
66
-
67
- Admins can review identity and business verification.
68
-
69
- Do not approve:
70
-
71
- - Mismatched names.
72
- - Blurry IDs.
73
- - Missing liveness.
74
- - Suspicious duplicate accounts.
75
-
76
- ## Admin Payments Page
77
-
78
- Admins should use this for:
79
-
80
- - Captured payments.
81
- - Payout status.
82
- - Failed provider responses.
83
- - Refund checks.
84
-
85
- Never expose secret keys in admin notes or user replies.
86
-
87
- ## Admin Disputes Page
88
-
89
- Admins should review:
90
-
91
- - Worker/venue claims.
92
- - Shift status.
93
- - Clock-in/out.
94
- - Messages.
95
- - Payment status.
96
- - Reliability/no-show history.
97
-
98
- Keep notes factual and timestamped.
99
-
1
+ # Admin Tools And SMS Campaigns
2
+
3
+ This guide trains admins to use campaign tools, verification queues, user management, shifts, payments, and disputes.
4
+
5
+ ## Admin SMS Campaigns
6
+
7
+ SMS campaigns are for Ghana users through Hubtel SMS.
8
+
9
+ Supported audiences:
10
+
11
+ - Workers.
12
+ - Venues.
13
+ - Both workers and venues.
14
+
15
+ The campaign tool should:
16
+
17
+ 1. Let admin choose audience.
18
+ 2. Preview real recipients.
19
+ 3. Show skipped users missing phone numbers.
20
+ 4. Send a test SMS before bulk sending.
21
+ 5. Send personalized batch SMS through Hubtel.
22
+ 6. Save campaign logs in `sms_campaigns`.
23
+
24
+ ## Hubtel SMS Contract
25
+
26
+ The gateway follows Hubtel SMS docs:
27
+
28
+ - Single test SMS: `POST /v1/messages/send`.
29
+ - Personalized batch SMS: `POST /v1/messages/batch/personalized/send`.
30
+ - Basic Auth is built from SMS credentials.
31
+ - Sender ID max length is 11 characters.
32
+
33
+ Supported variables:
34
+
35
+ - `{{first_name}}`
36
+ - `{{last_name}}`
37
+ - `{{name}}`
38
+ - `{{company_name}}`
39
+ - `{{account_type}}`
40
+ - `{{city}}`
41
+ - `{{town}}`
42
+
43
+ ## SMS Troubleshooting
44
+
45
+ If test SMS returns 400:
46
+
47
+ - Check Hubtel error details.
48
+ - Check phone format normalizes to `233...`.
49
+ - Check sender ID is 11 characters or less.
50
+ - Check message length is not too long.
51
+ - Check SMS account credit.
52
+ - Check if recipient is blacklisted.
53
+ - Check SMS credentials.
54
+
55
+ If no workers appear:
56
+
57
+ - Check Ghana workers have profile phone numbers.
58
+ - Workers without phone numbers are skipped.
59
+
60
+ If venues appear but workers do not:
61
+
62
+ - Venue phone may exist on `venues.phone`.
63
+ - Worker phone must exist on `profiles.phone`.
64
+
65
+ ## Admin Verification Page
66
+
67
+ Admins can review identity and business verification.
68
+
69
+ Do not approve:
70
+
71
+ - Mismatched names.
72
+ - Blurry IDs.
73
+ - Missing liveness.
74
+ - Suspicious duplicate accounts.
75
+
76
+ ## Admin Payments Page
77
+
78
+ Admins should use this for:
79
+
80
+ - Captured payments.
81
+ - Payout status.
82
+ - Failed provider responses.
83
+ - Refund checks.
84
+
85
+ Never expose secret keys in admin notes or user replies.
86
+
87
+ ## Admin Disputes Page
88
+
89
+ Admins should review:
90
+
91
+ - Worker/venue claims.
92
+ - Shift status.
93
+ - Clock-in/out.
94
+ - Messages.
95
+ - Payment status.
96
+ - Reliability/no-show history.
97
+
98
+ Keep notes factual and timestamped.
99
+