crewly 1.20.25 → 1.20.28

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 (86) hide show
  1. package/dist/backend/backend/src/constants.d.ts +2 -2
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +2 -2
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
  6. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +38 -7
  7. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
  8. package/dist/backend/backend/src/controllers/request-types.d.ts +12 -0
  9. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  11. package/dist/backend/backend/src/controllers/team/team.controller.js +64 -1
  12. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  13. package/dist/backend/backend/src/index.d.ts.map +1 -1
  14. package/dist/backend/backend/src/index.js +9 -3
  15. package/dist/backend/backend/src/index.js.map +1 -1
  16. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  17. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  18. package/dist/backend/backend/src/services/agent/agent-registration.service.js +40 -6
  19. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  20. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +1 -1
  21. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  22. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +7 -3
  23. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  24. package/dist/backend/backend/src/services/core/storage.service.d.ts +5 -2
  25. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/core/storage.service.js +10 -2
  27. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  28. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +1 -1
  29. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  30. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/slack/slack-initializer.js +1 -0
  32. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  33. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +3 -2
  35. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  36. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +4 -4
  37. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +4 -4
  38. package/dist/backend/backend/src/services/slack/slack.service.d.ts +2 -0
  39. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/slack/slack.service.js +21 -2
  41. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  42. package/dist/backend/backend/src/types/index.d.ts +14 -1
  43. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  44. package/dist/backend/backend/src/types/index.js.map +1 -1
  45. package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts +68 -0
  46. package/dist/backend/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -0
  47. package/dist/backend/backend/src/utils/runtime-model-flags.utils.js +140 -0
  48. package/dist/backend/backend/src/utils/runtime-model-flags.utils.js.map +1 -0
  49. package/dist/backend/build-info.json +2 -2
  50. package/dist/cli/backend/src/constants.d.ts +2 -2
  51. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  52. package/dist/cli/backend/src/constants.js +2 -2
  53. package/dist/cli/backend/src/constants.js.map +1 -1
  54. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  55. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  56. package/dist/cli/backend/src/services/agent/agent-registration.service.js +40 -6
  57. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  58. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +1 -1
  59. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  60. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +7 -3
  61. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  62. package/dist/cli/backend/src/services/core/storage.service.d.ts +5 -2
  63. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  64. package/dist/cli/backend/src/services/core/storage.service.js +10 -2
  65. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  66. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +1 -1
  67. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  68. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  69. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +3 -2
  70. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  71. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +4 -4
  72. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +4 -4
  73. package/dist/cli/backend/src/services/slack/slack.service.d.ts +2 -0
  74. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  75. package/dist/cli/backend/src/services/slack/slack.service.js +21 -2
  76. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  77. package/dist/cli/backend/src/types/index.d.ts +14 -1
  78. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  79. package/dist/cli/backend/src/types/index.js.map +1 -1
  80. package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts +68 -0
  81. package/dist/cli/backend/src/utils/runtime-model-flags.utils.d.ts.map +1 -0
  82. package/dist/cli/backend/src/utils/runtime-model-flags.utils.js +140 -0
  83. package/dist/cli/backend/src/utils/runtime-model-flags.utils.js.map +1 -0
  84. package/frontend/dist/assets/{index-f761b08d.js → index-d1bd0dec.js} +274 -274
  85. package/frontend/dist/index.html +1 -1
  86. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Per-agent model selection for the PTY runtimes.
