@jungjaehoon/mama-os 0.12.2 → 0.13.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.
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +2 -6
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/api/cron-handler.d.ts.map +1 -1
- package/dist/api/cron-handler.js +30 -0
- package/dist/api/cron-handler.js.map +1 -1
- package/dist/api/types.d.ts +3 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js +1 -0
- package/dist/api/types.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +24 -16
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/scheduler/cron-result-router.d.ts +23 -0
- package/dist/scheduler/cron-result-router.d.ts.map +1 -0
- package/dist/scheduler/cron-result-router.js +63 -0
- package/dist/scheduler/cron-result-router.js.map +1 -0
- package/dist/scheduler/cron-scheduler.d.ts +1 -1
- package/dist/scheduler/cron-scheduler.d.ts.map +1 -1
- package/dist/scheduler/cron-scheduler.js +1 -1
- package/dist/scheduler/cron-scheduler.js.map +1 -1
- package/dist/scheduler/cron-worker.d.ts +38 -0
- package/dist/scheduler/cron-worker.d.ts.map +1 -0
- package/dist/scheduler/cron-worker.js +86 -0
- package/dist/scheduler/cron-worker.js.map +1 -0
- package/dist/scheduler/index.d.ts +4 -0
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +7 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/types.d.ts +2 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/types.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/scheduling.md +24 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CronWorker = void 0;
|
|
4
|
+
const persistent_cli_process_js_1 = require("../agent/persistent-cli-process.js");
|
|
5
|
+
const CRON_SYSTEM_PROMPT = `You are a cron job executor. Execute the given task and return the result.
|
|
6
|
+
Available tools: Bash, Read, Write, Glob, Grep.
|
|
7
|
+
Be concise. Return only the result.`;
|
|
8
|
+
const CRON_MODEL = 'claude-haiku-4-5-20251001';
|
|
9
|
+
// Restrict cron worker to safe tools only (prevents RCE via prompt injection)
|
|
10
|
+
const CRON_ALLOWED_TOOLS = ['Bash', 'Read', 'Write', 'Glob', 'Grep'];
|
|
11
|
+
class CronWorker {
|
|
12
|
+
cli = null;
|
|
13
|
+
emitter;
|
|
14
|
+
model;
|
|
15
|
+
systemPrompt;
|
|
16
|
+
executionQueue = Promise.resolve();
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.emitter = options.emitter;
|
|
19
|
+
this.model = options.model ?? CRON_MODEL;
|
|
20
|
+
this.systemPrompt = options.systemPrompt ?? CRON_SYSTEM_PROMPT;
|
|
21
|
+
}
|
|
22
|
+
ensureCLI() {
|
|
23
|
+
if (!this.cli) {
|
|
24
|
+
this.cli = new persistent_cli_process_js_1.PersistentClaudeProcess({
|
|
25
|
+
sessionId: `cron-worker-${Date.now()}`,
|
|
26
|
+
model: this.model,
|
|
27
|
+
systemPrompt: this.systemPrompt,
|
|
28
|
+
dangerouslySkipPermissions: true,
|
|
29
|
+
allowedTools: CRON_ALLOWED_TOOLS,
|
|
30
|
+
pluginDir: undefined,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return this.cli;
|
|
34
|
+
}
|
|
35
|
+
async execute(prompt, context = {}) {
|
|
36
|
+
// Serialize execution to prevent race conditions on shared CLI instance
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
this.executionQueue = this.executionQueue.then(async () => {
|
|
39
|
+
try {
|
|
40
|
+
const result = await this.executeInternal(prompt, context);
|
|
41
|
+
resolve(result);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
reject(error);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async executeInternal(prompt, context) {
|
|
50
|
+
const { jobId = 'unknown', jobName = 'unknown', channel } = context;
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
try {
|
|
53
|
+
const cli = this.ensureCLI();
|
|
54
|
+
const result = await cli.sendMessage(prompt);
|
|
55
|
+
const duration = Date.now() - startTime;
|
|
56
|
+
this.emitter.emit('cron:completed', {
|
|
57
|
+
jobId,
|
|
58
|
+
jobName,
|
|
59
|
+
result: result.response,
|
|
60
|
+
duration,
|
|
61
|
+
channel,
|
|
62
|
+
});
|
|
63
|
+
return result.response;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const duration = Date.now() - startTime;
|
|
67
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
68
|
+
this.emitter.emit('cron:failed', {
|
|
69
|
+
jobId,
|
|
70
|
+
jobName,
|
|
71
|
+
error: errorMsg,
|
|
72
|
+
duration,
|
|
73
|
+
channel,
|
|
74
|
+
});
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async stop() {
|
|
79
|
+
if (this.cli) {
|
|
80
|
+
await this.cli.stop();
|
|
81
|
+
this.cli = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.CronWorker = CronWorker;
|
|
86
|
+
//# sourceMappingURL=cron-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-worker.js","sourceRoot":"","sources":["../../src/scheduler/cron-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,4 +19,8 @@ export { recoverSchedules, syncSchedulerState, createPersistenceHandler } from '
|
|
|
19
19
|
export type { RecoveryResult, RecoveryOptions } from './recovery.js';
|
|
20
20
|
export type { JobStatus, JobConfig, CronJob, JobResult, SchedulerOptions, JobEventType, JobEvent, JobEventHandler, SchedulerErrorCode, } from './types.js';
|
|
21
21
|
export { SchedulerError } from './types.js';
|
|
22
|
+
export { CronWorker } from './cron-worker.js';
|
|
23
|
+
export type { CronWorkerOptions, CronJobContext, CronCompletedEvent, CronFailedEvent, } from './cron-worker.js';
|
|
24
|
+
export { CronResultRouter } from './cron-result-router.js';
|
|
25
|
+
export type { CronResultRouterOptions, GatewaySender } from './cron-result-router.js';
|
|
22
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrE,YAAY,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC/F,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrE,YAAY,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/scheduler/index.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - Types - All type definitions
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.SchedulerError = exports.createPersistenceHandler = exports.syncSchedulerState = exports.recoverSchedules = exports.ScheduleStore = exports.TokenKeepAlive = exports.JobLock = exports.CronScheduler = void 0;
|
|
13
|
+
exports.CronResultRouter = exports.CronWorker = exports.SchedulerError = exports.createPersistenceHandler = exports.syncSchedulerState = exports.recoverSchedules = exports.ScheduleStore = exports.TokenKeepAlive = exports.JobLock = exports.CronScheduler = void 0;
|
|
14
14
|
var cron_scheduler_js_1 = require("./cron-scheduler.js");
|
|
15
15
|
Object.defineProperty(exports, "CronScheduler", { enumerable: true, get: function () { return cron_scheduler_js_1.CronScheduler; } });
|
|
16
16
|
var job_lock_js_1 = require("./job-lock.js");
|
|
@@ -28,4 +28,10 @@ Object.defineProperty(exports, "syncSchedulerState", { enumerable: true, get: fu
|
|
|
28
28
|
Object.defineProperty(exports, "createPersistenceHandler", { enumerable: true, get: function () { return recovery_js_1.createPersistenceHandler; } });
|
|
29
29
|
var types_js_1 = require("./types.js");
|
|
30
30
|
Object.defineProperty(exports, "SchedulerError", { enumerable: true, get: function () { return types_js_1.SchedulerError; } });
|
|
31
|
+
// Cron Worker (isolated process)
|
|
32
|
+
var cron_worker_js_1 = require("./cron-worker.js");
|
|
33
|
+
Object.defineProperty(exports, "CronWorker", { enumerable: true, get: function () { return cron_worker_js_1.CronWorker; } });
|
|
34
|
+
// Cron Result Router (direct gateway delivery)
|
|
35
|
+
var cron_result_router_js_1 = require("./cron-result-router.js");
|
|
36
|
+
Object.defineProperty(exports, "CronResultRouter", { enumerable: true, get: function () { return cron_result_router_js_1.CronResultRouter; } });
|
|
31
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,6CAAwC;AAA/B,sGAAA,OAAO,OAAA;AAGhB,mBAAmB;AACnB,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AAGvB,cAAc;AACd,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AAQtB,WAAW;AACX,6CAA+F;AAAtF,+GAAA,gBAAgB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,uHAAA,wBAAwB,OAAA;AAgBvE,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,6CAAwC;AAA/B,sGAAA,OAAO,OAAA;AAGhB,mBAAmB;AACnB,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AAGvB,cAAc;AACd,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AAQtB,WAAW;AACX,6CAA+F;AAAtF,+GAAA,gBAAgB,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,uHAAA,wBAAwB,OAAA;AAgBvE,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AAEvB,iCAAiC;AACjC,mDAA8C;AAArC,4GAAA,UAAU,OAAA;AAQnB,+CAA+C;AAC/C,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA"}
|
|
@@ -19,6 +19,8 @@ export interface JobConfig {
|
|
|
19
19
|
prompt: string;
|
|
20
20
|
/** Whether job is enabled (default: true) */
|
|
21
21
|
enabled?: boolean;
|
|
22
|
+
/** Target channel for result delivery (e.g., "discord:channelId", "slack:channelId") */
|
|
23
|
+
channel?: string;
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
24
26
|
* Full job information including runtime state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,OAAQ,SAAQ,SAAS;IACxC,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,yBAAyB;IACzB,WAAW,EAAE,IAAI,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,eAAe,GACf,YAAY,GACZ,aAAa,GACb,iBAAiB,CAAC;AAEtB;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;aAGrB,IAAI,EAAE,kBAAkB;aACxB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,kBAAkB,EACxB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scheduler/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsGH;;GAEG;AACH,MAAa,cAAe,SAAQ,KAAK;IAGrB;IACA;IAHlB,YACE,OAAe,EACC,IAAwB,EACxB,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAoB;QACxB,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AATD,wCASC"}
|
package/package.json
CHANGED
|
@@ -71,12 +71,35 @@ python3 스크립트로 크롤링하고 discord_send 도구로 전송.
|
|
|
71
71
|
|
|
72
72
|
→ 너무 모호함. 어떤 뉴스? 어디로? 몇 개?
|
|
73
73
|
|
|
74
|
+
## 결과 전달 (channel 필드)
|
|
75
|
+
|
|
76
|
+
크론잡 결과를 특정 게이트웨이 채널로 자동 전달할 수 있음.
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
scheduling:
|
|
80
|
+
jobs:
|
|
81
|
+
- id: daily_report
|
|
82
|
+
name: 일일 리포트
|
|
83
|
+
cron: '0 9 * * *'
|
|
84
|
+
prompt: '일일 요약 생성'
|
|
85
|
+
enabled: true
|
|
86
|
+
channel: discord:123456789 # gateway:channelId 형식
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**지원 형식:**
|
|
90
|
+
|
|
91
|
+
- `discord:채널ID` — Discord 채널로 전달
|
|
92
|
+
- `slack:채널ID` — Slack 채널로 전달
|
|
93
|
+
- `viewer:세션ID` — Viewer UI로 전달
|
|
94
|
+
- 미지정 시 결과는 DB에만 저장
|
|
95
|
+
|
|
74
96
|
## 주의사항
|
|
75
97
|
|
|
76
98
|
- 크론잡은 MAMA 재시작 시 자동 로드됨
|
|
77
99
|
- `enabled: false`로 비활성화 가능
|
|
78
100
|
- 복잡한 작업은 스크립트 파일로 분리 권장
|
|
79
|
-
-
|
|
101
|
+
- 크론잡은 OS 에이전트와 독립된 전용 프로세스에서 실행됨 (Viewer 메시지 차단 없음)
|
|
102
|
+
- 프롬프트 최대 10,000자 제한
|
|
80
103
|
|
|
81
104
|
## 관련 파일
|
|
82
105
|
|