3
+ *
4
+ * Every harness exposes a launch flag that pins the model for the session
5
+ * (the in-process Crewly Agent runtime takes its model in code instead):
6
+ *
7
+ * | runtime | model flag | reasoning effort |
8
+ * |--------------|-----------------------|-------------------------------------------|
9
+ * | claude-code | `--model <name>` | `--effort low|medium|high|xhigh|max` |
10
+ * | codex-cli | `-m <name>` | `-c model_reasoning_effort="<level>"` |
11
+ * | gemini-cli | `-m <name>` | — |
12
+ * | opencode-cli | `--model <prov/model>`| — |
13
+ *
14
+ * `buildRuntimeModelFlags` turns a member's `modelId` / `reasoningEffort`
15
+ * into those flags; `injectRuntimeFlags` places any flag list right after
16
+ * the harness binary in a launch command (`codex resume …` included) and
17
+ * drops a pre-existing copy of the same flag so the member override wins
18
+ * without tripping clap's "cannot be used multiple times".
19
+ *
20
+ * @module utils/runtime-model-flags
21
+ */
22
+ /**
23
+ * Whether a model id is safe to put on a command line.
24
+ *
25
+ * @param modelId - Candidate model id
26
+ * @returns True when it matches the allowed character set
27
+ */
28
+ export declare function isSafeModelId(modelId: string | undefined): modelId is string;
29
+ /**
30
+ * Whether a reasoning-effort level is safe to put on a command line.
31
+ *
32
+ * @param effort - Candidate level
33
+ * @returns True when it is a single lowercase word
34
+ */
35
+ export declare function isSafeReasoningEffort(effort: string | undefined): effort is string;
36
+ /**
37
+ * Build the launch flags that pin a model (and optionally the reasoning
38
+ * effort) for one runtime. Unknown runtimes and the in-process Crewly
39
+ * Agent get no flags; unsafe values are ignored rather than quoted.
40
+ *
41
+ * @param runtimeType - The member's runtime
42
+ * @param modelId - Model name as the harness expects it (`opus`, `gpt-5.6-sol`, `anthropic/claude-sonnet-4`)
43
+ * @param reasoningEffort - Optional effort level (Claude Code / Codex only)
44
+ * @returns Flags to insert after the binary, e.g. `['--model', 'opus']`
45
+ *
46
+ * @example
47
+ * buildRuntimeModelFlags('codex-cli', 'gpt-5.6-sol', 'high')
48
+ * // => ['-m', 'gpt-5.6-sol', '-c', 'model_reasoning_effort="high"']
49
+ */
50
+ export declare function buildRuntimeModelFlags(runtimeType: string, modelId?: string, reasoningEffort?: string): string[];
51
+ /**
52
+ * Insert flags into a launch command right after the runtime binary
53
+ * (`claude`, `codex`/`codex resume`, `gemini`, `opencode`). A flag that is
54
+ * already present in the command is replaced. When the binary is not found
55
+ * (custom wrapper scripts), the flags go before
56
+ * `--dangerously-skip-permissions` if present, else at the end.
57
+ *
58
+ * @param command - One launch command line (may carry a `VAR=1` prefix)
59
+ * @param runtimeType - The runtime the command starts
60
+ * @param flags - Flags to insert (already shell-safe)
61
+ * @returns The rewritten command; unchanged when `flags` is empty
62
+ *
63
+ * @example
64
+ * injectRuntimeFlags('codex -a never -s danger-full-access', 'codex-cli', ['-m', 'gpt-5.6-sol'])
65
+ * // => 'codex -m gpt-5.6-sol -a never -s danger-full-access'
66
+ */
67
+ export declare function injectRuntimeFlags(command: string, runtimeType: string, flags: string[]): string;
68
+ //# sourceMappingURL=runtime-model-flags.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-model-flags.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/runtime-model-flags.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA0BH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,IAAI,MAAM,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,CAElF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,EAAE,CAkBV;AAeD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAgBhG"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Per-agent model selection for the PTY runtimes.
3
+ *
4
+ * Every harness exposes a launch flag that pins the model for the session
5
+ * (the in-process Crewly Agent runtime takes its model in code instead):
6
+ *
7
+ * | runtime | model flag | reasoning effort |
8
+ * |--------------|-----------------------|-------------------------------------------|
9
+ * | claude-code | `--model <name>` | `--effort low|medium|high|xhigh|max` |
10
+ * | codex-cli | `-m <name>` | `-c model_reasoning_effort="<level>"` |
11
+ * | gemini-cli | `-m <name>` | — |
12
+ * | opencode-cli | `--model <prov/model>`| — |
13
+ *
14
+ * `buildRuntimeModelFlags` turns a member's `modelId` / `reasoningEffort`
15
+ * into those flags; `injectRuntimeFlags` places any flag list right after
16
+ * the harness binary in a launch command (`codex resume …` included) and
17
+ * drops a pre-existing copy of the same flag so the member override wins
18
+ * without tripping clap's "cannot be used multiple times".
19
+ *
20
+ * @module utils/runtime-model-flags
21
+ */
22
+ import { RUNTIME_TYPES } from '../constants.js';
23
+ /** Model names are passed to a shell: only the characters real model ids use. */
24
+ const MODEL_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/;
25
+ /** Effort levels are single lowercase words (`low`, `xhigh`, …). */
26
+ const EFFORT_RE = /^[a-z][a-z0-9]{0,15}$/;
27
+ /** Flags that select a model / effort, per runtime, so an existing copy can be replaced. */
28
+ const MODEL_FLAG_NAMES = {
29
+ [RUNTIME_TYPES.CLAUDE_CODE]: ['--model', '--effort'],
30
+ [RUNTIME_TYPES.CODEX_CLI]: ['--model', '-m'],
31
+ [RUNTIME_TYPES.GEMINI_CLI]: ['--model', '-m'],
32
+ [RUNTIME_TYPES.OPENCODE_CLI]: ['--model', '-m'],
33
+ };
34
+ /** Runtime binaries, used to find the insertion point in a launch command. */
35
+ const RUNTIME_BINARY_RE = {
36
+ [RUNTIME_TYPES.CLAUDE_CODE]: /\bclaude\b/,
37
+ // `codex resume <id>` takes the same global flags after the subcommand.
38
+ [RUNTIME_TYPES.CODEX_CLI]: /\bcodex(?:\s+resume)?\b/,
39
+ [RUNTIME_TYPES.GEMINI_CLI]: /\bgemini\b/,
40
+ [RUNTIME_TYPES.OPENCODE_CLI]: /\bopencode\b/,
41
+ };
42
+ /**
43
+ * Whether a model id is safe to put on a command line.
44
+ *
45
+ * @param modelId - Candidate model id
46
+ * @returns True when it matches the allowed character set
47
+ */
48
+ export function isSafeModelId(modelId) {
49
+ return typeof modelId === 'string' && MODEL_ID_RE.test(modelId);
50
+ }
51
+ /**
52
+ * Whether a reasoning-effort level is safe to put on a command line.
53
+ *
54
+ * @param effort - Candidate level
55
+ * @returns True when it is a single lowercase word
56
+ */
57
+ export function isSafeReasoningEffort(effort) {
58
+ return typeof effort === 'string' && EFFORT_RE.test(effort);
59
+ }
60
+ /**
61
+ * Build the launch flags that pin a model (and optionally the reasoning
62
+ * effort) for one runtime. Unknown runtimes and the in-process Crewly
63
+ * Agent get no flags; unsafe values are ignored rather than quoted.
64
+ *
65
+ * @param runtimeType - The member's runtime
66
+ * @param modelId - Model name as the harness expects it (`opus`, `gpt-5.6-sol`, `anthropic/claude-sonnet-4`)
67
+ * @param reasoningEffort - Optional effort level (Claude Code / Codex only)
68
+ * @returns Flags to insert after the binary, e.g. `['--model', 'opus']`
69
+ *
70
+ * @example
71
+ * buildRuntimeModelFlags('codex-cli', 'gpt-5.6-sol', 'high')
72
+ * // => ['-m', 'gpt-5.6-sol', '-c', 'model_reasoning_effort="high"']
73
+ */
74
+ export function buildRuntimeModelFlags(runtimeType, modelId, reasoningEffort) {
75
+ const model = isSafeModelId(modelId) ? modelId : undefined;
76
+ const effort = isSafeReasoningEffort(reasoningEffort) ? reasoningEffort : undefined;
77
+ switch (runtimeType) {
78
+ case RUNTIME_TYPES.CLAUDE_CODE:
79
+ return [...(model ? ['--model', model] : []), ...(effort ? ['--effort', effort] : [])];
80
+ case RUNTIME_TYPES.CODEX_CLI:
81
+ return [
82
+ ...(model ? ['-m', model] : []),
83
+ ...(effort ? ['-c', `model_reasoning_effort="${effort}"`] : []),
84
+ ];
85
+ case RUNTIME_TYPES.GEMINI_CLI:
86
+ return model ? ['-m', model] : [];
87
+ case RUNTIME_TYPES.OPENCODE_CLI:
88
+ return model ? ['--model', model] : [];
89
+ default:
90
+ return [];
91
+ }
92
+ }
93
+ /**
94
+ * Remove an existing `<flag> <value>` / `<flag>=<value>` pair from a command.
95
+ *
96
+ * @param command - Launch command
97
+ * @param flagName - e.g. `--model` or `-m`
98
+ * @returns Command without that flag
99
+ */
100
+ function stripFlag(command, flagName) {
101
+ const escaped = flagName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
102
+ const re = new RegExp(`(^|\\s)${escaped}(?:=|\\s+)(?:"[^"]*"|'[^']*'|\\S+)(?=\\s|$)`, 'g');
103
+ return command.replace(re, '$1').replace(/\s{2,}/g, ' ').trim();
104
+ }
105
+ /**
106
+ * Insert flags into a launch command right after the runtime binary
107
+ * (`claude`, `codex`/`codex resume`, `gemini`, `opencode`). A flag that is
108
+ * already present in the command is replaced. When the binary is not found
109
+ * (custom wrapper scripts), the flags go before
110
+ * `--dangerously-skip-permissions` if present, else at the end.
111
+ *
112
+ * @param command - One launch command line (may carry a `VAR=1` prefix)
113
+ * @param runtimeType - The runtime the command starts
114
+ * @param flags - Flags to insert (already shell-safe)
115
+ * @returns The rewritten command; unchanged when `flags` is empty
116
+ *
117
+ * @example
118
+ * injectRuntimeFlags('codex -a never -s danger-full-access', 'codex-cli', ['-m', 'gpt-5.6-sol'])
119
+ * // => 'codex -m gpt-5.6-sol -a never -s danger-full-access'
120
+ */
121
+ export function injectRuntimeFlags(command, runtimeType, flags) {
122
+ if (flags.length === 0)
123
+ return command;
124
+ let cmd = command;
125
+ const known = MODEL_FLAG_NAMES[runtimeType] ?? [];
126
+ for (const flag of flags) {
127
+ if (flag.startsWith('-') && known.includes(flag))
128
+ cmd = stripFlag(cmd, flag);
129
+ }
130
+ const flagStr = flags.join(' ');
131
+ const binary = RUNTIME_BINARY_RE[runtimeType];
132
+ if (binary && binary.test(cmd)) {
133
+ return cmd.replace(binary, (m) => `${m} ${flagStr}`);
134
+ }
135
+ if (cmd.includes('--dangerously-skip-permissions')) {
136
+ return cmd.replace('--dangerously-skip-permissions', `${flagStr} --dangerously-skip-permissions`);
137
+ }
138
+ return `${cmd} ${flagStr}`;
139
+ }
140
+ //# sourceMappingURL=runtime-model-flags.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-model-flags.utils.js","sourceRoot":"","sources":["../../../../../backend/src/utils/runtime-model-flags.utils.ts"],"names":[],"mappings":"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"}